Как проверить, отключено ли кэширование в браузере - PullRequest
5 голосов
/ 09 февраля 2012

Есть ли способ в Javascript или C #, чтобы сказать, если браузер, который использует кто-то, отключил кэширование статического содержимого?

Мне нужно проверить, оптимизирован ли браузер для кэширования.

Ответы [ 3 ]

2 голосов
/ 09 февраля 2012

UPDATE

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

Не уверен, поможет ли это, но вы можете попробовать следующий трюк: 1. Добавьте какой-нибудь ресурс на свою страницу, скажем, это будет файл javascript cachedetect.js. 2. Сервер должен генерировать cachedetect.js каждый раз, когда кто-то запрашивает его. И в ответ он должен содержать связанные с кешем заголовки, т. Е. Если кеш браузера включен, ресурс должен кэшироваться в течение длительного времени. Каждый cachedetect.js должен выглядеть так:

var version = [incrementally generated number here];
var cacheEnabled; //will contain the result of our check
var cloneCallback;//function which will compare versions from two javascript files

function isCacheEnabled(){
   if(!window.cloneCallback){
       var currentVersion = version;//cache current version of the file
       // request the same cachedetect.js by adding <script> tag dynamically to <header>
       var head = document.getElementsByTagName("head")[0];
       var script = document.createElement('script');
       script.type = 'text/javascript';
       script.src = "cachedetect.js";
       // newly loaded cachedetect.js will execute the same function isCacheEnabled, so we need to prevent it from loading the script for third time by checking for cloneCallback existence       
       cloneCallback = function(){
           // once file will be loaded, version variable will contain different from currentVersion value in case when cache is disabled 
           window.cacheEnabled = currentVersion == window.version;        
       };      
       head.appendChild(script);

    }  else {
        window.cloneCallback();
    }   
}

isCacheEnabled();

После этого вы можете просто проверить cacheEnabled === true или cacheEnabled === false через некоторое время.

0 голосов
/ 05 февраля 2016

Еще один подход, который включает в себя клиента и сервера.

  1. Сделайте вызов к странице / конечной точке, которая установит случайный уникальный идентификатор в ответ. Установите заголовок кэша для этой страницы / конечной точки
  2. Сделайте тот же звонок еще раз, чтобы установить другой уникальный номер
  3. Если числа совпадают, они поступают из кэша или с сервера
0 голосов
/ 09 февраля 2012

Я считаю, что это должно работать: http://jsfiddle.net/pseudosavant/U2hdy/

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

var preloadFile = function(url){
    var start = +new Date();
    var file = document.createElement("img");
    file.src = url;
    return +new Date() - start;
};

var testFile = "http://upload.wikimedia.org/wikipedia/en/thumb/d/d2/Mozilla_logo.svg/2000px-Mozilla_logo.svg.png"
var timing = [];
timing.push(preloadFile(testFile));
timing.push(preloadFile(testFile));

caching = (timing[1] < 10); // Timing[1] should be less than 10ms if caching is enabled
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...