当前位置: 首页 > 后端技术 > PHP

Base62x比Base64编码更快吗?

时间:2023-03-29 22:41:33 PHP

现在企事业单位、政府机关、军队系统等几乎所有的IT生产系统,从RSA安全密钥到管理信息系统的登录入口,都会使用Base64编码。目前,越来越多的IT系统开发者开始使用Base62x来替代Base64。-Base62x提供了一种Base64编码方案,输出无符号。在很多应用中,其纯字母和数字的输出形式可以有效避免符号。可以有效减少或兼容各种Base64变体。在使用Base62x在GitHub上获得了一些赞之后,我们讨论另一个问题。Base62x的编码在输出文本的形式上稍微好一些。这是一个推荐的替代方案,但它的编码速度和效率如何?为此我们设计了一个评估任务,使用Base62x和Base64进行20万次编码操作,其中Base62x使用PHP的ext模块实现的base62x_encode,Base64也是PHP内置的base64_encode。两者都是用C语言实现,集成在PHP中,相对来说可比性更好。运行主机为Windows下运行OpenSuSE42、Nginx1.12、PHP7.0的虚拟主机。200,000encodingtasksareperformedthroughscriptCommandLinecalls,andthecomparisontestdata:base62x200000timestart:1513077337.6748timecost:0.30399990081787base64200000timestart:1513077337.9788timecost:0.16817998886108base62x200000timestart:1513077401.2177timecost:0.29567098617554base64200000timestart:1513077401.5134timecost:0.17081189155579base62x200000timestart:1513077424.234timecost:0.30112099647522base64200000timestart:1513077424.5351timecost:0.1718909740448base62x200000timestart:1513077447.9861timecost:0.29450607299805base64200000timestart:1513077448.2806timecost:0.16546702384949base62x200000timestart:1513077470.7367timecost:0.454936981201170base6042start:01170base604513077471.1917timecost:0.24029588699341运行5次后,Base62x和Base64的平均值分别为0.330047和0.183329。可以看出Base62x在编码速度上略慢于Base64,20万次运算的耗时比为1:0.555,虽然每次运算的耗时差异(7.33589E-07)可以忽略不计,但是对比可以看出Base62x慢了大约44.5%,大致是因为Base64完成了两次编码操作,而当前版本的Base62x如果加入到应用中,多完成一次编码操作可能对层的各种判断使用Base62x而不是Base64更有优势,比如判断是否包含+,然后转换成空格,是否包含等号等等,因为任何额外的判断或者替换操作,都可能花费比Base62x和Base64操作时间差很多的时间。比如URLEncode的应用场景之一,在-github/wadelau/gMIS/comm/ido.js(-R/J2SI)中:varactx=unescape(tObj.action);actx=actx.replace('+','');使用Base62x的改进方案是:varactx=Base62x.decode(tObj.action);/*nomoreactionneeded*/从代码层分析耗时差异的原因,虽然都是用位运算计算,但是Base62x对单位码长的数值判断较多,导致其速度有所下降。Base62x还是一个新东西,它的代码应该还有改进和优化的空间。如果进一步优化,Base62x是否有可能达到和Base64一样的编码速度?有没有可能还有另外一种64进制编码方案,不需要数值判断,可以满足和Base62x一样的无符号输出?综上所述,单论编码速度,一般来说,Base64方案是快的。如果再加上其他的判断和替换操作,Base62x方案会胜出。未来可能会出现鱼(无符号输出)和熊掌(速度)兼得的新编码方案。-R/p2SQ