Inhaltsverzeichnis
Vorwort:
Prinzip und Umgebung
Analyseliste
CACHE-MANIFEST
NETZWERK
FALLBACK
Cache aktualisieren
Demo
缓存立即执行
注意事项
Heim Web-Frontend HTML-Tutorial HTML5-Offline-Speicherprinzip

HTML5-Offline-Speicherprinzip

Sep 23, 2016 am 03:30 AM

Vorwort:

Mit HTML5 können Sie ganz einfach eine Offline-Version einer Webanwendung erstellen, indem Sie eine Cache-Manifestdatei erstellen.

HTML5 führt Anwendungs-Caching ein, was bedeutet, dass Webanwendungen zwischengespeichert und abgerufen werden können, wenn kein Netzwerk vorhanden ist.

Der Anwendungscache bietet drei Vorteile für Apps:

Offline-Browsing – Benutzer können sie offline verwenden.

Geschwindigkeit – Zwischengespeicherte Ressourcen werden schneller geladen.

Reduzieren Sie die Serverlast – der Browser lädt nur geänderte Ressourcen vom Server herunter.

Prinzip und Umgebung

Wie oben erwähnt, basiert die Offline-Speicherung von HTML5 auf einer neu erstellten .appcache-Datei. Durch die 解析清单 Offline-Speicherressourcen werden diese Ressourcen wie Cookies gespeichert . Später, wenn das Netzwerk offline ist, zeigt der Browser die Seite anhand der offline gespeicherten Daten an.

Genau wie Cookies erfordert auch die Offline-Speicherung von HTML5 eine Serverumgebung.
Hier ist ein kleines Tool – ein einfacher IIS-Server. Platzieren Sie es im Projektaktualisierungsverzeichnis und doppelklicken Sie, um es auszuführen, um die Serverumgebung zu simulieren.
Link: http://pan.baidu.com/s/1jG86UV0 Passwort: ja9h

Analyseliste

Bevor Sie beginnen, müssen Sie die manifest (d. h. die .appcache-Datei) verstehen und wissen, wie die obige 解析清单 geschrieben wird.

Manifestdateien sind einfache Textdateien, die dem Browser mitteilen, was zwischengespeichert wird (und was nicht).

Manifestdateien können in drei Teile unterteilt werden:

  • CACHE MANIFEST – Die unter dieser Überschrift aufgeführten Dateien werden nach dem ersten Download zwischengespeichert
  • NETZWERK – Die unter dieser Überschrift aufgeführten Dateien erfordern eine Verbindung zum Server und werden nicht zwischengespeichert
  • FALLBACK – Die unter dieser Überschrift aufgeführten Dateien geben die Fallback-Seite (z. B. eine 404-Seite) an, wenn auf die Seite nicht zugegriffen werden kann

Im Online-Modus liest der Benutzeragent das Manifest bei jedem Besuch der Seite. Wenn Änderungen gefunden werden, werden alle Ressourcen im Manifest neu geladen.

CACHE-MANIFEST

Die erste Zeile, CACHE MANIFEST, ist erforderlich:

<span style="color: #008080;">1</span> CACHE MANIFEST / theme.css /logo.gif / main.js
Nach dem Login kopieren

Die obige Manifestdatei listet drei Ressourcen auf: eine CSS-Datei, ein GIF-Bild und eine JavaScript-Datei. Wenn die Manifestdatei geladen wird, lädt der Browser diese drei Dateien aus dem Stammverzeichnis der Website herunter. Wenn der Benutzer dann die Verbindung zum Internet trennt, sind diese Ressourcen weiterhin verfügbar.

NETZWERK

Whitelist, verwenden Sie den Platzhalter „*“. In diesem Status werden alle URLs, die nicht im relevanten Cache-Bereich angezeigt werden, standardmäßig mit der HTTP-bezogenen Cache-Header-Richtlinie versehen.

Der folgende Abschnitt NETZWERK gibt an, dass die Datei „login.asp“ niemals zwischengespeichert wird und nicht offline verfügbar ist:

<span style="color: #008080;">1</span> NETWORK: login.asp
Nach dem Login kopieren

