Примушуйте Google Chrome перевіряти наявність нових файлів JavaScript щоразу, коли я отримую доступ до веб-сайту


25

Отже, якщо я перейду до параметрів Інтернету в Internet Explorer: введіть тут опис зображення

Я можу налаштувати параметри, коли IE перевіряє оновлення: введіть тут опис зображення

Чи можу я зробити щось подібне в Google Chrome? Зараз, коли я змінюю файл JavaScript і відладжую програму від Visual Studio, Chrome завжди використовуватиме кешовану версію, а не використовувати модифіковану версію. Щоб мати можливість використовувати поточну версію, я повинен вручну очистити свої тимчасові інтернет-файли / кеш, що насправді дратує.


14
Чому замість цього ви не відключите кешування, виконане Visual Studio? (Серйозно, хто в чортів розробляє IDE з кешування?)
jpmc26

2
@ jpmc26 Що кешування?
EJoshuaS

21
Я остаточно сформулював останній коментар; мої вибачення, якщо це зробило це незрозумілим. Браузери кешують файли лише у тому випадку, якщо сервер повертає конкретні заголовки. Дуже глупо, що сервер розробки Visual Studio надсилає заголовок кешу за замовчуванням, оскільки слід очікувати змін у цих файлах . Завантажувати додаткову частину секунди варто, щоб не мати проблем із застарілими файлами JS та CSS, які кешуються у браузері. Я щиро сподіваюся, що існує якийсь спосіб відключити це.
jpmc26

1
Не вдалося знайти жодних параметрів Visual Studio, але зміна web.config розробки може вирішити кешування у візуальній студії. iis.net/configreference/system.webserver/staticcontent/…
GER

1
Розширення для Chrome "Cache Killer" вирішило це для мене, я не знаю чому, але ctrl + f5 іноді не працює для мене
flagg19

Відповіді:


55

Варіант 1: тимчасово відключити кеш

  1. Відкрийте Інструменти для розробників (Натисніть F12або Меню, Інші інструменти, Інструменти для розробників)
  2. Відкрийте Налаштування Інструментів для розробників (Натисніть F1або Меню DevTools, Налаштування)
  3. Поставте прапорець "Вимкнути кеш-пам'ять (поки DevTools відкритий)" під заголовком "Мережа" на панелі "Налаштування"

Варіант 2: Вимкнути кеш-сеанс

Запустіть Chrome за допомогою перемикачів командного рядка, --disk-cache-size=1 --media-cache-size=1які обмежуватимуть кеші на 1 байт, фактично відключаючи кеш.

Варіант 3: оновлення вручну

Перезавантажте поточну сторінку, ігноруючи кешований вміст: Shift+ F5або Ctrl+ Shift+r

Комбінації клавіш Chrome - Довідка Chrome (у розділі " Швидкі клавіші веб- сторінок")

Варіант 4: додаткові параметри перезавантаження ( джерело )

Після відкриття Інструментів для розробників натисніть правою кнопкою миші кнопку Перезавантажити, щоб відобразити меню перезавантаження з наступним:

  • Нормальне перезавантаження (Ctrl + R)
  • Перезавантаження (Ctrl + Shift + R)
  • Порожній кеш і важке перезавантаження

1
@Bruno Незнайко, я також завжди використовував ctrl + f5. Просто перевірений і обидва, здається, працюють.
Jeroen

Я пропоную використовувати варіант 2, з поворотом. Створіть окремий ярлик до Chrome за допомогою перемикачів і назвіть його по-іншому. Розмістіть його в різних кінцях панелі завдань Windows.
Крістофер Заручник

8

Це може бути не на 100% пов’язане з оновленням хрому, але для подальшого розвитку. Як @Dom сказав, ви можете додати? V = # після свого ресурсу. Один із способів автоматизації процесу - хеш-вміст згаданого файлу та використання його як версії.

У мене є фрагмент коду про те, як це зробити в C # (Razor для реалізації), якщо це може допомогти.

Помічник:

