Base62x比Base64的編碼速度更快嗎?

如今幾乎全部企事業單位、政府機構、軍工系統等的IT生產系統都會用到Base64編碼,從RSA安全密鑰到管理信息系統登陸入口回跳,目前愈來愈多的IT系統研發者開始使用 Base62x 替換 Base64.git

-Base62x 提供了一種無符號輸出的Base64的編碼方案,在許多應用場合其純字母和數字的輸出形式,能夠有效的規避由於符號帶來的各類負面影響,並可以有效削減或兼容各類Base64的變種形式。github

藉着 Base62x 在 -GitHub 上得到幾個贊以後,咱們探討另一個問題,Base62x 的編碼在輸出文本形式上略勝一籌,是值得推薦的替代方案,但其編碼速度和效率如何?安全

爲此咱們設計一個評測任務,分別使用Base62x 和 Base64進行20萬次編碼操做,其中Base62x 使用 PHP的ext module方式實現的 base62x_encode , Base64 也是 PHP內置的 base64_encode , 兩種均是使用C語言實現,並經過擴展方式集成在 PHP中,相對而言,可比性較好. 運行主機是在 Windows下虛擬主機運行 OpenSuSE 42,Nginx 1.12, PHP 7.0.
經過腳本Command Line調用方式進行20萬次編碼任務,對比測試數據:測試

base62x 200000 timestart:1513077337.6748 timecost:0.30399990081787
base64 200000 timestart:1513077337.9788 timecost:0.16817998886108

base62x 200000 timestart:1513077401.2177 timecost:0.29567098617554
base64 200000 timestart:1513077401.5134 timecost:0.17081189155579優化

base62x 200000 timestart:1513077424.234 timecost:0.30112099647522
base64 200000 timestart:1513077424.5351 timecost:0.1718909740448編碼

base62x 200000 timestart:1513077447.9861 timecost:0.29450607299805
base64 200000 timestart:1513077448.2806 timecost:0.16546702384949設計

base62x 200000 timestart:1513077470.7367 timecost:0.45493698120117
base64 200000 timestart:1513077471.1917 timecost:0.24029588699341code

運行5次以後,Base62x 和 Base64 其均值分別爲,0.330047 和 0.183329 . 因而可知,Base62x 比 Base64 在編碼速度上稍慢,20萬次操做耗時比值爲 1:0.555 , 儘管每次操做其耗時差(7.33589E-07)能夠忽略不計,但考察比值,Base62x 慢了大約 44.5%,大體是 Base64 完成兩個編碼操做, 目前版本的 Base62x 完成一個多一點的編碼操做。dns

若是加上在應用層的各類判斷,使用 Base62x 替代 Base64 多是有優點的,好比判斷是否包括+,進而轉化爲空格,是否包括等號等,由於任何一步額外的判斷或替換操做,其耗時將可能遠超過 Base62x 與 Base64 操做耗時的差值。get

好比其中一個 URLEncode 的應用場景,在 -github/wadelau/gMIS/comm/ido.js 中( -R/J2SI ):

var actx = unescape(tObj.action);
actx = actx.replace(‘+‘, ‘ ‘);

取代的改進使用Base62x的方案是:

var actx = Base62x.decode(tObj.action);
 /* no more action needed */

從代碼層分析耗時差值緣由,儘管二者都使用了位操做進行計算,但 Base62x 在單位編碼長度上多了數值判斷,由此致使其速度降低。Base62x 仍是新事物,其代碼應該還有能夠再改進優化的空間。

若是進一步改進優化,Base62x 有可能與 Base64 相同的編碼速度嗎?

有沒有可能存在另一種不須要數值判斷,也可以知足與 Base62x 同樣無符號輸出的64進制編碼方案?

小結,單就編碼速度而言, Base64 方案快,若是加上其餘判斷與替換操做, Base62x 方案勝出,將來可能會有魚(無符號輸出)和熊掌(速度)兼得的新編碼方案出現。

-R/p2SQ

相關文章
相關標籤/搜索