* kann verwendet werden, um anzugeben, dass alle anderen Ressourcen/Dateien eine Internetverbindung erfordern:

NETWORK: *
Nach dem Login kopieren

FALLBACK

Der folgende FALLBACK-Abschnitt gibt an, dass alle Dateien im Verzeichnis /html5/ durch „offline.html“ ersetzt werden, wenn keine Internetverbindung hergestellt werden kann:

ALLBACK:/html5/ /404.html
Nach dem Login kopieren

Hinweis: Der erste URI ist die Ressource, der zweite ist der Fallback.

Cache aktualisieren

Sobald eine App zwischengespeichert ist, bleibt sie zwischengespeichert, bis:

  • Benutzer löscht Browser-Cache
  • Die Manifestdatei wurde geändert
  • Anwendungscache nach Programm aktualisieren

Demo

<span style="color: #0000ff;">case</span>/ |-- index.html | |-- demo.appcache | |-- 简易IIS服务器.exe | `-- image |-- HTML5-Offline-Speicherprinzip `-- HTML5-Offline-Speicherprinzip
Nach dem Login kopieren

index.html

 
 
 
    <meta charset="UTF-8"> 
    <title>HTML5离线存储</title>
 
 
    <img src="/static/imghw/default1.png" data-src="image/HTML5-Offline-Speicherprinzip" class="lazy" alt=""> 
    <img src="/static/imghw/default1.png" data-src="image/HTML5-Offline-Speicherprinzip" class="lazy" alt=""> 
 
Nach dem Login kopieren

demo.appcache

CACHE MANIFEST #v01 image/HTML5-Offline-Speicherprinzip   NETWORK:*FALLBACK: /
Nach dem Login kopieren

Bildordner speichert
HTML5-Offline-Speicherprinzip
HTML5-Offline-Speicherprinzip
HTML5-Offline-Speicherprinzip
HTML5-Offline-Speicherprinzip

Okay, dann führen Sie es aus简易IIS服务器.exe Probieren Sie es aus.
Wenn iis eingeschaltet ist
Alt text
Wenn iis ausgeschaltet ist (es ist ausgeschaltet, wird keine Auswirkung sichtbar, wenn es angehalten wird)
Alt text

Sie können sehen, dass 图片1 erfolgreich offline angezeigt wurde, 图片2 jedoch nicht wie gewohnt angezeigt werden kann.

Jetzt möchte ich die Positionen von 图片2 und 图片1 ändern.

 
    <img src="/static/imghw/default1.png" data-src="image/HTML5-Offline-Speicherprinzip" class="lazy" alt=""> 
    <img src="/static/imghw/default1.png" data-src="image/HTML5-Offline-Speicherprinzip" class="lazy" alt=""> 
Nach dem Login kopieren

这时候发现问题来了,html明明修改了为什么图片没有置换过来呢,我不是在demo.appcache文件的NETWORK写了星号吗?除了CACHE MANIFEST文件其它都采用在线模式。查资料得知:引入manifest的页面,即使没有被列入缓存清单中,仍然会被用户代理缓存。
好吧,那我把.appcache文件更新下,于是乎把头部的版本号修改一下#v02。刷新下页面还是没反应!再刷新,有了!为什么?

  对于浏览器来说,manifest的加载是要晚于其他资源的. 这就导致check manifest的过程是滞后的.发现manifest改变.所有浏览器的实现都是紧随这做静默更新资源.以保证下次pv,应用到更新.

 

通过控制台我们能够窥探一二:

  • 第一次刷新,应用程序缓存更新准备事件,
    Alt text
  • 第二次刷新才会看到效果。
    Alt text

缓存立即执行

我们的产品已经更新了用户却要第二次进来才能够看到,这样用户体验也太差了吧,有什么方式能够解决呢?好在html5给javascript提供了相关的API。

API篇幅太多自行查看把,这里我晒下我测试成功的code:

