Куда вы помещаете свой javascript?

Вы локализуете свой javascript на странице или у вас есть основной файл application.js или аналогичный?

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

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
11
0
11 209
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

Лучше всего, наверное, поставить на серверах Google.

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

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

Dean Rather 19.11.2008 01:43
Ответ принят как подходящий

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

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

Отличное предложение! В нашем приложении рекомендуется помещать как можно больше javascript во включенные js-файлы, поскольку у нас высокий процент пользователей, которые, как ожидается, будут подключаться через модемы 56K.

Ogre Psalm33 19.11.2008 01:29

Спасибо! Я думаю, что для большинства разработчиков размещение всего в одном файле кажется ужасной практикой. Но иногда производительность перевешивает чистоту кода.

Tim Merrifield 19.11.2008 01:37

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

Весь общий код JS находится в каталоге SITE/javascripts, но загружается по уровням.

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

Также есть «общерегиональные» вещи (например: js-код, который нужен только в разделе администратора сайта). Эти области либо имеют общий макет (который затем может включать теги сценария), либо будут отображать общий фрагмент, и этот фрагмент может включать теги сценария)

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

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

Для встроенного JS, у которого нет цели (например, события onload), он находится внизу страницы.


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

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

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

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

Согласовано. Есть и другие способы улучшить производительность, кроме того, чтобы поместить все это в один файл сигнала; особенно, когда на нескольких страницах используется лишь несколько функций (действительно ли быстрее загрузить файл размером 1 МБ вместо 3 файлов по 2 КБ? как насчет того, чтобы сжать файлы меньшего размера с помощью GZIP или уменьшить их размер и т. д.).

Max Lybbert 19.11.2008 02:59

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

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

Команда исключительной производительности Yahoo! предлагает несколько отличных предложений по производительности для JavaScript. Стив Содерс раньше был в этой команде (сейчас он в Google) и написал интересные инструменты, который поможет вам решить, где разместить JavaScript.

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

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

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


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

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

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

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

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

Если вы нацеливаетесь на iphone, постарайтесь сохранить в кэше все, что вы хотите, менее 25 КБ.

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

Другие вопросы по теме