Где разместить функции конфигурации JavaScript? - PullRequest
4 голосов
/ 06 октября 2009

Каково общее мнение разработчика относительно включения кода javascript в файл вместо его включения в тег сценария.

Итак, мы все согласны с тем, что jquery необходимо включить в файл скрипта, как показано ниже:

 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"
         type="text/javascript"></script>

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

$(document).ready(function(){
$(".clickme").click(function(event){
  alert("Thanks for visiting!");
 });
});

ки. Таким образом, вопрос заключается в следующем: если приведенный выше код будет вызываться в каждом классе = "clickme" на определенных страницах, и у вас есть возможность вызывать его либо из отдельного включаемого файла с именем mysite.js, либо из содержимого стр. По какому пути вы пойдете?


Аргументы:

  • Если вы включите его на страницу, вы будете вызывать его только с тех конкретных страниц, для которых необходима функциональность js.

  • Или вы включаете его в файл, который кэшируется браузером, но тогда jquery придется потратить x мс, чтобы узнать, что эта функция не запускается на странице без класса «clickme» в ней.


РЕДАКТИРОВАТЬ 1: Хорошо. Один момент, который я хочу убедиться, что люди обращаются к нему: каков эффект от того, что функция document.ready называет вещи, которых нет на странице, вызовет ли какой-либо тип задержки в браузере? Это значительное влияние?

Ответы [ 4 ]

3 голосов
/ 07 октября 2009

Прежде всего - $("#clickme") найдет id = "clickme", а не class = "clickme". Вы бы хотели $(".clickme"), если вы искали классы.

Я (стараюсь) никогда не помещать какой-либо фактический код JavaScript в мои документы XHTML, если я не работаю над быстрым тестированием чего-либо на странице. Я всегда ссылаюсь на внешний файл JS, чтобы загрузить нужные мне функции. Браузеры без JS (например, веб-сканеры) не будут загружать эти файлы, и это делает ваш код намного более чистым по сравнению с «источником просмотра».

Если мне нужно немного функциональности только на одной странице - иногда он получает свой собственный включаемый файл. Все зависит от того, сколько функций / медленных селекторов он использует. То, что вы поместили свой JS во внешний файл JS, не означает, что вам нужно включать его на каждую страницу.

Основная причина, по которой я пользуюсь этой практикой - если мне нужно изменить какой-то код JavaScript, он будет все в одном месте и изменит весь сайт.

Что касается вопроса о производительности, то некоторые селекторы занимают много времени, но большинство из них (особенно те, которые имеют дело с ID) очень быстрые. Поиск селектора, который не существует, является пустой тратой времени, но когда вы сравниваете его с потраченным впустую временем второго HTTP-запроса сценария (который, кстати, блокирует DOM от готовности), поиск пустого селектора обычно побеждает как меньшее из двух зол. jQuery 1.3 Performace Notes и SlickSpeed ​​, мы надеемся, помогут вам решить, сколько MS вы действительно теряете при поиске класса.

1 голос
/ 07 октября 2009

Мои личные предпочтения

  • полностью глобальные функции, плагины и утилиты - в отдельном файле JavaScript и ссылки на каждой странице (очень похоже на файл jQuery)

  • определенная функциональность страницы - в отдельном файле JavaScript и указывается только на той странице, на которой он необходим для

Помните, что вы также можете минимизировать и сжать файлы.

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

1 голос
/ 07 октября 2009

Я обычно использую внешний файл, поэтому, если необходимо внести изменения, это делается в одном месте для всех страниц, а не для x изменений на x страницах.

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

0 голосов
/ 07 октября 2009

Я согласился никогда не иметь код на вашей HTML-странице. В ASP.net я программно добавил проверку для каждой страницы, чтобы увидеть, есть ли у нее файл с одинаковым именем javascript.

Например. MyPage.aspx будет искать MyPage.aspx.js

Для моей главной страницы MVC у меня есть этот код для добавления ссылки на JavaScript:

        // Add Each page's javascript file
        if (Page.ViewContext.View is WebFormView)
        {
            WebFormView view = Page.ViewContext.View as WebFormView;
            string shortUrl = view.ViewPath + ".js";
            if (File.Exists(Server.MapPath(shortUrl)))
            {
                _clientScriptIncludes["PageJavascript"] = Page.ResolveUrl(shortUrl);
            }
        }

Это хорошо работает, потому что:

  • Это автоматически включено в мои файлы
  • Файл .js находится рядом с самой страницей

Извините, если это не относится к вашему языку / стилю кодирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...