Запутывает ли JavaScript замедление работы браузера? - PullRequest
3 голосов
/ 12 марта 2012

У меня есть сценарий, который запутывается и начинается так:

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

... это продолжается так для более чем 435 000 символов (файл имеет 425 КБ), и в конце концов это происходит:

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, должны тратить на это гораздо больше времени, верно?

Ответы [ 3 ]

3 голосов
/ 12 марта 2012

Это зависит от того, что делает обфускатор.

Если он в основном просто переименовывает идентификаторы, я бы ожидал, что он мало повлияет на производительность, если только имена идентификаторов, которые он использовал, были искусственно длинными.

Если он шифрует управление или поток данных, это может оказать произвольное влияние на выполнение кода.Некоторое шифрование потока управления может быть выполнено только с постоянными издержками.

Вам нужно будет изучить метод запутывания, чтобы узнать ответ на этот вопрос.Может быть, проще просто измерить разницу.

3 голосов
/ 12 марта 2012

Это, безусловно, замедляет работу браузера в более старых браузерах (особенно при инициализации), но, безусловно, замедляет его даже после этого.У меня был сильно запутанный файл, для инициализации которого потребовалось около 1,2 секунды, в том же браузере он не был обфусцирован, а на ПК - около 0,2 секунды, что очень важно.

2 голосов
/ 12 марта 2012

Кажется, что используемая вами обфускация просто хранит все строковые константы в одном массиве и помещает их в код, где они были изначально.Строки запутываются в массиве, но все равно выходят в виде строки.(Попробуйте console.log (_0xfb0b), чтобы понять, что я имею в виду).

Это, безусловно, замедляет инициализацию кода.Однако после инициализации этого массива влияние на сценарий будет незначительным.

...