2012-03-12 3 views
2

は、私はこのような難読化と開始されますスクリプトがあります。難読化されたJavaScriptがブラウザを遅くしますか?

var _0xfb0b=["\x48\x2E\x31\x36\x28\x22\x4B\x2E 

を...それは(ファイルが425KBを持っている)より、その後435.000文字のためにそのように続けて、最後にこれが来ている:

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]))); 

私の質問は:方法ブラウザは難読化されていないスクリプトと比較して実行するのが難しいですか?もしそうなら、難読化のためにおそらく失われている時間はどれくらいですか?特に、JSで実用的ではないIE6のような古いブラウザは、それにもっと多くの時間を費やさなければならないのでしょうか?

+4

[jsperf](http://jsperf.com)に難読化されたバージョンと難読化されていないバージョンをドロップして見つけてみませんか? –

+0

私は難読化されていないバージョンを持っていないので。しかし、リンクのおかげで - 私は取得するか、難読化されていないバージョンを作成できるかどうかを確認します。 – Marc

答えて

2

あなたが使用している難読化は、すべての文字列定数を1つの配列に格納して元のコードに入れているようです。文字列は配列に難読化されていますが、引き続き文字列として出力されます。 (私が何を意味するか見るにはconsole.log(_0xfb0b)を試してください)。

これは間違いなく、コードの初期化を遅らせます。ただし、その配列が初期化されると、スクリプトへの影響はごくわずかです。

3

難読化ツールの機能によって異なります。

主に識別子の名前を変更する場合、識別子の名前が人為的に長い場合を除き、パフォーマンスに与える影響はほとんどないと考えられます。

制御またはデータフローをスクランブルすると、コード実行に任意の影響を与える可能性があります。 一部の制御フロースクランブリングは、一定のオーバーヘッドでのみ実行できます。

これに対する答えを知るには、難読化の方法を調べる必要があります。差を測定するだけで簡単になるかもしれません。

2

古いブラウザでは(具体的には初期化時)、ブラウザの速度が低下することは確かですが、それでも確実に遅くなります。私は非常に難読化されたファイルを持っていました。初期化には約1.2秒かかりました。同じブラウザではわかりにくく、PCは約0.2秒でした。

関連する問題