Какое влияние оказывает обфускация javascript на скорость работы мобильных браузеров?

#javascript #mobile #obfuscation

#javascript #Мобильный #обфускация

Вопрос:

Я хочу спросить, измерял ли кто-нибудь влияние некоторых обфускаторов javascript на результирующий код. Я ориентируюсь на мобильных пользователей, поэтому скорость является критической. И я особенно стараюсь запускать 2 или 3 разных обфускатора для одного и того же кода подряд, что очень хорошо запутывает код, но я боюсь, что это окажет некоторое влияние на скорость.

Комментарии:

1. Обфускация обычно фокусируется на удалении информации, которая не требуется для программы, но полезна программисту. Таким образом, если какой-либо эффект будет присутствовать, обфускированная программа будет работать только быстрее , чем исходная. Чем меньше код, чем короче имена переменных и чем меньше ненужного материала (т. Е. Комментариев), тем быстрее выполнение. Если только ваши обфускаторы не слишком агрессивны и не добавляют в программу дополнительные материалы, усложняющие работу анализатора.

Ответ №1:

этого не должно быть. Компилятору / интерпретаторам наплевать на ваши символы, главное, чтобы они были правильными.

Ответ №2:

Большинство обфускаторов JavaScript только минимизируют и переименовывают локальные переменные, что чрезвычайно легко переделать с помощью улучшителя.

Лучшая комбинация, которую я нашел, — это DojoToolkit и компилятор закрытия в расширенном режиме.

Закрытие в расширенном режиме делает практически невозможным обратное проектирование кода JavaScript, даже после прохождения через улучшитель. Как только ваш код JavaScript будет обфускирован до неузнаваемости и появится возможность обратного проектирования, ваш HTML не раскроет большую часть ваших секретов.

Эта ссылка для использования Dojo Toolkit с компилятором закрытия в расширенном режиме для мобильных приложений:

http://dojo-toolkit.33424.n3.nabble.com/file/n2636749/Using_the_Dojo_Toolkit_with_the_Closure_Compiler.pdf?by-user=t

Компилятор закрытия в расширенном режиме фактически ускоряет запуск JavaScript в мобильных средах благодаря его оптимизации промышленного масштаба. Например, внедрение функций, виртуализация методов прототипов, сворачивание пространства имен, удаление устаревшего кода и т.д. все это ускорит выполнение кода, так что это не только обфускатор, но и оптимизирующий компилятор.

Мои собственные тесты запускают код на iPad примерно на 10-20% быстрее и на 30% быстрее на Android. Использование памяти также сокращается.

Ответ №3:

Ваш вопрос действительно нуждается в анализе на вашем собственном javascript, чтобы получить полезный ответ.

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

Ответ №4:

Если обфускатор выполняет некоторое кодирование и вызывает eval, как это делают некоторые, то во время загрузки скрипта произойдет снижение производительности. После этого не должно быть никакой разницы, и, как указывалось ранее, это может ускорить ваш код из-за меньшего размера.

Комментарии:

1. 1: Если используемый вами обфускатор оборачивает все в eval() инструкции, движок JS должен интерпретировать как код обфускатора, так и eval() отредактированный код. Однако для любого минификатора (просто сокращающего символы и уплотняющего операторы) не будет никакого негативного воздействия вообще.

Ответ №5:

Это зависит от того, что вы подразумеваете под обфускацией.

Если вы имеете в виду минимизацию с использованием такого инструмента, как JSMin, то эффект равен нулю.

Если вы говорите о чем-то вроде Packer , то процесс eval действительно влияет на то, сколько времени требуется для выполнения кода. На медленном устройстве это влияние может быть значительным.