Как заставить IE перезагрузить JavaScript? - PullRequest
43 голосов
/ 15 мая 2009

Я использую IE 8 в Vista, и каждый раз, когда я изменяю файл javascript и затем начинаю отладку, мне приходится нажимать Ctrl + F5, чтобы он перезагрузил мой javascript. Есть ли способ сделать так, чтобы он автоматически перезагружал javascript при запуске отладки, но не терял прирост производительности при простом просмотре сети?

Да, да, я знаю, что вы, вероятно, не любите IE, но имейте в виду, что вопрос не в том, какой браузер лучше?

Ответы [ 9 ]

48 голосов
/ 15 мая 2009

Добавьте строку в конце вашего URL, чтобы сломать кеш. Я обычно делаю (с PHP):

<script src="/my/js/file.js?<?=time()?>"></script>

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

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

25 голосов
/ 15 мая 2009

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

Так что либо как то так:

<script src="/my/js/file.js?version=2.1.3" ></script>

или, может быть

<script src="/my/js/file.2.1.3.js" ></script>

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

16 голосов
/ 15 мая 2009

Когда вы работаете с веб-страницей или файлом javascript, вы хотите, чтобы он загружался каждый раз, когда вы меняете его. Вы можете изменить настройки в IE 8, чтобы браузер никогда не кэшировался.

Выполните следующие простые действия.

  1. Выберите Сервис-> Свойства обозревателя.
  2. На вкладке «Общие» нажмите кнопку «Настройки» в разделе «История просмотра».
  3. Нажмите кнопку «Каждый раз, когда я захожу на веб-страницу».
  4. Нажмите кнопку ОК.
5 голосов
/ 05 января 2012

Если вы хотите просто сделать это в ВАШЕМ браузере (например, не навязывая это своим пользователям), то я бы НЕ установил ваш код так, чтобы он не использовал кеш. Как сказал Хосе, производительность снижается.

И я бы не стал вообще отключать кеширование в IE, потому что вы теряете прирост производительности для каждого посещаемого вами сайта. Вы можете указать IE всегда обновлять с сервера для определенного сайта или сеанса просмотра:

  1. Открыть IE Developer Tools
  2. Выберите Кэш из меню
  3. Нажмите, чтобы поставить галочку «Всегда обновлять с сервера»

Или, для клавиатурных ярлыков (как и я) там ..

  • F12, Alt + C, Стрелка вниз, Alt + R.

ПРИМЕЧАНИЕ ОСТОРОЖНО : Сказав это ... Имейте в виду, что всякий раз, когда вы разрабатываете / тестируете не так, как сайт будет рассматриваться в производственном процессе, вы рискуете получить смешанные результаты. Хорошим примером является эта проблема кеширования. Мы обнаружили проблему, когда IE кэшировал наши Ajax-вызовы, а не обновлял результаты метода GET. Если бы мы отключили кэширование в IE, мы бы никогда не увидели эту проблему в разработке и развернули бы ее в таком виде.

1 голос
/ 13 мая 2012

Это должно сработать для ASP.NET. Концепция такая же, как показано в примере PHP. Поскольку URL-адрес отличается при каждой загрузке скрипта, ни один из браузеров прокси не должен кэшировать файл. Я привык размещать свой код JavaScript в отдельных файлах и тратил много времени на Visual Studio, пока не понял, что он не перезагрузит файлы JavaScript.

<script src="Scripts/main.js?version=<% =DateTime.Now.Ticks.ToString()%>" type="text/javascript"></script>

Полный пример:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">

   <script src="Scripts/jquery-1.4.1-vsdoc.js" type="text/javascript"></script>  
   <script src="Scripts/main.js?version=<% =DateTime.Now.Ticks.ToString()%>" type="text/javascript"></script>
    <script type="text/javascript">

        $(document).ready(function () {
                                myInit();
                          });

    </script>
</asp:Content>

Очевидно, что это решение следует использовать только на этапе разработки, и его следует удалить до публикации сайта.

1 голос
/ 15 мая 2009

В javascript я думаю, что это невозможно, потому что современные браузеры имеют политику по безопасности в javascripts .. и очистка кэша является очень нарушающей.

Вы можете попробовать добавить

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">

В вашем заголовке, но у вас будет потеря производительности.

0 голосов
/ 25 июня 2014

Если вы используете ASP.Net, ознакомьтесь с модулем связывания и минимизации, доступным в ASP.Net 4.5.

http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification

Вы можете объявить «связку», которая указывает на ваш файл javascript. Каждый раз, когда ваш файл изменяется, он генерирует новый суффикс строки запроса ... но будет делать это только при изменении файла. Это упрощает развертывание обновлений, потому что вам даже не нужно задумываться об обновлении тегов новыми номерами версий.

Он также может объединять несколько файлов .js в один файл и минимизировать их все за один шаг. То же самое для CSS.

0 голосов
/ 18 июня 2012

Добавьте дату изменения файла js в конце вашего URL. С PHP это будет выглядеть примерно так:

echo '<script type="text/javascript" src="js/something.js?' . filemtime('js/something.js') . '"></script>';

Когда ваш скрипт будет перезагружаться при каждом его обновлении.

0 голосов
/ 09 сентября 2011

Чтобы избежать необходимости многократно нажимать F5 на вкладке IE при разработке веб-сайта, используйте ReloadIt .

enter image description here

Для каждой веб-страницы, отображаемой в IE, вы можете настроить имя файла, каталог или их набор. Если какие-либо изменения происходят в любом из этих настроенных путей, ReloadIt обновляет вкладку IE. Простой инструмент Это просто работает.

Это перезагрузит все, не только JavaScript.

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