Почему Bing запутывает их JavaScript?

Я, как обычно, просматривал веб-страницы и хотел взглянуть на исходный код Bing, потому что я было любопытно, и он хотел знать, что они использовали, чтобы их изображение исчезло. Я был удивлен тем, что можно было квалифицировать только следующей строкой:

Святая стена текста!

И это заставило меня задуматься, есть ли какое-то преимущество в запутывании ваших (X)HTML, CSS и JavaScript таким образом? Может уменьшить размер файла?


Редактировать: Оглядевшись, я понял, что это довольно распространенная практика. Никогда раньше не смотрел на это с точки зрения минификации!


person Gab Royer    schedule 01.07.2009    source источник


Ответы (11)


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

Цель минимизации JavaScript и CSS всегда состоит в том, чтобы сохранить эксплуатационные качества кода при одновременном уменьшении его общего объема в байтах (как в необработанном виде, так и после gzip-сжатия, поскольку большая часть JavaScript и CSS, обслуживаемых с рабочих веб-серверов, сжимается как часть протокола HTTP). ).

Вы также можете быть заинтересованы в чтении Yahoo! Сообщение в блоге о пользовательском интерфейсе под названием "Минификация против запутывания".

person William Brendel    schedule 01.07.2009
comment
Если это выбранный ответ, стоит отметить ответ Питера [stackoverflow.com/users/131858/peter] [ stackoverflow.com/questions/1070514/ что не следует пытаться писать код таким образом, но это должно быть сделано как некий автоматизированный процесс или как часть перемещения кода в рабочую среду. - person anonymous coward; 01.07.2009
comment
Это ни в коей мере не отвечает на вопрос. Хотя это хороший ответ на вопрос типа «Что MS делает со своим javascript Bing?» он ничего не делает, чтобы ответить «Должны ли вы запутать свой javascript?» - person Adam; 01.07.2009
comment
@Adam: Название вопроса не совсем точное. Мой ответ говорит о том, что на самом деле хотел спросить автор. Автору было интересно, почему Microsoft запутывает свой код Javascript. Я указал, что они не намеренно запутывают свой код, а скорее минимизируют его ради скорости. Думаю, это адекватно отвечает на его вопрос. - person William Brendel; 02.07.2009
comment
Я обновил заголовок, чтобы более точно отразить вопрос и этот принятый ответ. Надеюсь, это поможет... - person Shog9; 02.07.2009
comment
Здорово, теперь понятнее :-) - person William Brendel; 02.07.2009
comment
По моему опыту, минимизация практически не уменьшает размер, а если вы используете Gzip (который намного больше сжимает размер), разница между normal+gzipped и minified+gzipped незначительна. - person DisgruntledGoat; 06.07.2009
comment
@DisgruntledGoat: Если вы Google или Microsoft, это все равно складывается. Для обычных веб-сайтов gzip обычно достаточно, но, согласно статье, на которую я дал ссылку, minifying + gzip показал уменьшение размера на 30% по сравнению с одним только gzip. Я бы не назвал это незначительным. - person William Brendel; 06.07.2009

2 основные причины запутать ваш код:

  • Уменьшите общий размер файла (как вы упомянули). Если вы замените функцию с именем «CallThisFunctionAndReturnAnArray» на «C» — вы сэкономите много символов в своем файле.

  • Защищать интеллектуальную собственность - хотя, если это реалистично, то определенно спорно, это обычное оправдание для этого. Вы можете обойти это с помощью хороших инструментов или если вы просто очень умны.

person Adam    schedule 01.07.2009
comment
Это не обсуждается. Обфускация javascript - пустая трата времени. Если вам интересен Javascript, кто-то БУДЕТ реконструировать. Это не так сложно. - person Triptych; 01.07.2009

Размер файла, безусловно, был бы преимуществом, поскольку, например, сама Gmail не только делает это, но и заархивирует свое содержимое.

person Otávio Décio    schedule 01.07.2009

В этом есть абсолютное преимущество. Однако есть кое-что важное, на что следует обратить внимание. На самом деле нет причин кодировать так. Скорее, после того, как вы закончите что-то делать (и напишете в хорошей читаемой форме), используйте минификатор для удаления ненужных пробелов и тому подобного. Для больших файлов это может значительно сократить время загрузки.

person Peter    schedule 01.07.2009
comment
Одна только мысль о таком программировании вызывает у меня мурашки по коже! - person Gab Royer; 01.07.2009

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

Что касается запутывания, чтобы отвести посторонние глаза - Нет. Не делайте этого.

person anonymous coward    schedule 01.07.2009

Только для уменьшения размеров и только на больших модулях. Гораздо большего выигрыша можно добиться, используя gzip.

Если вы используете какой-либо сторонний код, вам может потребоваться оставить их комментарии об авторских правах/лицензии нетронутыми при минимизации. Люди часто забывают это сделать. Вы, вероятно, захотите оставить свои собственные комментарии об авторских правах нетронутыми.

person David    schedule 01.07.2009

Да, уменьшение размера файла.

person Matthew Groves    schedule 01.07.2009

Да. Уменьшение размера файла уменьшает не только время загрузки, но и время анализа, что очень полезно в некоторых браузерах (особенно в дьявольском IE6).

Вероятно, это требует минификации повторной пометки.

person Alun Harford    schedule 01.07.2009

Я бы провел различие между оптимизацией для уменьшения размера файла и запутыванием с предполагаемой целью предотвращения (или, по крайней мере, жесткого) обратного проектирования. Кроме того, у Google, например, есть «компилятор», который расширяет JavaScript, чтобы включить некоторую расширенную систему типов и тому подобное; и этот расширенный код затем «компилируется» в обычный JavaScript. Очевидно, что имеет смысл создавать этот сгенерированный код оптимизированным образом — нет необходимости делать его удобным для сопровождения.

person balpha    schedule 01.07.2009

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

Обфускация не так важна. Кроме того, это может усложнить отладку, в зависимости от того, как вы это делаете.

В поиске важна скорость.

person BaroqueBobcat    schedule 01.07.2009

И это заставило меня задуматься, есть ли какое-то преимущество в запутывании ваших (X)HTML, CSS и Javascript таким образом? Может уменьшить размер файла?

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

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

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

Однако: обратите внимание, что он не надежен: существуют определенные инструменты, которые упрощают реинжиниринг запутанного кода, поэтому он не делает его на 100 % безопасным для других. которые действительно хотят взглянуть на то, как работают ваши скрипты.

person Alex Rozanski    schedule 01.07.2009