我有一个混淆的脚本,开头是这样的:
var _0xfb0b=["\x48\x2E\x31\x36\x28\x22\x4B\x2E
......对于超过435.000个字符(文件有425kB),它继续这样,最后这将是:
while(_0x8b47x3--){if(_0x8b47x4[_0x8b47x3]){_0x8b47x1=_0x8b47x1[_0xfb0b[8]](
new RegExp(_0xfb0b[6]+_0x8b47x5(_0x8b47x3)+_0xfb0b[6],_0xfb0b[7]),
_0x8b47x4[_0x8b47x3]);} ;} ;return _0x8b47x1;}
(_0xfb0b[0],62,2263,_0xfb0b[3][_0xfb0b[2]](_0xfb0b[1])));
我的问题是:与没有混淆的脚本相比,浏览器执行时难道不是方式吗?如果是这样,我可能会因为混淆而浪费多少时间?特别是像IE6这样的旧浏览器,在JS中真的不是那么高效,必须花费更多的时间,对吧?
答案 0 :(得分:3)
这取决于混淆器的作用。
如果它主要只是重命名标识符,我认为它对性能几乎没有影响,除非它使用的标识符名称是人为地长。
如果它扰乱控制或数据流,它可能对代码执行产生任意影响。 一些控制流加扰只能在不变的开销下完成。
您必须调查混淆方法才能知道答案。可能更容易衡量差异。
答案 1 :(得分:3)
在旧版浏览器上(特别是在初始化时),它确实会显着减慢浏览器的速度,但即使之后它也肯定会降低浏览器的速度。我有一个严重混淆的文件,初始化大约需要1.2秒,在同一浏览器中未经过模糊处理,PC大约需要0.2秒,因此非常重要。
答案 2 :(得分:2)
您正在使用的混淆似乎只是将所有字符串常量存储到一个数组中,并将它们放入原来的代码中。字符串被混淆到数组中,但仍然以字符串形式出现。 (试试console.log(_0xfb0b)看看我的意思。)
确实会减慢代码INITIALIZATION的速度。但是,一旦初始化了该数组,对脚本的影响可以忽略不计。