- Кэш браузера
- Что такое кэш браузера?
- Как включить кэширование в браузере
- Изменение заголовков запроса
- Кэширование браузера через файл .htaccess
- Как установить время кэширования для различных типов файлов
- Метод альтернативного кэширования для .htaccess
- Cache-Control
- Как работает Cache-Control
- Общая проблема кэширования
- Цифровой отпечаток URL
- Методы кэширования
- Проверка включенного кэширования у браузера
- Предыстория (можно пропустить)
- Как проверить кэш браузера из js?
- Реализация алгоритма на PHP
- Кэш браузера не работает
- Рассмотрим самый простой и безобидный вариант.
- Давайте просто очистим кэш браузера и вернем ему скорость
- Чистим браузер Google Chrome
- Чистим браузер от Яндекса
- Чистим браузер Mozilla Forefox
- Чистим браузер Opera
- Если у вас вирус ?
- Учебное пособие по кэшированию, часть 1
- Виды веб-кэшей
- Почему я должен им пользоваться
- Как работает веб-кэш
Кэш браузера
Что такое кэш браузера?
- htaccess кэширование сохраняет содержимое веб-страницы на локальном компьютере, когда пользователь посещает ее;
- Использование кэша браузера – веб-мастер дает указания браузерам, как следует рассматривать ресурсы.
Когда браузер отображает веб-страницу, он должен загрузить логотип, CSS файл и другие ресурсы:
Кэш браузера « запоминает » ресурсы, которые браузер уже загрузил. Когда посетитель переходит на другую страницу сайта, логотип, CSS файлы и т.д. не должны загружаться снова, потому что браузер уже « запомнил » их ( сохранил ). В этом заключается причина того, почему во время первого посещения загрузка веб-страницы занимает больше времени, чем при повторных.
Когда вы используете кэширование, файлы веб-страницы будут сохранены в кэше браузера. Страницы будут загружаться в разы быстрее при повторных посещениях. Также будет с другими страницами, которые используют одни ресурсы.
Как включить кэширование в браузере
- Измените заголовки запроса ресурсов, чтобы использовать кэширование;
- Оптимизируйте свою стратегию кэширования.
Изменение заголовков запроса
Для большинства людей единственный способ кэширования сайта htaccess заключается в том, чтобы добавить код в файл .htaccess на веб-сервере.
Файл .htaccess контролирует многие важные настройки для вашего сайта.
Кэширование браузера через файл .htaccess
Приведенный ниже код указывает браузеру, что именно кэшировать и как долго это « запоминать «. Его следует добавить в начало файла .htaccess :
Сохраните файл .htaccess , а затем обновите веб-страницу.
Как установить время кэширования для различных типов файлов
В приведенном выше коде заданы промежутки времени. Например, 1 year ( 1 год ) или 1 month ( 1 месяц ). Они связаны с типами файлов. Приведенный выше код устанавливает, что .jpg файлы ( изображения ) следует кэшировать в течение года.
Если бы вы хотели изменить это, чтобы и JPG изображения кэшировались в течение месяца, то вы бы просто заменили « 1 год » на « 1 месяц «. Указанные выше значения кэширования через htaccess оптимальны для большинства веб-страниц.
Метод альтернативного кэширования для .htaccess
Описанный выше метод называется « Expires «, он помогает с кэшированием большинству новичков. После того, как вам станет проще работать с кэшированием, можете попробовать другой метод кэширования Cache-Control , который дает больше возможностей.
Возможно, что метод Expires не сработает на вашем сервере, в этом случае вы возможно захотите попробовать использовать Cache-Control .
Cache-Control
Этот метод позволяет получить больше контроля над кэшированием страниц в браузере, но многие считают, что проще прописать все настройки один раз.
Пример использования в файле .htaccess :
Приведенный выше код устанавливает заголовок Cache-Control в зависимости от типа файла.
Как работает Cache-Control
Рассмотрим упомянутую выше строку кода кэширования в браузере htaccess :
Данная строка — просто примечание. Файл .htaccess игнорирует строки, начинающиеся с символа # . Это примечание рекомендуется, так как у вас может быть несколько различных наборов данных в качестве решения для кэширования файлов:
Упомянутая выше строка говорит, что, « если файл будет одним из этих типов, то мы сделаем что-то с ним… »
Самое важное в этой строке то, что в ней перечислены различные типы файлов ( CSS , JS , JPEG , PNG и т.д. ) и что инструкции кэширования следует применять к этим типам файлов. Например, если вы не хотите, чтобы JPG файлы кэшировались в течение указанного периода времени, можете удалить « JPG «. Если вы хотите добавить HTML , то нужно в этой строке указать « HTML «:
В упомянутой выше строке установлены фактические заголовки и значения:
- Часть « Header set Cache-Control » — устанавливает заголовок;
- Переменная « max-age=2592000 » – указывает, сколько времени займет процесс кэширования ( в секундах ). В этом случае мы осуществляем кэширование в течение одного месяца ( 2592000 ) секунд;
- Часть « public » сообщает о том, что это общедоступно.
Эта строка кэширования через htaccess закрывает оператор и заканчивает блок кода.
Общая проблема кэширования
Если вы составляете список изображений, которые будут кэшироваться в течение года и более, помните, что если вы вносите изменения в свои страницы, они могут быть не видны всем пользователям. Так как пользователи обратятся к кэшируемым файлам, а не к существующим. Если есть файл, который вы периодически редактируете ( например — файл CSS ),то можно преодолеть проблему кэша с помощью цифрового отпечатка URL .
Цифровой отпечаток URL
Получение нового (некэшируемого) файлового ресурса возможно при наличии уникального имени. Например, если файл CSS назван «main.css», то вместо этого мы могли бы назвать его «main_1.css». В следующий раз, когда мы поменяем его имя, мы можем назвать файл «main_2.css». Это полезно для файлов, которые периодически изменяются.
Методы кэширования
При кэшировании файлов htaccess необходимо указать один заголовок из пары Expires или Cache-Control max-age, а также один из заголовков Last-Modified или ETag для всех кэшируемых ресурсов. Использовать и Expires, и Cache-Control: max-age излишне, как и Last-Modified и ETag одновременно.
Источник
Проверка включенного кэширования у браузера
Предыстория (можно пропустить)
На проекте, в котором мне довелось работать, была проблема большого количества java-script файлов (около 40 штук — использовались 2 js библиотеки + десяток самописных компонентов). Такое количество последовательно подгружаемых файлов вызывало долгую загрузку страницы. Я, как человек знакомый с трудами товарища sunnybear, предложил склеить все эти файлы в один и закэшировать его.
В итоге сайт залетал, и мы уже было хотели расслабиться, как вдруг появились сообщения от пользователей, которые по прежнему сообщали о проблеме долгой загрузки страницы. После непродолжительных поисков было обнаружено, что это пользователи, у которых по тем или иным причинам отключен браузерный кэш.
Итак, задача заключалась в определении пользователей с отключенным кэшем и своевременном их информировании. По счастью первая страница проекта уже содержала список проверок на блокировку всплывающих окон, рабочий js и flash. Поэтому добавление проверки на кэш браузера было вполне логичным, и не портило существующую концепцию.
Как проверить кэш браузера из js?
Любопытно, что задав этот вопросу гуглу, я получил список форумов с какими-то сумасшедшими идеями подсчета времени запроса и прочими невнятными идеями. Поэтому алгоритм проверки рабочего кэша пришлось придумать:
- Отправляем запрос на сервер
- Получаем ответ с неким содержимым и заголовками кэширования этого запроса
- Изменяем содержимое на сервере
- Отправляем второй запрос на сервер
- Сравниваем полученное содержимое. Если кэш работает, то содержимое второго запроса будет соответствовать первому, если нет — мы получим измененное содержимое с сервера
Реализация алгоритма на PHP
Пример реализации я упрощаю до двух php файлов + jquery. Суть решения из него ясна, так что адаптацию для вашего фреймфорка или языка сможете сделать сами.
Листинг файла ajaxCacheChecker.php — этот файл мы и будем запрашивать дважды
- $etag = ‘cacheChecker’ ;
- if ( @ strtotime ( $_SERVER [ ‘HTTP_IF_MODIFIED_SINCE’ ] ) == $_GET [ ‘s’ ] || trim ( $_SERVER [ ‘HTTP_IF_NONE_MATCH’ ] ) == $etag ) <
- header ( ‘HTTP/1.1 304 Not Modified’ ) ;
- > else <
- $maxAge = 60 ;
- header ( ‘Last-Modified: ‘ . gmdate ( ‘r’ , $_GET [ ‘s’ ] ) ) ;
- header ( ‘Etag: ‘ . $etag ) ;
- header ( ‘Pragma: private’ ) ;
- header ( ‘Cache-Control: private’ ) ;
- header ( «Expires: » . date ( «r» , $_GET [ ‘s’ ] + $maxAge ) ) ;
- echo microtime ( ) ;
- >
- ?>
Источник
Кэш браузера не работает
Глючит браузер, не адекватно отображаются сайты или совсем не открываются ? Такое поведение браузера как правило происходит если вы давно не чистили его кэш или компьютер заражен вирусом.
Рассмотрим самый простой и безобидный вариант.
Предположим, что ваш браузер заметно потерял в производительности, долго загружается, не адекватно отображает страницы сайтов. Могут не правильно отображаться формы и таблицы на сайтах, которые вы посещаете.
Одной из причин такого поведения может быть сильно заполненный кэш.
Когда вы просматриваете сайты в интернете, то браузер сохраняет часть страниц сайтов в памяти. Это дает возможность в последствии открывать вам сайт, при повторном его посещении намного быстрее.
Благодаря этому свойству и развитию интернет технологий, а так же использованию браузеров как основной платформой, заменяющей многие программы, браузеры требуют много памяти для шустрой работы.
Со временем отведенная память для браузера заполняется и он начинает использовать альтернативную память.
В результате пользователь вынужден расширять оперативную память для более шустрой работы софта, ставить высокоскоростные накопители SSD.
Давайте просто очистим кэш браузера и вернем ему скорость
Ниже будет показан алгоритм ваших действий в самых популярных браузерах.
Чистим браузер Google Chrome
Откроем браузер. В правом верхнем углу откроем меню далее выберем пункт история, затем снова история. В открывшейся вкладке выберем Очистить историю.
Если пользуетесь сочетаниями клавиш, то просто нажмите Ctrl + H
Далее откроется окно. Проставьте нужные вам опции и нажмите Удалить данные. Я рекомендую очистить все данные как показано на картинке ниже
Чистим браузер от Яндекса
Так как технически яндекс браузер похож на google chrome, то и наши действия будут схожи.
В верху справа открываем меню, в открывшемся списке выбираем История, далее снова История
Откроется окно в котором выберем пункт Очистить историю и проставим все необходимые галочки для максимальной очистки браузера
После выбора необходимых пунктов, выбираем — Очистить.
Чистим браузер Mozilla Forefox
Справа в верху кликнем по иконке истории. В открывшемся списке выбираем пункт Журнал, далее Удалить историю
Откроется новое окно в котором необходимо проставить параметры. Рекомендую, для максимальной очистки, поставить параметры как указано ниже
Чистим браузер Opera
Открываем браузер и на левой панели выбираем кликом мышки значок в виде шестеренки. Откроется страница настроек браузера, где выберем пункт Очистки истории. Выбор пункта осуществляется нажатием левой кнопки мыши, когда курсор наведен на пункт очистить историю.
Ссылка Подробнее открывает страницу справки о данном пункте, при желании можете почитать.
Откроется небольшое отдельное окно в котором нужно проставить настройки очистки браузера в соответствии с вашими предпочтениями.
Рекомендую максимальную очистку.
Если у вас какой то другой браузер, то скорее всего в нем порядок и смысл действий будет похож на алгоритм одного из выше перечисленных и описанных браузеров.
Если у вас вирус ?
Если вы подозреваете. что ваш браузер подвергся атаке вирусов рекомендую прочитать следующие статьи:
Скачайте приложение и проверьте свой пк на заражение.
Как найти вирус на своем ПК, как разблокировать баннер, а чтоб не допустить вирус в свой компьютер рекомендую почитать информацию о выборе антивирусной программы.
Если есть, что добавить или хотите поделится опытом и информацией, пишите в комментариях.
Источник
Учебное пособие по кэшированию, часть 1
Довольно подробное и интересное изложение материала, касающегося кэша и его использования. Часть 2.
Автор, Mark Nottingham, — признанный эксперт в области HTTP-протокола и веб-кэширования. Является председателем IETF HTTPbis Working Group. Принимал участие в редактировании HTTP/1.1, part. 6: Caching. В настоящий момент участвует в разработке HTTP/2.0.
От переводчика: об опечатках и неточностях просьба сообщать в личку. Спасибо.
Веб-кэш располагается между одним или несколькими веб-серверами и клиентом, или множеством клиентов, и следит за входящими запросами, сохраняя при этом копии ответов — HTML-страниц, изображений и файлов (совокупно известных, как представления (representations); прим. переводчика — позвольте я буду употреблять слово “контент” — оно, на мой взгляд, не так режет слух), для собственных нужд. Затем, если поступает другой запрос с аналогичным url-адресом, кэш может использовать сохраненный прежде ответ, вместо повторного запроса к серверу.
Существует две основные причины, по которым используется веб-кэш:
1. Уменьшение времени ожидания — так как данные по запросу берутся из кэша (который располагается “ближе” к клиенту), требуется меньше времени для получения и отображения контента на стороне клиента. Это делает Веб более отзывчивым (прим. переводчика — “отзывчивым” в контексте быстроты реакции на запрос, а не эмоционально).
2. Снижение сетевого трафика — повторное использование контента снижает объем данных, передаваемых клиенту. Это, в свою очередь, экономит деньги, если клиент платит за трафик, и сохраняет низкими и более гибкими требования к пропускной способности канала.
Виды веб-кэшей
Кэш браузера (Browser cache)
Если вы изучите окно настроек любого современного веб-браузера (например, Internet Explorer, Safari или Mozilla), вы, вероятно, заметите параметр настройки «Кэш». Эта опция позволяет выделить область жесткого диска на вашем компьютере для хранения просмотренного ранее контента. Кэш браузера работает согласно довольно простым правилам. Он просто проверяет являются ли данные “свежими”, обычно один раз за сессию (то есть, один раз в текущем сеансе браузера).
Этот кэш особенно полезен, когда пользователь нажимает кнопку “Назад” или кликает на ссылку, чтобы увидеть страницу, которую только что просматривал. Также, если вы используете одни и те же изображения навигации на вашем сайте, они будут выбираться из браузерного кэша почти мгновенно.
Прокси-кэш (Proxy cache)
Прокси-кэш работает по аналогичному принципу, но в гораздо большем масштабе. Прокси обслуживают сотни или тысячи пользователей; большие корпорации и интернет-провайдеры часто настраивают их на своих файрволах или используют как отдельные устройства (intermediaries).
Поскольку прокси не являются частью клиента или исходного сервера, но при этом обращены в сеть, запросы должны быть к ним как-то переадресованы. Одним из способов является использование настроек браузера для того, чтобы вручную указать ему к какому прокси обращаться; другой способ — использование перехвата (interception proxy). В этом случае прокси обрабатывают веб-запросы, перенаправленные к ним сетью, так, что клиенту нет нужды настраивать их или даже знать об их существовании.
Прокси-кэши являются своего рода общей кэш-памятью (shared cache): вместо обслуживания одного человека, они работают с большим числом пользователей и поэтому очень хороши в сокращении времени ожидания и сетевого трафика. В основном, из-за того, что популярный контент запрашивается много раз.
Кэш-шлюз (Gateway Cache)
Также известные как “реверсивные прокси-кэши” (reverse proxy cache) или “суррогаты” (surrogate cache) шлюзы тоже являются посредниками, но вместо того, чтобы использоваться системными администраторами для сохранения пропускной способности канала, они (шлюзы) обычно используются веб-мастерами для того, чтобы сделать их сайты более масштабируемыми, надежными и эффективными.
Запросы могут быть перенаправлены на шлюзы рядом методов, но обычно используется балансировщик нагрузки в той или иной форме.
Сети доставки контента (content delivery networks, CDN) распространяют шлюзы по всему интернету (или некоторой его части) и отдают кэшированный контент заинтересованным веб-сайтам. Speedera и Akamai являются примерами CDN.
Это учебное пособие преимущественно сфокусировано на браузерных кэшах и прокси, но некоторая информация подходит также и тем, кому интересны шлюзы.
Почему я должен им пользоваться
Кэширование является одной из наиболее неправильно понятых технологий в интернете. Веб-мастера, в частности, боятся потерять контроль над их сайтом, потому что прокси могут “скрыть” их пользователей, сделав сложным наблюдение посещаемости.
К несчастью для них (веб-мастеров), даже если бы веб-кэша не существовало, есть слишком много переменных в интернете, чтобы гарантировать, что владельцы сайтов будут в состоянии получить точную картину того, как пользователи обращаются с сайтом. Если это является для вас большой проблемой, данное руководство научит вас как получить необходимую статистику, не делая ваш сайт “кэшененавистником”.
Другой проблемой является то, что кэш может хранить содержимое, которое устарело или просрочено.
С другой стороны, если вы ответственно подходите к проектированию вашего веб-сайта, кэш может помочь с более быстрой загрузкой и сохранением нагрузки на сервер и интернет-соединение в рамках допустимого. Разница может быть впечатляющей: загрузка сайта, не работающего с кэшем, может потребовать нескольких секунд; в то время как преимущества использования кэширования могут сделать её кажущейся мгновенной. Пользователи по достоинству оценят малое время загрузки сайта и, возможно, будут посещать его чаще.
Подумайте об этом в таком ключе: многие крупные интернет-компании тратят миллионы долларов на настройку ферм серверов по всему миру для репликации контента для того, чтобы ускорить, как только можно, доступ к данным для своих пользователей. Кэш делает то же самое для вас и он гораздо ближе к конечному пользователю.
CDN, с этой точки зрения, являются интересной разработкой, потому что, в отличие от многих прокси-кэшей, их шлюзы приведены в соответствие с интересами кэшируемого веб-сайта. Тем не менее, даже тогда, когда вы используете CDN, вы все равно должны учитывать, что там будет прокси и последующее кэширование в браузере.
Резюмируя, прокси и кэш браузера будут использоваться, нравится вам это или нет. Помните, если вы не настроите ваш сайт для корректного кэширования, он будет использовать настройки кэша по-умолчанию.
Как работает веб-кэш
Все виды кэшей обладают определенным набором правил, которые они используют, чтобы определить, когда брать контент из кэша, если он доступен. Некоторые из эти правил установлены протоколами (HTTP 1.0/HTTP 1.1), некоторые — администраторами кэша (пользователями браузера или администраторами прокси).
Вообще говоря, это самые общие правила (не волнуйтесь, если вы не понимаете детали, они будут объяснены ниже):
- Если заголовки ответа сообщают кэшу не сохранять их, он не сохранит.
- Если запрос авторизованный (authorized) или безопасный (то есть, HTTPS), он не будет закэширован.
- Кэшированный контент считается “свежим” (то есть, может быть отправлен клиенту без проверки с исходного сервера), если:
- У него установлено время истечения или другой заголовок, контролирующий время жизни, и он еще не истек.
- Если кэш недавно проверял контент и тот был модифицирован достаточно давно.
Свежий контент берется непосредственно из кэша, без проверки с сервера.
- Если контент является устаревшим, исходному серверу будет предложено провалидировать его или сообщить кэшу, является ли имеющаяся копия по-прежнему актуальной.
- При определенных обстоятельствах — например, когда он отключен от сети — кэш может сохранять устаревшие ответы без проверки с исходного сервера.
Если в ответе не присутствует валидатора ( ETag или Last-Modified заголовок), и он не содержит никакой явной информации о свежести, контент, обычно (но не всегда) будет считаться некэшируемым.
Свежесть (freshness) и валидация (validation) являются наиболее важными способами, с помощью которых кэш работает с контентом. Свежий контент будет доступен мгновенно из кэша; валидное же содержимое избежит повторной отправки всех пакетов, если оно не было изменено.
Источник