模糊的javascript是否会减慢浏览器的速度

Does obfuscated javascript slow a browser down?

本文关键字:浏览器 速度 javascript 是否 模糊      更新时间:2023-09-26

我有一个脚本,它被混淆了,开头是这样的:

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中的性能真的不那么好,必须在这方面花更多的时间,对吧?

在较旧的浏览器上(特别是在初始化时),它确实会显著降低浏览器的速度,但即使在初始化之后,它也会明显降低速度。我有一个严重混淆的文件,初始化大约需要1.2秒,在同一个浏览器中没有混淆,PC大约需要0.2秒,非常重要。

这取决于模糊处理程序的作用。

如果它主要只是重命名标识符,我希望它对性能几乎没有影响,除非它使用的标识符名称人为地长。

如果它扰乱了控制或数据流,它可能会对代码执行产生任意影响。一些控制流加扰可以仅用恒定的开销来完成。

你必须调查混淆的方法才能知道答案。仅仅测量差异可能更容易。

您使用的模糊处理似乎只是将所有字符串常量存储在一个数组中,并将它们放入原始代码中。字符串被模糊到数组中,但仍然显示为字符串。(试试console.log(_0xfb0b)看看我的意思)。

它确实降低了代码初始化的速度。但是,一旦初始化了该数组,对脚本的影响就可以忽略不计。