swift-extras-base64

Swift 5.1 github-actions codecov macOS tuxOS

这个包提供了 Swift 中的 base64 编码器和解码器,无需使用 Foundation 框架。 该实现符合 RFC4648 标准,并且比 Foundation 的 base64 实现更快。

为了获得高性能,该实现使用了 Chromium 预计算查找表,并大量使用了不安全的 Swift API。 当 Swift 对 SIMD 指令有更好的支持时,这可能是一个值得探索的领域。

状态

这个包以前的实现 被用在 swift-nio 的 websocket 实现中

性能

超级简单的性能测试,以确保此实现的速度。 编码和解码 base64 字符串 100 万次

AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==

测试在 MacBook Pro (16-inch, late 2019) 上运行。 处理器:2.4 GHz 8 核 Intel Core i9。

macOS - swift 5.3

编码 解码
Foundation 2.08 秒 2.15 秒
swift-extras-base64 0.66 秒 0.54 秒
加速 3 倍 4 倍

Linux - swift 5.3

编码 解码
Foundation 1.01 秒 5.5 秒
swift-extras-base64 0.27 秒 0.41 秒
加速 3 倍 ~10 倍

更快算法的文献

我真的很想进一步加速这个项目,使其比现在更快。 这里有一些关于如何解决这个问题的想法

替代方案

截至今天 (2019-12-10),作者只知道一个仅提供编码的替代方案。