この記事は主に HTML5 保存方法の概要を共有するものであり、HTML5 開発者に役立ち、誰もが HTML5 保存方法をよりよく習得できることを願っています。
Cookieは急激に増加します
ローカルストレージlocalstorage
セッションストレージ
オフラインキャッシュ(アプリケーションキャッシュ)
Web SQL
IndexedDB
HTML5
が出現する前は、野蛮な時代の野蛮な成長と同じように、Cookie
がクライアント ストレージの世界全体を占めていました。実際のアプリケーションのニーズを適切かつ迅速に解決します。しかし、その問題も明らかです。cookie
はリクエスト ヘッダーにデータを運びます。また、サイズは 4K に制限されています。これは非常に安全ではなく、外部から簡単に傍受されます。 >ドメイン汚染。 HTML5
出现之前,Cookies
便占据了客户端存储的整个江山,就像是蛮荒时代的野蛮生长,cookies
很好、快速地满足实际应用的需求。但是它的问题也很明显,cookies
会在请求头上带着数据,而且大小限制在4K以内,这是非常不安全的,容易被外部截取,还存在domain
污染。
IE
浏览器特别喜欢搞自己的一套,对于增加存储容量加入了UserData
,大小是64K
,但是其他浏览器不喜欢跟它玩,也就只有它自己一家支持。
那么,重点来了。既然cookies
问题那么多,就要想办法解决,不然没法继续往前发展。首先要确认它的问题有哪些,然后根据这些问题寻找解决方案。
解决4K
存储容量问题
解决请求头带有存储信息的问题,也就是增加安全性,通过加密通道或方式进行数据存储和传输
解决关系型存储的问题
跨浏览器
存储方式
以键值对(key-value)的方式存储,永久存储,永不失效,除非手动删除。
存储容量
每个域名5M
。
常用的API
getItem
//取记录
setItem
//设置记录
removeItem
//移除记录
key
//取key
所对应的值
clear
//清除记录
HTML5
的本地存储API
中的localstorage
与sessionstorage
在使用方法上是相同的,区别在于sessionstorage
在关闭页面后即被清空,而localstorage
则会一直保存,除非手动删除。
本地缓存应用所需的文件
使用方法
1、配置manifest
文件
页面上:
<!DOCTYPE HTML> <html manifest="demo.appcache"> ... </html>
manifest
文件:
manifest
是最简单的文本文件,它告知浏览器被缓存的内容(以及不缓存的内容)。
manifest
文件分为三个部分:
CACHE MANIFEST
-在此标题下列出的文件将在首次下载后进行缓存
NETWOrK
-在此标题下的文件需要与服务器进行连接,且不会被缓存
FALLBACK
-在此标题下的文件规定当页面无法被访问时的回退页面(比如404
页面)
完整demo
CACHE MANIFEST # 2016-07-24 v1.0.0 /theme.css /main.js NETWORK: login.jsp FALLBACK: /html/ /offline.html
服务器上:manifest
文件需要配置正确的MIME-type
,即text/cache-manifest
。
常用API
核心是applicationCache
对象,有个status
属性,表示应用缓存的当前状态:
0 (UNCACHED)
:无缓存,没有和页面相关的应用缓存
1 (IDLE)
:闲置,应用缓存没有得到更新
2 (CHECKING)
:检查中,正在下载描述文件并检查更新
3 (DOWNLOADING)
:下载中,应用缓存正在下载与描述文件中指定的资源
4 (UPDATEREADY)
:更新完成,所有资源都已经下载完毕
5 (IDLE)
:废弃,应用缓存的描述文件已经不存在了,因此页面无法再访问应用缓存
相关事件
表示应用缓存状态的改变:
checking
:在浏览器为应用缓存查找更新时触发
error
:在检查更新或下载资源期间发生错误时触发
noupdate
:在检查描述文件发现文件无变化时触发
downloading
:在开始下载应用缓存资源时触发
progress
:在文件下载应用缓存的过程中持续不断地下载时触发
updateready
:在页面新的应用缓存下载完毕时触发
cached
:在应用缓存完整可用时触发
application cache
IE
ブラウザは特に独自のスタイルを作成することを好み、ストレージ容量を増やすために UserData
が追加されますが、他のブラウザではサイズが 64K
になります。あなたがそれで遊ぶのが好きではない場合、それはあなたをサポートするだけです。
cookie
には非常に多くの問題があるため、それらを解決する方法を見つけなければ、先に進むことができません。まず問題を特定し、次にそれらの問題に基づいて解決策を見つけます。 🎜4K
ストレージ容量の問題を解決します🎜🎜🎜🎜 ストレージ情報を含むリクエスト ヘッダーの問題を解決します。つまり、暗号化されたチャネルを通じてセキュリティを強化しますまたはデータの保存と送信の方法🎜🎜🎜🎜リレーショナルストレージの問題の解決🎜🎜🎜🎜クロスブラウザ🎜🎜5M
。 🎜🎜よく使われる API 🎜🎜🎜getItem
// レコードを取得 🎜🎜setItem
// レコードを設定 🎜🎜removeItem
// 移動レコードを削除します🎜🎜key
//key
に対応する値を取得します🎜🎜clear
//レコードをクリアします🎜🎜ローカルストレージセッションストレージ🎜🎜HTML5 のローカルストレージ API
の localstorage
と sessionstorage
の使用方法は同じですが、違いは sessionstorage はページを閉じるとクリアされますが、localstorage
は手動で削除しない限り常に保存されます。 🎜🎜オフライン キャッシュ (アプリケーション キャッシュ) 🎜🎜 アプリケーションに必要なローカル キャッシュ ファイル 🎜🎜使用方法 🎜🎜🎜1. manifest
ファイルを設定します 🎜🎜 ページで: 🎜var db = openDatabase('mydb', '1.0', 'TEST DB', 2 * 1024 * 1024, fn);
manifest
ファイル: 🎜🎜🎜manifest
は、何がキャッシュされているか (何がキャッシュされていないのか) をブラウザに伝える最も単純なテキスト ファイルです。 🎜🎜マニフェスト
ファイルは 3 つの部分に分かれています: 🎜🎜🎜🎜🎜CACHE MANIFEST
- この見出しの下にリストされているファイルは、最初のダウンロード後にキャッシュされます 🎜 🎜🎜 🎜NETWOrK
- このタイトルのファイルはサーバーへの接続が必要であり、キャッシュされません🎜🎜🎜🎜FALLBACK
- このタイトルのファイルには、フォールバック ページが必要です。ページにアクセスできません (404
ページなど) 🎜🎜🎜🎜完全な demo
🎜🎜var db = openDatabase('mydb', '1.0', 'TEST DB', 2 * 1024 * 1024); db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS WIN (id unique, name)'); })
manifest
ファイルは、正しい MIME タイプ
、つまり text/cache-manifest
で構成する必要があります。 🎜🎜一般的に使用される API
🎜🎜🎜 コアは applicationCache
オブジェクトで、このオブジェクトには status
属性があり、現在のステータスを示します。アプリケーション キャッシュ: 🎜🎜 0 (UNCACHED)
: キャッシュなし、ページに関連するアプリケーション キャッシュはありません🎜🎜1 (IDLE)
: アイドル、アプリケーション キャッシュはあります更新されていません🎜🎜2 (CHECKING)
: 説明ファイルを確認、ダウンロードし、更新を確認しています🎜🎜3 (DOWNLOADING)
: ダウンロード中、アプリケーション キャッシュがリソースをダウンロードしています説明ファイルで指定されています🎜🎜 4 (UPDATEREADY)
: 更新が完了し、すべてのリソースがダウンロードされました🎜🎜5 (IDLE)
: 放棄されました、アプリケーションキャッシュ記述ファイルはもう存在しないため、ページはアプリケーション キャッシュにアクセスできなくなります。 🎜🎜関連イベント 🎜🎜🎜 は、アプリケーション キャッシュの状態の変化を表します: 🎜🎜checking
: ブラウザが更新を探すときにトリガーされます。アプリケーション キャッシュへの書き込み🎜🎜error
: 更新の確認またはリソースのダウンロード中にエラーが発生したときにトリガーされます🎜🎜noupdate
: 説明ファイルをチェックし、ファイルに変更なし🎜🎜downloading
: アプリケーション キャッシュ リソースのダウンロードを開始するとき トリガー🎜🎜progress
: ファイル ダウンロード アプリケーション キャッシュのダウンロードが継続するとトリガーされます🎜🎜updateready code>: ページ上の新しいアプリケーション キャッシュがダウンロードされたときにトリガーされます🎜🎜cached
: アプリケーション キャッシュが完全に利用可能になったときにトリガーされます 🎜🎜アプリケーション キャッシュ
の 3 つの利点>: 🎜🎜离线浏览
提升页面载入速度
降低服务器压力
注意事项:
浏览器对缓存数据的容量限制可能不太一样(某些浏览器设置的限制是每个站点5M
)
如果是manifest
文件,或者内部列举的某一个文件不能正常下载,整个更新过程将视为失败,浏览器继续全部使用旧的缓存
引用manifest
的html
必须与manifest
文件同源,在同一个域下
浏览器会自动缓存引用manifest
文件的html
文件,这就导致了如果更改了html
内容,也需要更新版本才能做到最新
manifest
文件中的CACHE
与NETWOrK
、FALLBACK
的位置顺序没有关系,如果是隐式声明需要在最前面
FALLBACK
中的资源必须和manifest
文件同源
更新完版本后,必须刷新一次才会启动新版本(会出现重刷一次页面的情况),需要添加监听版本事件
站点中的其他页面即使没有设置manifest
属性,请求的资源如果在缓存中也从缓存中访问
当manifest
文件发生改变时,资源请求本身也会触发更新
离线缓存和传统浏览器缓存的区别
离线缓存是针对整个应用,浏览器缓存是单个文件
离线缓存可以主动通知浏览器更新资源
Web SQL
数据库API
并不是HTML5
规范的一部分,但它是一个独立的规范,引入了一组使用SQL
操作客户端数据库的APIs
。
核心方法
openDatabase
:使用现有的数据库或新建的数据库创建一个数据库对象
transaction
: 控制一个事务,以及基于这种情况执行提交或回滚
executeSql
:用于执行实际的SQL
查询
打开数据库
var db = openDatabase('mydb', '1.0', 'TEST DB', 2 * 1024 * 1024, fn);
执行查询操作
var db = openDatabase('mydb', '1.0', 'TEST DB', 2 * 1024 * 1024); db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS WIN (id unique, name)'); })
插入数据
注:博客主题里的代码块样式
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024); db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS WIN (id unique, name)'); tx.executeSql('INSERT INTO WIN (id, name) VALUES (1, "winty")'); tx.executeSql('INSERT INTO WIN (id, name) VALUES (2, "LuckyWinty")'); });
注:需要实现的代码块样式,这个是 markdowpad2 里的操作,也是很多markdown写作工具提供的操作,只需要按一下 tab 键,非常方便
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024); db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS WIN (id unique, name)'); tx.executeSql('INSERT INTO WIN (id, name) VALUES (1, "winty")'); tx.executeSql('INSERT INTO WIN (id, name) VALUES (2, "LuckyWinty")'); });
读取数据
db.transaction(function (tx) { tx.executeSql('SELECT * FROM WIN', [], function (tx, results) { var len = results.rows.length, i; msg = "<p>查询记录条数: " + len + "</p>"; document.querySelector('#status').innerHTML += msg; for (i = 0; i < len; i++){ alert(results.rows.item(i).name ); } }, null); });
索引数据库(IndexedDB
)API
(作为HTML5
的一部分)对创建具有丰富本地存储数据的数据密集型的离线HTML5 Web
应用程序很有用,同时它还有助于本地缓存数据,使传统在线Web
应用程序(比如移动Web
应用程序)能够快速的运行和响应。
异步API
在IndexedDB
大部分操作并不是我们常用的调用方法(返回结果的模式),而是(请求-响应模式),比如打开数据库的操作。
相关推荐:
以上がHTML5の保存方法のまとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。