Задать вопрос
@Extramezz

Способы улучшения JS-кода?

Читая вот эту статью: habrahabr.ru/post/235943 наткнулся на

Шаблон начинаем с модуля !function($) { … }($), который помещает глобальную переменную jQuery в локальную область – это поможет снизить нагрузку и предотвратить конфликты с другими библиотеками.


Интересует вот что:
  • Зачем перед функцией знак "!" ? Для красоты?
  • Обращение к локальным переменным действительно производит меньше нагрузки? И стоит ли помещать document, window и т.п в замыкание по этой же причине или дело касается только функций?
  • Какие еще есть способы подобного улучшения кода? В плане нагрузки, скорости?
  • Вопрос задан
  • 372 просмотра
Подписаться 2 Оценить Комментировать
Решение пользователя Максим Дунаевский К ответам на вопрос (4)
dunmaksim
@dunmaksim
Технический писатель
Знаки !, -, + заставляют интерпретатор вычислить (в данном случае - выполнить) то, что находится справа. Например, в Bootstrap всюду вставлен знак + для этого.
Однако, более правильным было бы переписать код так:
(function ($){
    "use strict";
    
}(this.jQuery));

Это тоже шаблон самовызываемой функции, описан в книге Стояна Стефанова "JavaScript. Шаблоны" (люто рекомендую читать не смотря на преклонный для литературы данного типа возраст, где взять - сами знаете).

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

Что касается скорости - в сравнении с перерисовкой DOM любой ваш код будет быстрым, как молния. И да, обращение к глобальным переменным дороже, чем к локальным, т.к. сначала делается поиск в локальной области видимости, и только потом - к глобальной.

document и window можете помещать, можете не помещать - разница будет только в том, что можно использовать краткие имена:

(function (W, D){ 
    // W = window   (1 символ против 6)
    // D = document (1 символ против 8)
    "use strict";

}(window, document));


Всё остальное в указанной книге ну и конечно Николас Закас, "JavaScript. Оптимизация производит....
Ответ написан