Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Объединение функционала в один .js-файл (https://javascript.ru/forum/misc/54034-obedinenie-funkcionala-v-odin-js-fajjl.html)

egreek 28.02.2015 20:29

Объединение функционала в один .js-файл
 
Здравствуйте,
При подключении к html-документу скриптов хочется объединить функционал для работы разных страниц в один документ, но возникает куча ошибок на страницах, для которых не подключены дополнительные библиотеки.
Например, есть страницы index.html и login.html, и хочется сделать для них один JS-файл. На странице login.html подключен jQuery Validate и все ок, но на index.html нет форм и плагин валидации там не нужен.
В следствие этого возникает проблема на следующей строке js-файла:
$("[data-mask]").inputmask();

На текущий момент решаю эту проблему таким образом:
if ($('form').is('#login-form')) {
    $("[data-mask]").inputmask();
}

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

Как лучше оптимизировать эту ситуацию? Спасибо.

laimas 01.03.2015 00:57

Либо вы подключаете один js-файл, отлаженный, упакованный, либо, если жаба давит :) по поводу N-байт кода, то сервер должен знать к какой странице эти N-байт подключить - подключайте.

Ваш один js-файл будет кеширован, как и jQuery, подключаемый например с сервера Гугл, с большой долей вероятности уже есть в кеше ваших пользователей.

egreek 01.03.2015 01:06

Цитата:

Сообщение от laimas (Сообщение 359083)
Либо вы подключаете один js-файл, отлаженный, упакованный, либо, если жаба давит :) по поводу N-байт кода, то сервер должен знать к какой странице эти N-байт подключить - подключайте.

Ваш один js-файл будет кеширован, как и jQuery, подключаемый например с сервера Гугл, с большой долей вероятности уже есть в кеше ваших пользователей.

В целом понятно. Можно, конечно, тупо и ко всем страницам подключить по 10 модулей, половина из которых не будет использоваться на конкретной странице. И тут уже не так важна упакованность, как количество обращений. А много обращений вроде как - не есть хорошо.

Ну а как вариант с выключением ненужных кусков кода через .is() ?

laimas 01.03.2015 02:43

Ну а как вариант с выключением ненужных кусков кода через .is() ?

Вы думаете это эффективнее по сравнению отдавать один упакованный файл и более не заботиться об этом?

egreek 01.03.2015 11:00

Цитата:

Сообщение от laimas (Сообщение 359090)
Ну а как вариант с выключением ненужных кусков кода через .is() ?

Вы думаете это эффективнее по сравнению отдавать один упакованный файл и более не заботиться об этом?

Нет, конечно. :) Я пока остановился на варианте с разбитием все в разные файлы и подключением группой через Minify. Просто хотел узнать об альтернативных вариантах.

danik.js 01.03.2015 21:48

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

Разумеется, все это имеет какой-то смысл только если проведена первостепенная оптимизация - gzip, перенос скриптов в конец страницы и так далее.

egreek 03.03.2015 11:03

Цитата:

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

Разумеется, все это имеет какой-то смысл только если проведена первостепенная оптимизация - gzip, перенос скриптов в конец страницы и так далее.

Спасибо за ответ. Все понятно.


Часовой пояс GMT +3, время: 23:06.