public static string HashUrl(string relativeUrl)
    {
        var server = HttpContext.Current.Server;
        if (File.Exists(server.MapPath(relativeUrl)))
        {
            byte[] hashData;
            using (var md5 = MD5.Create())
            using (var stream = File.OpenRead(server.MapPath(relativeUrl)))
                hashData = md5.ComputeHash(stream);

            return relativeUrl.Replace("~", "") + "?v=" + BitConverter.ToString(hashData).Replace("-", "");
        }
        return relativeUrl + "?v=notFound";
    }

Впровадження:

<link rel="stylesheet" href=@Util.HashUrl("~/Controllers/Home/Views/Index.css") />

Сподіваюся, це допомагає

EDIT --- Деякі запитували час виконання збірки, а для 1000 невеликих ресурсів потрібно приблизно 11 мс.

https://en.code-bude.net/2013/08/07/md5-hashes-in-c-benchmark-and-speed-%E2%80%8B%E2%80%8Boptimization/

введіть тут опис зображення https://en.code-bude.net/wp-content/uploads/2013/08/md5_performance_benchmark_2.png


2
Версія таких версій (або вбудовуючи версію / хеш у саме ім'я ресурсу) може бути дуже корисною, особливо при розгортанні оновлень у реальному світі, де - всупереч тому, що кажуть правила в заголовку кеш-керування - всіляко кешування може статися, і багато користувачів не знають, як (або необхідність) оновити кеш. Якщо ви (зробите свою програму) запитуєте нещодавно названий ресурс, він не може бути кешований.
TripeHound

1
Це не велика втрата продуктивності? Хешування кожного css і js-файлу кожного разу, коли посилання вставляється на сторінку ... Чи запускаєте ви орієнтири для цього?
Райдрі каже, що повернеться до Моніки

2
@Raidri Hashing на льоту, напевно, не дуже гарна ідея (я не помічав, що це робив, коли вперше прокоментував). Оновлення посилань, щоб використовувати хеш або версію під час процесу збирання.
TripeHound

@Raidri У мене є досить невеликий додаток з meaby 20 ресурсами, які я хешував, і я не бачив різниці у часі збирання, тому я не намагався його порівняти. Також я не впевнений, що я розумію ваше друге речення, але ресурси кешуються, і браузер переробляє їх лише у випадку, якщо хеш зміниться => якщо ви зміните сам ресурс.
fred beauchamp

Хеш не обчислюється під час збирання, а на кожному поколінні сторінки. Це проблема сервера і не має нічого спільного з кешуванням у браузері.
Райдрі каже, що відбудеться повернення Моніки

5

В інших випадках, коли це може бути неможливим, наприклад, бажаючи примусити оновити на комп'ютері кінцевого користувача, до якого ви не маєте доступу, ви можете додати номер версії до імені сценарію як параметр запиту, змушуючи браузер ідентифікувати це як інший файл . тобто. example.js?v=1. Майте на увазі, що вам потрібно змінити номер при кожному перезавантаженні, щоб примусити його.

Ви також можете це зробити з місцевим розвитком, але метод інструментів розробки набагато ефективніший.


3

в додаванні @Steven відповіді, коли ви отримуєте інструменти розробника консолі відкриваються, ви можете праву кнопку миші на кнопці відновлення і використовуйте меню, що випадає.

У цьому меню ви отримуєте опцію "Порожній кеш і жорстке перезавантаження" .

Це те, що ви шукаєте.


1
Я припускаю, що ви використовуєте не англійську версію Chrome. Я використовую англійську версію, і вона називається "Порожній кеш і жорстке перезавантаження".
Nzall

1

Якщо ви розробляєте веб-сайт, то ви повинні знати, що Chrome потребує must-revalidateналаштування Cache-Controlдля того, щоб належним чином отримати файли під час їх зміни на сервері.

Інші відповіді розповідають, як натиснути SHIFT-F5, щоб змусити власну версію Chrome перезавантажувати всі файли. Але чи розумно сказати всім користувачам сайту робити це щоразу, коли сайт змінюється? Якщо ви Cache-Controlвключите, must-revalidateChrome перевірте, чи змінилися файли, а потім завантажте їх належним чином за потреби.

Деталі див. У цьому дописі в блозі: https://agiletribe.wordpress.com/2018/01/29/caching-for-chrome/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.