検索
ホームページウェブフロントエンドH5 チュートリアルHTML5 での Localstorage の使用に関するチュートリアル_html5 チュートリアル スキル

ローカルストレージとは

数日前、古いプロジェクトで Cookie の動作が非常に奇妙なことに気づきました。相談した結果、URL にパラメータを渡さないように情報をキャッシュしたいと思いましたが、Cookie が引き起こす問題については考慮していませんでした。原因:

① Cookie のサイズは約 4k に制限されており、ビジネスデータの保存には適していません
② Cookie は毎回 HTTP トランザクションと一緒に送信されるため、帯域幅が無駄に消費されます

私たちはモバイルプロジェクトを行っているため、ここで使用するのに本当に適したテクノロジーはローカルストレージです。ローカルストレージは、クライアント上にデータを保存するために使用でき、データは送信されません。 HTTP ですが、問題ありません:

① localstorage のサイズは約 500 万文字に制限されており、異なるブラウザでは一貫性がありません
② Localstorage はプライバシー モードでは読み取れません
③ localstorage の本質は、ファイルがあれば読み書きすることです。データが大量にあるとスタックしてしまいます (Firefox は一度にデータをメモリにインポートすることを考えると恐ろしいです)
④ localstorage はクローラーによってクロールされません。URL パラメーターの受け渡しを完全に置き換える目的で使用しないでください

欠点は利点を隠すものではありません。上記の問題は回避できるため、ローカルストレージの使用方法とそれを正しく使用する方法に重点を置く必要があります。
localstorageの使い方
基礎知識

localstorage ストレージ オブジェクトには 2 つのタイプがあります:

① sessionStrage: セッションとは、ユーザーがウェブサイトを閲覧する際に、ウェブサイトにアクセスしてからウェブサイトを閉じるまでの期間を指します。セッションオブジェクトの有効期間はごくわずかです。

② localStorage: データが何であれ、クライアント ハードウェア デバイスにデータを保存します。これは、次回コンピューターの電源を入れたときにもデータがまだそこにあることを意味します。

2 つの違いは、1 つは一時保管用で、もう 1 つは長期保管用であることです。

基本的な使用法を示す簡単なコードを次に示します。

XML/HTML コードコンテンツをクリップボードにコピー
  1. div id="msg" スタイル="margin: 10px 0; border: 1px solid black; padding: 10px; width: 300px;
  2. 高さ: 100px;">
  3. div>
  4. 入力 type="テキスト" id="テキスト" />
  5. select id="type" >
  6. オプション ="セッション" >セッションストレージオプション>
  7. オプション ="ローカル" >localStorageオプション>
  8. 選択>
  9. ボタン クリック="save( );">
  10. データ保存ボタン>
  11. ボタン onclick="load( );">
  12. 读取数据ボタン>
  13. スクリプト type="text/ javascript">
  14. var msg = ドキュメント.getElementById('msg'),
  15. テキスト = ドキュメント.getElementById('text'),
  16. タイプ = ドキュメント.getElementById('type');   
  17. 関数 save() {
  18. var str = text.value;   
  19. var t = type.value;   
  20. if (t == 'セッション') {
  21. sessionStorage.setItem('msg', str);   
  22. } else {
  23. localStorage.setItem('msg', str);   
  24. }
  25. }
  26. 関数 load() {
  27. var t = type.value;   
  28. if (t == 'セッション') {
  29. msg.innerHTML = sessionStorage.getItem('msg');   
  30. } else {
  31. msg.innerHTML = localStorage.getItem('msg');   
  32. }
  33. }
  34. スクリプト>

真实场景

实际作業中におけるローカルストレージの使用一般には以下の要件があります:

①缓存一般信息,如搜索页的出城市,到城市,非实時定位信息

② 缓存城市列表データベース、这个データ往往比较大

③每条缓存信息要可追跡,比如服务器通知城市データ更新,这時候最近访问的時候要自动設置过期

④ 每条信息有期日期状態态,期期外時間期間需要服务器拉取データ

