加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 正文

JavaScript优化篇:BASE64极速版

发布时间:2018-08-19 07:53:43 所属栏目:创业 来源:站长网
导读:猛火网(LieHuo.Net)教程 BASE64道理很简朴,但要写出一个高效的,尤其是用JS这样高机动低服从的剧本,还需斟酌一翻。 先看看网上较量风行的版本。起首声明64个常量字符: 这一步各人都一样,也没有更好的要领列出这些字符。但接下来的做法,就大有考究了。

  猛火网(LieHuo.Net)教程 BASE64道理很简朴,但要写出一个高效的,尤其是用JS这样高机动低服从的剧本,还需斟酌一翻。

  先看看网上较量风行的版本。起首声明64个常量字符:

  这一步各人都一样,也没有更好的要领列出这些字符。但接下来的做法,就大有考究了。由于这里的key是一个String,以是各个版本里都大量充斥着charAt,乃至indexOf函数来操纵这个key。用charAt来会见key的第n个字符,这还在整理之中;但用indexOf来确定字符的位置,就不行包涵了。在VBScript里倒还能拼凑着用,但在JS里这种做法是很糟糕的,显然没有把其机动性施展出来。何谓机动性,用最短的话说就是多用哈希表。哈希表是JS与生俱来就有的对象,其服从是其他要领都不能对比的。显然,在BASE64这样数字与字符频仍转换的算法里,hash是该大显技艺的。

  再谈charAt的题目。charAt固然不会像indexOf那样服从数目级的降落,但也不是最优越的。剧本措施分两类,一类是本身写的,另类就是体系内置在赏识器中的,就是所谓的[Native Code]。后者的服从虽然是远高于前者,这各人都知道。以是尽也许多让代码交给体系执行,偶然看起来也许计较劲变大了,但最终的速率反倒晋升了。

  就说BASE64解码的进程,参数是个String,按通例的要领就是先charAt其每个字符。假若有1万个字符,那么charAt也就运行了1万次。可否将多次charAt函数的执行归并到1次当地代码的挪用上呢,虽然可以:

  var arr = str.split('');

  之后的str.charAt(i)就可以用arr[i]取代了。此要领虽多开发的一块内存,但最终的服从照旧有所进步,而且加强了代码可读性。虽然,在运行速率极快的赏识器好比FireFox,Chrome就没什么区别,乃至还也许倒退。

  最后就是一个条理上的题目。网上常有人在说BASE64怎样支持中文。凭证这种说法,BASE64用来编码解码字符串了,这与其意义几多有些偏离。BASE64的最初就是将二进制文件转成可见字符,在邮件里发送。因此其意义就在于二进制与字符的转换,而不是字符与字符的转换。JS没有二进制,但可以用0-255的数组来模仿。以是:

  function 编码函数(Array[]){return String;}

  function 解码函数(String){return Array[];}

  至于中文的题目,无非就是Unicode与ANSI的转换。JS貌似没有现成的转换函数,若要实现可以用Unicode与ANSI的比较表。但两边的编码/解码都同一行使Unicode,也就

  不存在支不支持的题目了。

  最终的代码:

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读