Где вы размещаете свой javascript?

Вы локализуете свой javascript на странице или имеете мастер-приложение "application.js" или подобное?

Если это последнее, то лучше всего убедиться, что ваш .js не выполняется на неправильных страницах?

EDIT: javascript Я имею в виду пользовательский javascript, который вы пишете как разработчик, а не js-библиотеки. Я не могу себе представить, чтобы кто-то копировал/вставлял источник jQuery на свою страницу, но вы никогда не знаете.

Ответ 1

Включение всех ваших js в один файл может помочь в производительности (только один запрос против нескольких). И если вы используете сеть распространения контента, такую ​​как Akamai, она улучшает коэффициент попадания в кеш. Кроме того, всегда бросайте inline js в самую нижнюю часть страницы (чуть выше тега body), потому что это выполняется синхронно и может задерживать вашу страницу от рендеринга.

И да, если один из файлов js, который вы используете, также размещен в google, обязательно используйте его.

Ответ 2

Вот мои "рекомендации". Обратите внимание, что ни один из них не является формальным, они просто кажутся правильными.

Все общие JS-коды проживают в каталоге SITE/javascripts, но загружаются в 'tiers'

Для всего сайта (например, jquery или моего сайта application.js) макет сайта (это будет главная страница ASP.net) включает в себя файл. Теги script находятся в верхней части страницы.

Кроме того, существует "облачный" материал (например, код js, который требуется только в разделе администратора сайта). Эти регионы либо имеют общий макет (который может затем включать теги script), либо отображать общий частичный, и это частичное может включать теги script)

Для менее распространенных вещей (скажем, моей библиотеки, которые нужны только в нескольких местах), я помещал тег script на эти HTML-страницы отдельно. Теги script находятся в верхней части страницы.

Для вещей, относящихся только к одной странице, я просто пишу встроенный javascript. Я стараюсь держать его как можно ближе к цели "цели". Например, если у меня есть кнопка onclick js для кнопки, тег script будет находиться ниже кнопки.

Для встроенного JS, который не имеет целевой (например: onload события), он идет в нижней части страницы.


Итак, как что-то попадает в локализованную библиотеку или в библиотеку сайта?

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

Общей жалобой на такую ​​систему является то, что вы завершаете работу с 10 или 20 небольшими JS файлами, где 2 или 3 больших JS файла будут лучше работать с точки зрения сети. Однако оба рельса и ASP.NET имеют функции, которые обрабатывают объединение и кеширование нескольких файлов JS в один или несколько "супер" js файлов для производственных ситуаций.

Я бы рекомендовал использовать такие функции, а не компрометировать качество/читаемость исходного кода.

Ответ 4

Я стараюсь не добавлять функции javascript на отображаемую страницу. В общем, у меня есть application.js(или root.js), который имеет общие функции, такие как манипуляция меню. Если на определенной странице есть определенная функциональность javascript, я создам файл .js для обработки этого кода и сопоставляю структуру dir о том, как добраться до этого файла (также используя то же имя, что и рендер файл).

Другими словами, если отображаемая страница находится в public/dir1/dir2/mypage.html, файл js будет публичным /js/dir 1/dir2/mypage.js. Я нашел, что этот стиль работает хорошо для меня, особенно при создании шаблонов на сайте. Я создаю механизм шаблона для "автозагрузки" моих ресурсов (css и js), используя путь запроса и выполняя некоторую проверку для css и js-эквивалентов в каталогах css и js в корне.

Ответ 5

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

Ответ 6

Лучшей практикой, вероятно, является на серверах Google.

(Зависит от того, что вы подразумеваете под "своим" javascript, хотя я полагаю:)

Ответ 7

Это то, с чем я тоже боролся. Я закончил с помощью моего внутреннего PHP script, чтобы разумно собрать список необходимых JS файлов на основе содержимого, запрошенного пользователем.

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

Это после внедрения моего веб-приложения, без достаточного понимания этого аспекта кода. Теперь я также должен добавить, что используемый javascript улучшает, но не формирует основу моего сайта. Если вы используете что-то вроде SproutCore или Ext, я предполагаю, что решение будет несколько иным.


Вот пример для веб-сайта, управляемого PHP: Если ваш сайт разделен на разделы, а один из этих разделов - календарь. Пользователь переходит к "index.phhp? Module = calendar & action = view". Если PHP-код основан на классе, алгоритм маршрутизации создает экземпляр класса CalendarModule, который основан на "модуле" и имеет виртуальный метод "getJavascript". Это вернет те классы javascript, которые необходимы для выполнения действия "view" в модуле "calendar". Он также может принимать во внимание любые другие специальные требования и возвращать файлы js для них. Код рендеринга может проверить, нет ли дубликатов js файлов, когда список включения javascript построен для последней страницы. Таким образом, метод getJavascript возвращает массив вроде этого

return array('prototype.js','mycalendar.js');

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

Ответ 8

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

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

Если вы ориентируетесь на iphone, постарайтесь сохранить все, что вы хотите сохранить в кешках под 25k.

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