Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Расположение подключаемого файла JS (https://javascript.ru/forum/events/48959-raspolozhenie-podklyuchaemogo-fajjla-js.html)

Эдди 23.07.2014 15:13

Расположение подключаемого файла JS
 
Где-то вычитал, что подключать внешний файл JS для оптимизации надо перед закрывающим тегом </body> для быстрой загрузки страницы.

Так что же получается. На странице форма.
Форма загрузилась, а ты хоть кликай там на своих чекбоксах и селектах, все попусту, пока не загрузится в конце страницы скрипт?

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

Так как же правильнее?
Вернее, везде написано, что не важно, где скрипт.
А как лучше?

Эдди 23.07.2014 15:13

Уточнение. Скрипт тяжелый. Несколько мегабайт.

kostyanet 23.07.2014 15:35

Несколько мегабайт текста? Полное собрание сочинений видать.

Если скрип запускается по факту загрузки DOM, то никакой нет разницы где он воткнут. Втыкайте как обычно в заголовок.

Эдди 23.07.2014 15:46

В заголовок. ОК. Так и есть.

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

Кстати, чтобы не плодить тем. Опробовал пару оптимизиторов скриптов. Названия не помню. Нихрена не работает программа после оптимизации.
Мне что, вручную пробелы удалять и переменные уменьшать в длинне символов (и т.д.).
Можете посоветовать какой-нибудь хороший оптимизатор. Проверенный.
Не знаю, существуют ли такие, но чтобы выдавал - "ЗДЕСЬ У ТЕБЯ ОШИБКА БЛН" :)

Erolast 23.07.2014 15:51

http://javascript.ru/optimize/javascript-compression

Эдди 23.07.2014 16:17

Спасибо. В выходные проверю. Сейчас надо доделывать скрипт.

kostyanet 23.07.2014 18:08

Обфусцируйте полное собрание.

Я не разобрался, но на запрос js include дают такие типа ссылки http://programmers.stackexchange.com...ing-script-tag

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

BETEPAH 23.07.2014 22:02

Цитата:

Сообщение от kostyanet
никакой нет разницы где он воткнут. Втыкайте как обычно в заголовок.

Если воткнуть в заголовок, то страница не будет рендериться пока не загрузится скрипт. Как следствие, пользователи обречены на пару секунд лицезрения белой страницы.

Vlasenko Fedor 23.07.2014 22:26

Цитата:

Сообщение от BETEPAH
Если воткнуть в заголовок, то страница не будет рендериться пока не загрузится скрипт. Как следствие, пользователи обречены на пару секунд лицезрения белой страницы.

для этого есть атрибут async

BETEPAH 23.07.2014 22:35

Цитата:

Сообщение от Poznakomlus
для этого есть атрибут async

который нельзя назвать кроссбраузерным.

Vlasenko Fedor 23.07.2014 22:59

мода сейчас пошла на предзагрузчики
краткий пример http://jsfiddle.net/vlasenkofedor/5pDXf/

Aetae 23.07.2014 23:05

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

BETEPAH, По сути только ie<11 в пролёте. А во всех подобных случаях, я придерживаюсь мнения, что ословодам так и надо.)

P.S. http://learn.javascript.ru/script-place-optimize

BETEPAH 23.07.2014 23:22

Цитата:

Сообщение от Aetae
я придерживаюсь мнения, что ословодам так и надо.)

На какое колено мне стать, чтоб попросить Вас стать моим начальником? ;)
К сожалению, из моего рабочего тест-листа в пролёт кроме ИЕ попадают еще андроид 2.3 и опера 12.6

Эдди 24.07.2014 01:17

Цитата:

Сообщение от Aetae
Два мега для простой страницы - это примерно на порядок больше чем надо. Если же это веб-приложение, то пофиг - все в кэше.

Это форма, разные элементы которой подгружаются один в зависимости от выбора (выделения) другого. jQuery. А почти половина текста скрипта - комментарии.

Vlasenko Fedor 24.07.2014 01:26

Эдди,
разбейте файл на части и используйте подзагрузку по надобности
Кроме того сожмите скрипт к примеру здесь http://compressorrater.thruhere.net/

Эдди 24.07.2014 02:12

Цитата:

Сообщение от Poznakomlus
Эдди,
разбейте файл на части и используйте подзагрузку по надобности

Смотрите.
Если я просто сожму файл, то он будет загружаться только один раз.
Если разбить на части, то я создам задержки загрузки при любой манипуляции с формой.
Разве не так?

Vlasenko Fedor 24.07.2014 02:29

Файл занружается один раз если он попадает в кеш броузера
Разбить файл на части. Это то же вариант. Но увы мы не знаем логики приложения вашего. К примеру на главной(странице с меньшим объемом) можно подключать скрипт, который только подгружался и попадал в кеш а на другой странице его использовать беря скрипт из кеша браузера. А вот сжимать скрипты в продакшене нужно всегда.

Эдди 24.07.2014 08:17

У меня форма поиска товара по различным классам, типам и пр.
В общем, на странице куча полей со списком, чекбоксов. Все Ajax, jQuery. Есть календарь на jQuery. При изменении каждого элемента, меняется содержание нескольких других, подгружается из БД. Когда товар уже окончательно выбран, становится активной кнопка вывести варианты и далее уже работает аякс php и выводят кучу вариантов.

На моих компах не ощущается абсолютно никаких задержек. Даже анимацию ожидания не успевает вывести скрипт.

Просто здесь так удивились скрипту в 2 мега, что я аж испугался. Буду искать друзей, у которых медленное соединение и медленный комп, чтобы протестировать. :)

Эдди 27.07.2014 08:11

Еще вопрос У меня функции скрипта jquery обращаются к разным файлам php. То есть php разбит на 15 разных маленьких файлов, к каждому из которых обращается отдельная функция аякса. Насколько это правильно?

Erolast 27.07.2014 08:21

Если для каждого определенного действия используется отдельный php-скрипт - все правильно. Если для одного действия идет обращение к нескольким скриптам одновременно - наверняка что-то не так с архитектурой.

Эдди 27.07.2014 09:24

Значит, все правильно. Только некоторые функции обращаются к одним и тем же php скриптам. Потому что идентичные.
А из одной функции к нескольким скриптам - мне даже в голову такое прийти не могло.


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