<span style="color: #008080;"> 1</span> <span style="color: #008000;">/*</span><span style="color: #008000;">code1,简单粗暴的</span><span style="color: #008000;">*/</span>
<span style="color: #008080;"> 2</span> applicationCache.onupdateready = <span style="color: #0000ff;">function</span><span style="color: #000000;">(){
</span><span style="color: #008080;"> 3</span>   <span style="color: #000000;">applicationCache.swapCache();
</span><span style="color: #008080;"> 4</span>   <span style="color: #000000;">location.reload();
</span><span style="color: #008080;"> 5</span> <span style="color: #000000;">};
</span><span style="color: #008080;"> 6</span> <span style="color: #008000;">/*</span><span style="color: #008000;">code2,缓存公用方法</span><span style="color: #008000;">*/</span>
<span style="color: #008080;"> 7</span> <span style="color: #008000;">//</span><span style="color: #008000;"> var EventUtil = {</span>
<span style="color: #008080;"> 8</span> <span style="color: #008000;">//</span><span style="color: #008000;"> addHandler: function(element, type, handler) {</span>
<span style="color: #008080;"> 9</span> <span style="color: #008000;">//</span><span style="color: #008000;"> if (element.addEventListener) {</span>
<span style="color: #008080;">10</span> <span style="color: #008000;">//</span><span style="color: #008000;"> element.addEventListener(type, handler, false);</span>
<span style="color: #008080;">11</span> <span style="color: #008000;">//</span><span style="color: #008000;"> } else if (element.attachEvent) {</span>
<span style="color: #008080;">12</span> <span style="color: #008000;">//</span><span style="color: #008000;"> element.attachEvent(“on” + type, handler);</span>
<span style="color: #008080;">13</span> <span style="color: #008000;">//</span><span style="color: #008000;"> } else {</span>
<span style="color: #008080;">14</span> <span style="color: #008000;">//</span><span style="color: #008000;"> element["on" + type] = handler;</span>
<span style="color: #008080;">15</span> <span style="color: #008000;">//</span><span style="color: #008000;"> }</span>
<span style="color: #008080;">16</span> <span style="color: #008000;">//</span><span style="color: #008000;"> }</span>
<span style="color: #008080;">17</span> <span style="color: #008000;">//</span><span style="color: #008000;"> };</span>
<span style="color: #008080;">18</span> <span style="color: #008000;">//</span><span style="color: #008000;"> EventUtil.addHandler(applicationCache, “updateready”, function() { //缓存更新并已下载,要在下次进入页面生效</span>
<span style="color: #008080;">19</span> <span style="color: #008000;">//</span><span style="color: #008000;"> applicationCache.update(); //检查缓存manifest文件是否更新,ps:页面加载默认检查一次。</span>
<span style="color: #008080;">20</span> <span style="color: #008000;">//</span><span style="color: #008000;"> applicationCache.swapCache(); //交换到新的缓存项中,交换了要下次进入页面才生效</span>
<span style="color: #008080;">21</span> <span style="color: #008000;">//</span><span style="color: #008000;"> location.reload(); //重新载入页面</span>
<span style="color: #008080;">22</span> <span style="color: #008000;">//</span><span style="color: #008000;"> });</span>
Nach dem Login kopieren

code1一般用在页面加载时直接触发,而code2的方式可后期检查更新。

注意事项

  • 站点离线存储的容量限制是5M
  • 如果manifest文件,或者内部列举的某一个文件不能正常下载,整个更新过程将视为失败,浏览器继续全部使用老的缓存
  • 引用manifest的html必须与manifest文件同源,在同一个域下
  • 在manifest中使用的相对路径,相对参照物为manifest文件
  • CACHE MANIFEST字符串应在第一行,且必不可少
  • 系统会自动缓存引用清单文件的 HTML 文件
  • manifest文件中CACHE则与NETWORK,FALLBACK的位置顺序没有关系,如果是隐式声明需要在最前面
  • FALLBACK中的资源必须和manifest文件同源
  • 当一个资源被缓存后,该浏览器直接请求这个绝对路径也会访问缓存中的资源。
  • 站点中的其他页面即使没有设置manifest属性,请求的资源如果在缓存中也从缓存中访问
  • 当manifest文件发生改变时,资源请求本身也会触发更新

 

文章来源:http://www.codeceo.com/article/html5-cache.html

侵权删

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist der Zweck des & lt; Fortschritts & gt; Element? Was ist der Zweck des & lt; Fortschritts & gt; Element? Mar 21, 2025 pm 12:34 PM

Der Artikel erörtert den HTML & lt; Progress & gt; Element, Absicht, Styling und Unterschiede vom & lt; Meter & gt; Element. Das Hauptaugenmerk liegt auf der Verwendung & lt; Fortschritt & gt; Für Aufgabenabschluss und & lt; Meter & gt; für stati

Was ist der Zweck des & lt; datalist & gt; Element? Was ist der Zweck des & lt; datalist & gt; Element? Mar 21, 2025 pm 12:33 PM

Der Artikel erörtert den HTML & lt; Datalist & gt; Element, das die Formulare verbessert, indem automatische Vorschläge bereitgestellt, die Benutzererfahrung verbessert und Fehler reduziert werden.Character Count: 159

Ist HTML für Anfänger leicht zu lernen? Ist HTML für Anfänger leicht zu lernen? Apr 07, 2025 am 12:11 AM

HTML ist für Anfänger geeignet, da es einfach und leicht zu lernen ist und schnell Ergebnisse sehen kann. 1) Die Lernkurve von HTML ist glatt und leicht zu beginnen. 2) Beherrschen Sie einfach die grundlegenden Tags, um Webseiten zu erstellen. 3) hohe Flexibilität und kann in Kombination mit CSS und JavaScript verwendet werden. 4) Reiche Lernressourcen und moderne Tools unterstützen den Lernprozess.

Was ist der Zweck des & lt; Meter & gt; Element? Was ist der Zweck des & lt; Meter & gt; Element? Mar 21, 2025 pm 12:35 PM

Der Artikel erörtert das HTML & lt; Meter & gt; Element, verwendet zur Anzeige von Skalar- oder Bruchwerten innerhalb eines Bereichs und seine gemeinsamen Anwendungen in der Webentwicklung. Es differenziert & lt; Meter & gt; von & lt; Fortschritt & gt; und Ex

Was ist der Zweck des & lt; iframe & gt; Etikett? Was sind die Sicherheitsüberlegungen bei der Verwendung? Was ist der Zweck des & lt; iframe & gt; Etikett? Was sind die Sicherheitsüberlegungen bei der Verwendung? Mar 20, 2025 pm 06:05 PM

Der Artikel erörtert das & lt; iframe & gt; Der Zweck von Tag, externe Inhalte in Webseiten, seine gemeinsamen Verwendungen, Sicherheitsrisiken und Alternativen wie Objekt -Tags und APIs einzubetten.

Was ist das Ansichtsfenster -Meta -Tag? Warum ist es wichtig für reaktionsschnelles Design? Was ist das Ansichtsfenster -Meta -Tag? Warum ist es wichtig für reaktionsschnelles Design? Mar 20, 2025 pm 05:56 PM

In dem Artikel wird das Ansichtsfenster -Meta -Tag erörtert, das für das reaktionsschnelle Webdesign auf mobilen Geräten unerlässlich ist. Es wird erläutert, wie die ordnungsgemäße Verwendung eine optimale Skalierung von Inhalten und Benutzerinteraktion gewährleistet, während Missbrauch zu Design- und Zugänglichkeitsproblemen führen kann.

Die Rollen von HTML, CSS und JavaScript: Kernverantwortung Die Rollen von HTML, CSS und JavaScript: Kernverantwortung Apr 08, 2025 pm 07:05 PM

HTML definiert die Webstruktur, CSS ist für Stil und Layout verantwortlich, und JavaScript ergibt eine dynamische Interaktion. Die drei erfüllen ihre Aufgaben in der Webentwicklung und erstellen gemeinsam eine farbenfrohe Website.

Was ist ein Beispiel für ein Start -Tag in HTML? Was ist ein Beispiel für ein Start -Tag in HTML? Apr 06, 2025 am 12:04 AM

AnexampleofaTartingTaginHtmlis, die, die starttagsaresesinginhtmlastheyinitiateElements, definetheirtypes, andarecrucialForstructuringwebpages und -konstruktionsthedoms.

See all articles