Подтвердить что ты не робот

Что произойдет, если вы используете тэг <script> с тем же атрибутом "src" несколько раз в одном документе HTML?

Хотя я почти уверен, что ответ на этот вопрос будет специфичным для браузера, какой-либо из браузеров определяет поведение, если используются теги <script> и имеют один и тот же src атрибут?

Например...

<script src="../js/foo.js"></script>
...

<!-- what happens here? -->
<script src="../js/foo.js"></script>

Причина, по которой я задаю этот вопрос, в первую очередь, заключается в том, что в моем конкретном случае я использую частичные представления в приложении ASP.NET MVC, которые используют JQuery. JQuery JS файлы включены в файл основного шаблона с помощью тегов script. Я бы предпочел добавить теги script в файлы частичного просмотра, чтобы в случае, если они используются вне контекста основного шаблона, они будут автоматически включать все необходимые JS файлы и не полагаться на другое представление или шаблон для их включения, Тем не менее, я, конечно, не хочу, чтобы JS файлы должны были быть переданы клиенту несколько раз или какие-либо другие побочные эффекты, которые могут негативно повлиять на работу пользователя.

Теперь я думаю, что большинство, если не все, основных браузеров (FF, Safari, IE, Opera) будут кэшировать JS файл при первом использовании, а затем на последующих тэгах script браузер будет использовать кешированную копию, если она доступна, и если она еще не истекла. Однако поведение кэширования обычно может быть изменено с помощью конфигурации браузера, поэтому, похоже, не слишком "безопасно" полагаться на любое поведение кэширования.

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

FF 3.5x, Chrome 4x включает его только один раз.

:) IE 8 имеет две копии (см. вкладку "Инструменты разработчика" > "Сценарии" есть две записи jquery-1.3.2.min.js)

Ответ 4

Что происходит, так это то, что JavaScript загружается в интерпретатор момента его загрузки. В случае столкновения пространства имен только имя переменной данной области сохраняется до выполнения. Обычно этот последний процесс предотвращает возникновение проблем, связанных с пересылкой функций в интерпретатор ранее. Проблема в том, что функция определяет область переменных, которые могут быть другими переменными, которые вводят тогда другие области пространства имен. Это проблема, потому что, если функции имеют одно и то же имя и включают в себя различные определения переменных, то может возникнуть утечка, когда переменные из фида функций в интерпретатор рано выходят даже после перезагрузки этой функции, что может вызвать ожидаемые столкновения пространства имен.

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