XML/HTML コード复制コンテンツ到剪贴板
  1. define([], function () {
  2. var ストレージ = _.inherit({
  3. //デフォルト属性
  4. プロパティ: function () {
  5. //プロキシ オブジェクト、デフォルトは localstorage
  6. this.sProxy = ウィンドウ.localStorage;
  7. //60 * 60 * 24 * 30 * 1000
  8. ms ==30 日
  9. this.defaultLifeTime = 2592000000 ;
  10. //ローカル キャッシュは、すべての localstorage キー値と有効期限間のマッピングを保存するために使用されます
  11. this.keyCache
  12. = 'SYSTEM_KEY_TIMEOUT_MAP' ;
  13. //キャッシュ容量がいっぱいになった場合、毎回削除されるキャッシュの数
  14. this.removeNum
  15. =
  16. 5; }、
  17. アサート: function () {
  18. if (
  19. this.sProxy
  20. === null) {
  21. throw 'sProxy プロパティをオーバーライドしません' ; }
  22. }、
  23. 初期化: function (opts) {
  24. this.propertys();
  25. this.assert();
  26. }、
  27. /*
  28. ローカルストレージを追加
  29. データ形式には、一意のキー値、JSON 文字列、有効期限、入金日が含まれます
  30. 記号は書式設定されたリクエスト パラメータで、同じリクエストに異なるパラメータがある場合に新しいデータを返すために使用されます。たとえば、リストが北京市であった場合に上海に切り替わった場合、タグであると判断されます。は異なり、キャッシュされたデータを更新します。タグは署名
  31. と同等です。
  32. 各キー値に対して 1 つの情報のみがキャッシュされます
  33. */
  34. set: 関数 (キー、値、タイムアウト、符号) {
  35. var _d = 新しい Date();
  36. //入金日
  37. var
  38. indate = _d.getTime();
  39. //最後にデータを保存しました
  40. var
  41. エンティティ
  42. = null;
  43. if (!timeout) {
  44. _d.setTime(_d.getTime() this.defaultLifeTime);
  45. タイムアウト
  46. =
  47. _d.getTime(); }
  48. //
  49. this.setKeyCache(キー, タイムアウト)
  50. エンティティ
  51. =
  52. this
  53. .buildStorageObj(値、更新、タイムアウト、符号); > 試してみましょう {
  54. this.sProxy.setItem(key, JSON.stringify(entity));
  55. true を返します。
  56. } catch (e) {
  57. //ローカルストレージがいっぱいになったら、すべてクリアします
  58. if (
  59. e.name
  60. == 'QuotaExceededError') {
  61. // this.sProxy.clear();
  62. //ローカルストレージがいっぱいの場合、有効期限に最も近いデータを選択して削除します。これも多少の影響はありますが、キャッシュが多すぎる場合は、このプロセスがすべてクリアされるよりも良いと感じます。 100 ミリ秒以内に、さらに時間がかかります
  63. if (!this.removeLastCache()) throw '今回保存されたデータの量が多すぎます';
  64. this.set(キー、値、タイムアウト、符号);
  65. コンソール && console.log(e);
  66. }
  67. は false を返します。
  68. }、
  69. //期限切れのキャッシュを削除
  70. RemoveOverdueCache: function () {
  71. var tmpObj = null, i, len;
  72. var
  73. now = new Date().getTime(); //キーと値のペアを取得します
  74. var
  75. cacheStr
  76. = this.sProxy.getItem(this.keyCache); var cacheMap
  77. = [];
  78. var newMap = [];
  79. if (!cacheStr) {
  80. 戻る
  81. }
  82. cacheMap
  83. =
  84. JSON
  85. .parse(cacheStr);
  86. for (i =
  87. 0
  88. ,
  89. len
  90. = cacheMap.length; i len; > tmpObj = cacheMap[i]; if (tmpObj.timeout
  91. now) { this.sProxy.removeItem(tmpObj.key);
  92. } else { newMap.push(tmpObj);
  93. }
  94. this.sProxy.setItem(this.keyCache, JSON.stringify(newMap));
  95. }、
  96. RemoveLastCache: function () {
  97. 変数 i、レン
  98. var num = this.removeNum ||
  99. //キーと値のペアを取得します
  100. var cacheStr = this.sProxy.getItem(this.keyCache);
  101. var
  102. cacheMap = []; var
  103. delMap
  104. = [];
  105. //ストレージが大きすぎることを示します
  106. if (!cacheStr) が false を返す
  107. cacheMap.sort(function (a, b) {
  108. a.timeout - b.timeout を返します
  109. });
  110. //削除されたデータ
  111. delMap
  112. =
  113. cacheMap.splice(0, num); for (i =
  114. 0
  115. , len = delMap.length; i len; > this.sProxy.removeItem(delMap[i].key); }
  116. this.sProxy.setItem(this.keyCache, JSON.stringify(cacheMap));
  117. true を返します。
  118. }、
  119. setKeyCache: function (key, timeout) {
  120. if (!key || !timeout || timeout
  121. new
  122. Date().getTime( )) 戻る; var i、len、tmpObj;
  123. //現在キャッシュされているキー値文字列を取得します
  124. var oldstr
  125. = this
  126. .sProxy.getItem(this.keyCache); var oldMap = []; //現在のキーがすでに存在するかどうか
  127. var フラグ = false
  128. ; var
  129. obj = {};   
  130. obj.key = キー;   
  131. obj.timeout = タイムアウト;   
  132. if (oldstr) {
  133. oldMap = JSON.parse(oldstr);   
  134. if (!_.isArray(oldMap)) oldMap = [];   
  135. }
  136. for (i = 0, len = oldMap.length; i len; i ) {
  137. tmpObj = oldMap[i];   
  138. if (tmpObj.key == key) {
  139. oldMap[i] = obj;   
  140. フラグ = true;   
  141. 休憩;   
  142. }
  143. }
  144. if (!flag) oldMap.push(obj);   
  145. //最後将新数组を缓存中に放出
  146. this.sProxy.setItem(this.keyCache, JSON.stringify(oldMap));   
  147. }、
  148. buildStorageObj: function (value, indate, timeout, sign) {
  149. var obj = {
  150. 値: 値、
  151. タイムアウト: タイムアウト、
  152. 記号: 記号、
  153. indate: indate
  154. };   
  155. オブジェクトを返す;   
  156. }、
  157. get: function (key,sign) {
  158. var result、now = new Date().getTime();
  159. 試してみましょう {
  160. 結果 = この.sProxy.getItem(key); if (!result) が null を返す
  161. 結果
  162. = JSON.parse(結果);
  163. //データの有効期限
  164. if (result.timeout
  165. now)
  166. //署名検証が必要です
  167. if (符号) {
  168. if (
  169. sign
  170. === result.sign)
  171. 結果の値を返します
  172. null を返します。
  173. } else {
  174. 結果の値を返します
  175. } catch (e) {
  176. コンソール && console.log(e);
  177. }
  178. null を返します。
  179. }、
  180. //署名を取得
  181. getSign: function (key) {
  182. var 結果、
  183. sign
  184. =
  185. null
  186. ;
  187. 試してみましょう { 結果 =
  188. この
  189. .sProxy.getItem(key);
  190. if (結果) {
  191. 結果 = JSON
  192. .parse(結果);
  193. sign
  194. = result && result.sign
  195. } catch (e) {
  196. コンソール && console.log(e); }  
  197. リターン 記号;   
  198. }、
  199. 削除: 関数 (キー) {
  200. return this.sProxy.removeItem(key);   
  201. }、
  202. clear: function () {
  203. this.sProxy.clear();   
  204. }
  205. });   
  206. Storage.getInstance = 関数 () {
  207. if (this.instance) {
  208. this.instance を返す;   
  209. } else {
  210. return this.instance = new this();   
  211. }
  212. };   
  213. ストレージを返す;   
  214. });  

このセグメントコードにはローカルストレージの基本的な操作が含まれており、上記の処理が実行されているため、実際の使用はさらに抽象化されます:

XML/HTML コード复制コンテンツ到剪贴板
  1. define(['AbstractStorage'], function (AbstractStorage) {
  2. var ストア = _.inherit({
  3. //デフォルト属性
  4. プロパティ: function () {
  5. //各オブジェクトにはストレージ キーが必要であり、繰り返すことはできません
  6. this.key = null;
  7. //データのデフォルトのライフサイクル、S は秒、M は分、D は日
  8. this.lifeTime = '30M';
  9. //デフォルトの戻りデータ
  10. //
  11. this.defaultData
  12. = null;
  13. //プロキシ オブジェクト、ローカルストレージ オブジェクト
  14. this.sProxy
  15. =
  16. new AbstractStorage(); }、
  17. setOption: 関数 (オプション) {
  18. _.extend(this, options)
  19. ;
  20. }、
  21. アサート: function () {
  22. if (
  23. this.key
  24. === null) {
  25. 'キープロパティを上書きしない' をスローします ; }
  26. if (
  27. this.sProxy
  28. === null) {
  29. throw 'sProxy プロパティをオーバーライドしません' ; }
  30. }、
  31. 初期化: function (opts) {
  32. this.propertys();
  33. this.setOption(opts);
  34. this.assert();
  35. },
  36. _getLifeTime: function () {
  37. var タイムアウト = 0;   
  38. var str = this.lifeTime;   
  39. var unit = str.charAt(str.length - 1);   
  40. var num = str.substring(0, str.length - 1);   
  41. var 地図 = {
  42. D: 86400,
  43. H: 3600、
  44. M: 60,
  45. S: 1
  46. };   
  47. if (typeof unit == 'string') {
  48. ユニットユニット = unit.toUpperCase();   
  49. }
  50. タイムアウト = num;   
  51. if (unit) timeout = Map[unit];   
  52. //单位は毫秒
  53. return num * timeout * 1000 ;   
  54. }、
  55. //缓存データ
  56. set: 関数 (値, 符号) {
  57. //获取过期時間
  58. var timeout = new Date();   
  59. timeout.setTime(timeout.getTime() this._getLifeTime());   
  60. this.sProxy.set(this.key, value, timeout.getTime(), sign);   
  61. }、
  62. //设置单个プロパティ
  63. setAttr: function (name, value, sign) {
  64. var key, obj;   
  65. if (_.isObject(name)) {
  66. for (名前のキー) {
  67. if (name.hasOwnProperty(key)) this.setAttr(k, name[k], value);   
  68. }  
  69. 戻る;   
  70. }
  71. if (!sign) sign = this.getSign();   
  72. //获取当前对象
  73. obj = this.get(sign) || {};   
  74. if (!obj) return;   
  75. obj[名前] = 値;   
  76. this.set(obj, sign);   
  77. }、
  78. getSign: function () {
  79. return this.sProxy.getSign(this.key);   
  80. }、
  81. 削除: function () {
  82. this.sProxy.remove(this.key);   
  83. }、
  84. removeAttr: function (attrName) {
  85. var obj = this.get() || {};   
  86. if (obj[attrName]) {
  87. obj[attrName] を削除します。   
  88. }
  89. this.set(obj);   
  90. }、
  91. get: function (sign) {
  92. var 結果 = [],isEmpty = true、a;   
  93. var obj = this.sProxy.get(this.key, sign);   
  94. var type = typeof obj;   
  95. var o = { 'string': true, 'number': true, 'boolean': true };   
  96. if (o[type]) return obj;   
  97. if (_.isArray(obj)) {
  98. for (var i = 0, len = obj.length; i len; i ) {
  99. 結果[i] = obj[i];   
  100. }  
  101. } else if (_.isObject(obj)) {
  102. 結果 = obj;   
  103. }
  104. for (a in result) {
  105. isEmpty = false;   
  106. 休憩;   
  107. }
  108. return !isEmpty ? 結果: null;   
  109. }、
  110. getAttr: function (attrName, tag) {
  111. var obj = this.get(tag);   
  112. var attrVal = null;   
  113. if (obj) {
  114. attrVal = obj[attrName];   
  115. }
  116. return attrVal;   
  117. }
  118. });   
  119. Store.getInstance = 関数 () {
  120. if (this.instance) {
  121. this.instance を返す;   
  122. } else {
  123. return this.instance = new this();   
  124. }
  125. };   
  126. ストアに戻る;   
  127. });  

我们真实使用的時候是使用store这个类操作localstorage,代码结束简单测试:
201579150514318.jpg (488×184)

保存完了、以後ずっと実行要求なし、今日の代コード基本終了、最後に Android ハイブリッド内に後退錉があり、この钮が下に来ると上の 1 つの面に戻り、今度は気候の面のローカルストレージが读取される可能性があります失效! 一つの解決策はウェブアプリに追加されています:

XML/HTML コード复制コンテンツ到剪贴板
  1. window.onunload = function () { };//适合单页应用、不要问我は物么、我也不知道

结语

localstorage は移動開墾必需的技术点,深深理解が必要,特定の务代コード後续会が git 上に放り出す,有関心な友友可去知

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
H5:HTML5の重要な改善H5:HTML5の重要な改善Apr 28, 2025 am 12:26 AM

HTML5は5つの重要な改善をもたらします。1。セマンティックタグにより、コードの明確性とSEO効果が向上します。 2.マルチメディアサポートは、ビデオとオーディオの埋め込みを簡素化します。 3。フォームエンハンスメントは、検証を簡素化します。 4.オフラインおよびローカルストレージにより、ユーザーエクスペリエンスが向上します。 5。キャンバスとグラフィック機能は、Webページの視覚化を強化します。

HTML5:標準とWeb開発への影響HTML5:標準とWeb開発への影響Apr 27, 2025 am 12:12 AM

HTML5のコア機能には、セマンティックタグ、マルチメディアサポート、オフラインストレージ、ローカルストレージ、フォームエンハンスメントが含まれます。 1。コードの読みやすさとSEO効果を改善するためのセマンティックタグなど。 2.ラベルでマルチメディアの埋め込みを簡素化します。 3。アプリケーションキャッシュやLocalStorageなどのオフラインストレージとローカルストレージは、ネットワークのない操作とデータストレージをサポートします。 4.フォームエンハンスメントでは、処理と検証を簡素化するための新しい入力タイプと検証プロパティを導入します。

H5コードの例:実用的なアプリケーションとチュートリアルH5コードの例:実用的なアプリケーションとチュートリアルApr 25, 2025 am 12:10 AM

H5は、さまざまな新機能と機能を提供し、フロントエンド開発の機能を大幅に向上させます。 1.マルチメディアサポート:メディアを埋め込んで要素を埋め込み、プラグインは必要ありません。 2。キャンバス:要素を使用して、2Dグラフィックとアニメーションを動的にレンダリングします。 3。ローカルストレージ:ユーザーエクスペリエンスを改善するために、ローカルストレージとセッションストレージを介して永続的なデータストレージを実装します。

H5とHTML5の接続:類似性と相違点H5とHTML5の接続:類似性と相違点Apr 24, 2025 am 12:01 AM

H5とHTML5は異なる概念です。HTML5は、新しい要素とAPIを含むHTMLのバージョンです。 H5は、HTML5に基づくモバイルアプリケーション開発フレームワークです。 HTML5はブラウザを介してコードを解析およびレンダリングしますが、H5アプリケーションはコンテナを実行し、JavaScriptを介してネイティブコードと対話する必要があります。

H5コードの構成要素:キー要素とその目的H5コードの構成要素:キー要素とその目的Apr 23, 2025 am 12:09 AM

HTML5の重要な要素には、最新のWebページの構築に使用される、、,,,,などが含まれます。 1.ヘッドコンテンツを定義します。2。リンクをナビゲートするために使用されます。3。独立した記事のコンテンツを表します。4。ページコンテンツを整理します。5。サイドバーコンテンツを表示します。

HTML5およびH5:一般的な使用法の理解HTML5およびH5:一般的な使用法の理解Apr 22, 2025 am 12:01 AM

HTML5とHTML5の略語であるHTML5とH5の間に違いはありません。 1.HTML5はHTMLの5番目のバージョンであり、Webページのマルチメディア関数とインタラクティブ機能を強化します。 2.H5は、HTML5ベースのモバイルWebページまたはアプリケーションを参照するためによく使用され、さまざまなモバイルデバイスに適しています。

HTML5:現代のウェブのビルディングブロック(H5)HTML5:現代のウェブのビルディングブロック(H5)Apr 21, 2025 am 12:05 AM

HTML5は、W3Cによって標準化されたHyperText Markup言語の最新バージョンです。 HTML5は、新しいセマンティックタグ、マルチメディアサポート、フォームの強化、Web構造の改善、ユーザーエクスペリエンス、SEO効果を導入します。 HTML5は、Webページ構造をより明確にし、SEO効果をより良くするために、、、、、、などの新しいセマンティックタグを導入します。 HTML5はマルチメディア要素をサポートしており、サードパーティのプラグインは不要で、ユーザーエクスペリエンスと読み込み速度が向上します。 HTML5はフォーム関数を強化し、ユーザーエクスペリエンスを向上させ、フォーム検証効率を向上させるなどの新しい入力タイプを導入します。

H5コード:クリーンで効率的なHTML5の書き込みH5コード:クリーンで効率的なHTML5の書き込みApr 20, 2025 am 12:06 AM

クリーンで効率的なHTML5コードを書き込む方法は?答えは、タグのセマンティック、構造化されたコード、パフォーマンスの最適化、一般的な間違いを回避することにより、一般的な間違いを避けることです。 1.コードの読みやすさとSEO効果を改善するには、セマンティックタグなどを使用します。 2。適切なインデントとコメントを使用して、コードを構造化して読みやすいままにします。 3.不必要なタグを減らし、CDNを使用してコードを圧縮することにより、パフォーマンスを最適化します。 4.タグが閉じていないなどの一般的な間違いを避け、コードの有効性を確認してください。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン