2010-03-02 3 views
8

Есть ли способ в JavaScript для того, чтобы узнать, находится ли ресурс в кеше браузера?Как узнать, когда кэшируется ресурс веб-страницы?

Мы обрабатываем часть наших страниц на странице клиентской стороны, чтобы мы могли получать более точные данные о том, как быстро загружаются страницы для наших пользователей. В первый раз, когда пользователи приходят на наш сайт, некоторые ресурсы (JS, CSS, изображения) кэшируются браузером, поэтому их начальное просмотрение страниц будет медленнее, чем последующие.

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

ответ

4

Для проверки того, является ли ресурс кэшированным, API JavaScript не существует. Я думаю, что лучшее, что вы можете сделать, это проверить, сколько времени потребовалось для загрузки ресурсов, и ведите те, у кого меньше времени загрузки.

В верхней части страницы:

<script>var startPageLoad = new Date().getTime();</script> 

На каждом ресурсе:

<img src="foo.gif" onload="var fooLoadTime = startPageLoad - new Date().getTime()"> 
<script src="bar.js" onload="var barLoadTime = startPageLoad - new Date().getTime()"> 

При представлении время загрузки:

var fooProbablyCached = fooLoadTime < 200; // Took < 200ms to load foo.gif 
var barProbablyCached = barLoadTime < 200; // Took < 200ms to load bar.gif 

Вы, возможно, потребуется использовать onreadystatechange события вместо onload в IE.

+0

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

+0

Привет, Уильям, глядя на браузер, это похоже на то, что вы хотите посмотреть out for - таблица стилей, за которой сразу следует встроенный скрипт: http://www.browserscope.org/?v=top&category=network (Другие параллельные проблемы загрузки распространяются на внешние скрипты). – Annie

+0

Мой сервер подсчитывает переменную и отправляет это с заголовком Content-MD5. Клиентский скрипт проверяет, существует ли заголовок Content-MD5 и больше, чем раньше. Если так, ответ не кэшируется. Я делаю что-то вроде th по соображениям безопасности. –

0

Для этого необходим плагин. Firebug может сообщить вам на вкладке «NET», как только вы ее установите (для Firefox). Сам JavaScript сам не видит HTTP-трафик браузера.

+1

Как я упоминаю в вопросе, я делаю клиентскую аппаратуру на реальных просмотрах страниц. Маловероятно, что я получу много наших пользователей для установки Firebug, особенно тех, кто не использует Firefox. –

+3

Не нравится, что истина не является основанием для голосования. Благодарю. :( –

+2

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

Смежные вопросы