diff options
author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:42:52 -0500 |
---|---|---|
committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:42:52 -0500 |
commit | 074785cea106179cb3305637055ab0a009ca74f2 (patch) | |
tree | e6ae371cccd642aa2b67f39752a2cdf1fd4eb040 /files/ru/using_firefox_1.5_caching | |
parent | da78a9e329e272dedb2400b79a3bdeebff387d47 (diff) | |
download | translated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.gz translated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.bz2 translated-content-074785cea106179cb3305637055ab0a009ca74f2.zip |
initial commit
Diffstat (limited to 'files/ru/using_firefox_1.5_caching')
-rw-r--r-- | files/ru/using_firefox_1.5_caching/index.html | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/files/ru/using_firefox_1.5_caching/index.html b/files/ru/using_firefox_1.5_caching/index.html new file mode 100644 index 0000000000..2db6fe3556 --- /dev/null +++ b/files/ru/using_firefox_1.5_caching/index.html @@ -0,0 +1,210 @@ +--- +title: Использование кэширования в Firefox 1.5 +slug: Using_Firefox_1.5_caching +translation_of: Mozilla/Firefox/Releases/1.5/Using_Firefox_1.5_caching +--- +<div>{{FirefoxSidebar}}</div><p> </p> + +<h3 id="Introduction" name="Introduction">Введение</h3> + +<p><a href="/en/Firefox_1.5_for_developers" title="en/Firefox_1.5_for_developers">Firefox 1.5</a> использует кэширование целых Web-страниц, включая их JavaScript-состояния, в рамках сессии браузера. Переходы по посещённым страницам вперёд-назад не требуют загрузки страниц, а JavaScript-состояния сохраняются. Эта функция, обозначаемая иногда как <strong>bfcache</strong> (Back-Forward Cache), делает навигацию по страницам очень быстрой. Такое кэшированное состояние сохраняется, пока пользователь не закроет браузер.</p> + +<p>Есть случаи, в которых Firefox не кэширует страницы. Вот некоторые обычные программные причины того, что страница не кэширована:</p> + +<ul> + <li>страница использует обработчик <code>unload</code> или <code>beforeunload</code>;</li> + <li>страница устанавливает заголовок «cache-control: no-store».</li> + <li>доступ к сайту происходит по протоколу HTTPS, а страница устанавливает по меньшей мере один из следующих заголовков: + <ul> + <li>«Cache-Control: no-cache»</li> + <li>«Pragma: no-cache»</li> + <li>с заголовком «Expires: 0» or «Expires» со значением даты, лежащим в прошлом относительно значению заголовка «Date» (если только не указан также заголовок «Cache-Control: max-age=»);</li> + </ul> + </li> + <li>страница не полностью загрузилась, когда пользователь ушёл с неё, или имеет прерванные сетевые запросы по другим причинам (например, <code>XMLHttpRequest</code>));</li> + <li>страница имеет работающие IndexedDB-транзакции;</li> + <li>страница верхнего уровня содержит фреймы (например, {{ HTMLElement("iframe") }}), которые не кэшируются по одной из перечисленных здесь причин;</li> + <li>страница находится в фрейме и пользователь загружает новую страницу в этот фрейм (в этом случае, когда пользователь уходит со с этой страницы, последнее загруженное в фреймы содержимое есть то, что закэшировано).</li> +</ul> + +<p>Эта новая функция кэширования меняет поведение загрузки страницы, так что Web-авторы могут захотеть:</p> + +<ul> + <li>узнать, когда на страницу происходит переход (когда она загружается из пользовательского кэша);</li> + <li>определить поведение страницы, когда пользователь уходит со страницы (позволяя всё же странице быть закэшированной).</li> +</ul> + +<p>Это позволяют сделать два новых события браузера.</p> + +<h3 id="New_browser_events" name="New_browser_events">Новые события браузера</h3> + +<p>Если вы используете эти новые события, ваши страницы продолжат правильно отображаться в других браузерах (мы протестировали старые версии Firefox, Internet Explorer, Opera и Safari), а при загрузке в Firefox 1.5 добавится новая функциональность кэширования.</p> + +<p>Примечание: по состоянию на октябрь 2009 года разработческие версии Safari добавили поддержку этих новых событий (см. <a class="link-https" href="https://bugs.webkit.org/show_bug.cgi?id=28758" title="https://bugs.webkit.org/show_bug.cgi?id=28758">webkit-баг</a>).</p> + +<p>Стандартное поведение для Web-страниц следующее:</p> + +<ol> + <li>Пользователь переходит на страницу.</li> + <li>По мере загрузки страницы выполняются инлайновые скрипты.</li> + <li>Как только страница загрузилась, срабатывает обработчик <code>onload</code>.</li> +</ol> + +<p>Некоторые страницы включают четвёртый шаг. Если страница использует обработчик <code>unload</code> или <code>beforeunload</code> handler, он срабатывает прежде чем пользователь уходит со страницы. Если присутствует обработчик <code>unload</code>, эта страница не будет кэширована.</p> + +<p>Когда пользователь переходит на кэшированную страницу, инлайновые скрипты и обработчик <code>onload</code> не запускаются (шаги 2 и 3), так как в большинстве случаев эффекты этих скриптов были сохранены.</p> + +<p>Если страница содержит скрипты или иное поведение, запускаемое в течение загрузки, которое вы хотите продолжить выполнять каждый раз, когда пользователь заходит на страницу, или если вы хотите знать, когда пользователь заходит на кэшированную страницу, используйте новое событие <code>pageshow</code>.</p> + +<p>Если у вас есть поведение, запускаемое, когда пользователь уходит со страницы, но вы хотите воспользоваться новой функциональностью кэширования, и поэтому не хотите использовать обработчик unload, используйте новое событие <code>pagehide</code>.</p> + +<h4 id="pageshow_event" name="pageshow_event">Событие pageshow</h4> + +<p>Это событие работает так же, как событие <code>load</code>, но срабатывает каждый раз при загрузке страницы (в то время как событие <code>load</code> в Firefox 1.5 не срабатывает, когда страница загружается из кэша). При первой загрузке страницы событие <code>pageshow</code> срабатывает сразу после события <code>load</code>. Событие <code>pageshow</code> использует булевское свойство <code>persisted</code>, которое выставляется в <code>false</code> при начальной загрузке. Оно выставляется в <code>true</code>, если это не начальная загрузка (то есть когда страница уже кэширована).</p> + +<p>Выполняйте любой JavaScript-код, который должен отработать при каждой загрузке страницы, при срабатывании событий <code>pageshow</code>.</p> + +<p>Вызывая JavaScript-функции в обработчике события <code>pageshow</code>, вы можете обеспечить их вызов при загрузке страницы в браузерах, отличных от Firefox 1.5, вызывая этот обработчик в обработчике события <code>load</code>, как показано в примере ниже.</p> + +<h4 id="pagehide_event" name="pagehide_event">Событие pagehide</h4> + +<p>Если вы хотите определить поведение, которое происходит, когда пользователь уходит со страницы, но не хотите использовать событие <code>unload</code> (что воспрепятствовало бы кэшированию страницы), вы можете использовать новое событие <code>pagehide</code>. Как и <code>pageshow</code>, событие <code>pagehide</code> использует булевское свойство <code>persisted</code>. Оно выставляется в <code>false</code>, если страница не кэширована в браузере, а в <code>true</code>,— если кэширована. Когда это свойство выставлено в <code>false</code>, обработчик <code>unload</code>, если он есть, вызывается сразу после события <code>pagehide</code>.</p> + +<p>Firefox 1.5 пытается имитировать события загрузки в том же порядке, в каком они срабатывают при начальной загрузке страницы. Фреймы обрабатываются таким же образом, что и документ верхнего уровня. Если страница содержит фреймы, то при загрузке кэшированной страницы:</p> + +<ul> + <li>События <code>pageshow</code> из каждого фрейма срабатывают перед событием <code>pageshow</code> в главном документе.</li> + <li>Когда пользователь уходит с кэшированной страницы, событие <code>pagehide</code> из каждого фрейма срабатывает перед событием <code>pagehide</code> в главном документе.</li> + <li>Для навигации, происходящей внутри отдельного фрейма, события срабатывают только в затронутом фрейме.</li> +</ul> + +<h4 id="pagehide_event" name="pagehide_event">Кэширование страницы несмотря на обработчики <code>unload</code> и <code>beforeunload</code></h4> + +<p>Если вы хотите использовать события <code>unload</code> или <code>beforeunload</code>, сохранив кэширование страницы, вы можете просто удалить эти события в обработчике события и восстановить их в обработчике <code>pageshow</code>, если возвращаетесь на эту страницу:</p> + +<pre>window.addEventListener('pageshow', PageShowHandler, false); +window.addEventListener('unload', UnloadHandler, false); + +function PageShowHandler() { + window.addEventListener('unload', UnloadHandler, false); +} + +function UnloadHandler() { + window.removeEventListener('unload', UnloadHandler, false); +} +</pre> + +<h3 id="Пример_кода">Пример кода</h3> + +<p>Приведённый ниже пример реализует страницу, которая использует обработчики <code>load</code> и <code>pageshow</code>. Поведение этой страницы следующее:</p> + +<ul> + <li>В браузерах, отличных от Firefox 1.5, при каждой загрузке страницы происходит следующее: событие <code>load</code> вызывает функцию <code>onLoad</code>, которая вызывает функцию <code>onPageShow</code> (а также дополнительную функцию).</li> +</ul> + +<ul> + <li>В Firefox 1.5 при первой загрузке страницы событие <code>load</code> работает так же, как и в других браузерах. Кроме того, срабатывает событие <code>pageshow</code>, и, так как <code>persisted</code> установлено в <code>false</code>, не предпринимается никаких дополнительных действий.</li> +</ul> + +<ul> + <li>В Firefox 1.5 при загрузке страницы из кэша срабатывает только событие <code>pageshow</code>. Так как<code> persisted</code> установлено в <code>true</code>, вызывается только JavaScript-код в функции <code>onPageShow</code>.</li> +</ul> + +<p>В этом примере:</p> + +<ul> + <li>Страница вычисляет и обображает текущие дату и время каждый раз при загрузке. Это вычисление включает секунды и миллисекунды, так что вы легко можете протестировать функциональность.</li> + <li>Курсор помещается в поле Name при первой загрузке страницы. В Firefox 1.5 при возвращении на страницу курсор остаётся в том поле, где он был, когда пользователь ушёл со страницы. В других браузерах курсор опять помещается в поле Name.</li> +</ul> + +<pre><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" + "http://www.w3.org/TR/html4/loose.dtd"> +<HTML> +<head> +<title>Order query : Firefox 1.5 Example</title> +<style type="text/css"> +body, p { + font-family: Verdana, sans-serif; + font-size: 12px; + } +</style> +<script type="text/javascript"> +function onLoad() { + loadOnlyFirst(); + onPageShow(); +} + +function onPageShow() { +//вычисление текущего времени + var currentTime= new Date(); + var year=currentTime.getFullYear(); + var month=currentTime.getMonth()+1; + var day=currentTime.getDate(); + var hour=currentTime.getHours(); + var min=currentTime.getMinutes(); + var sec=currentTime.getSeconds(); + var mil=currentTime.getMilliseconds(); + var displayTime = (month + "/" + day + "/" + year + " " + + hour + ":" + min + ":" + sec + ":" + mil); + document.getElementById("timefield").value=displayTime; +} + +function loadOnlyFirst() { + document.zipForm.name.focus(); +} +</script> +</head> +<body onload="onLoad();" onpageshow="if (event.persisted) onPageShow();"> +<h2>Order query</h2> + +<form name="zipForm" action="http://www.example.com/formresult.html" method="get"> +<label for="timefield">Date and time:</label> +<input type="text" id="timefield"><br> +<label for="name">Name:</label> +<input type="text" id="name"><br> +<label for="address">Email address:</label> +<input type="text" id="address"><br> +<label for="order">Order number:</label> +<input type="text" id="order"><br> +<input type="submit" name="submit" value="Submit Query"> +</form> +</body> +</html> +</pre> + +<p>Напротив, если приведённая выше страница не слушает событие <code>pageshow</code> и выполняет все вычисления в обработчике события <code>load</code> (если код написан так, как показано в примере ниже), как положение курсора, так и дата/время в Firefox 1.5 будут кэшированы, когда пользователь when the user navigated away from the page. When the user returned to the page, the cached date/time would display.</p> + +<pre><script> +function onLoad() { + loadOnlyFirst(); + +//calculate current time + var currentTime= new Date(); + var year = currentTime.getFullYear(); + var month = currentTime.getMonth()+1; + var day = currentTime.getDate(); + var hour=currentTime.getHours(); + var min=currentTime.getMinutes(); + var sec=currentTime.getSeconds(); + var mil=currentTime.getMilliseconds(); + var displayTime = (month + "/" + day + "/" + year + " " + + hour + ":" + min + ":" + sec + ":" + mil); + document.getElementById("timefield").value=displayTime; +} + +function loadOnlyFirst() { + document.zipForm.name.focus(); +} +</script> +</head> + +<body onload="onLoad();"> +</pre> + +<h3 id="Developing_Firefox_extensions" name="Developing_Firefox_extensions">Developing Firefox extensions</h3> + +<p>Firefox 1.5 <a href="/en/Building_an_Extension" title="en/Building_an_Extension">extensions</a> need to allow for this caching functionality. If you are developing a Firefox extension that you want to be compatible with both 1.5 and earlier versions, make sure that it listens for the <code>load</code> event for triggers that can be cached and listens for the <code>pageshow</code> event for triggers that shouldn’t be cached.</p> + +<p>For instance, the Google Toolbar for Firefox should listen for the <code>load</code> event for the autolink function and to the <code>pageshow</code> event for the PageRank function in order to be compatible with both 1.5 and earlier versions.</p> + +<p>{{ languages( { "it": "it/Usare_il_caching_di_Firefox_1.5", "de": "de/Benutzen_des_Zwischenspeichers_in_Firefox_1.5_(caching)", "fr": "fr/Utilisation_du_cache_de_Firefox_1.5", "ja": "ja/Using_Firefox_1.5_caching" } ) }}</p> |