Webオフラインストレージのいくつかの方法

12006 ワード


HTML 5の正式な原稿決定に伴い、HTMLオフラインネットワークアプリケーションの特性を大量に使用することもできます.
#1、Application Cache
Application Cacheは簡単にWebAppをオフラインにすることができます.
サポートするブラウザ:IE 10+,FireFox,Chrome,Safari,Opera
メリット:
  • オフラインブラウズ--ユーザーが再オフラインできる場合にApplication
  • を使用します.
  • 速度--リソースがキャッシュされているため、ロードが速い場合は
  • サービス・エンド・データ・ローディングの削減--ブラウザは、更新されたデータ
  • をサーバからロードするだけです.
    欠点:
  • Manifestファイルが変更された場合にのみ
  • が更新されます.
  • Manifestのすべてのファイルを一度に更新する必要があります.次は
  • が有効になります.
    使用方法
    Step 1:html上でmanifestファイル(index.html)を指定する
    <html manifest="appCacheList.manifest">
    
    </html>
    
    

    Step 2:manifestファイルの内容を設定する(appCache.manifest)
    CACHE MANIFEST
    
    
    
    #        
    
    ./all.css
    
    ./1.jpg
    
    ./index.js
    
    
    
    # NETWORK:*,           
    
    NETWORK:
    
    *
    
    
    
    #    uri   ,    fallback
    
    FALLBACK:
    
    /html/ /offline.html
    
    

    キャッシュの手動更新:
    if ( window.applicationCache.status == window.applicationCache.UPDATEREADY ){
    
        window.applicationCache.update();
    
    }
    
    

    注意:
  • 異なるブラウザでは、Application Cacheのサイズが一致しません.注意してください.
  • 詳細については、http://kayosite.com/web-app-by-jquery-mobile-and-html5-offline-web-applications.html
  • を参照してください.
    #2、Local Storage
    Local Storageでは、ブラウザにデータを保存できます.
    サポートするブラウザ:IE 10+,FireFox,Chrome,Safari,Opera
    メリット:
  • 容量大
  • 使いやすい
  • 強力
  • 原生サポート
  • はローカルのみであり、サーバと対話することはありません.
    欠点:
  • ブラウザ互換性差
  • セキュリティが悪い(機密データを格納しない)
  • 使用方法
    まず、ブラウザがLocal Storageをサポートしているかどうかをwindow.localStorageで判断します.次に、この方式にはブラウザ互換性があるため、共通のライブラリを使用して互換性を遮断することをお勧めします.
    //         ,       ,         。
    
    (function(window){
    
      if(!window.localStorage){
    
        throw new Error('Your brower can\'t support local storage!');
    
      }
    
      var ls = window.localStorage;
    
      var localStorageKit = {
    
        getLength: function(){
    
          return ls.length;
    
        },
    
        clear: function(){
    
          ls.clear();
    
          return true;
    
        },
    
        set: function(k, v){
    
          ls.setItem(k, v);
    
        },
    
        get: function(k){
    
          return ls.getItem(k);
    
        },
    
        remove: function(k){
    
          ls.removeItem(k);
    
        },
    
        getKeyByIndex: function(index){
    
          return ls.key(index);
    
        }
    
      };
    
      window.lsKit = localStorageKit;
    
    })(window);
    
    

    基本的な操作方法はクッキーとあまり違いがありません.
    Session Storage:Session StorageはLocal Storageと非常に類似しており、操作方法も一致しています.保存されたメモリは現在のセッションのみ有効であるため、ここでは詳しく説明しません.
    #3、Web SQL
    Web Sql Databaseは、html 5環境でjsでCRUDを実行できるwebデータベースです.データベースのコアはSQLiteです.
    メリット:
  • ローカル・データベース
  • は、複雑な関係型データ
  • を処理することができる.
    欠点:
  • はしばらくchromeのみサポートされていますが、Androidが大活躍するモバイル端末については、これは避けられる欠点であるはずです(最新バージョンのOperaやSafariもサポートされているようです)
  • 使用方法
    まず、Web sqlの3つのコアメソッドを紹介します.
  • openDatabase:この方法では、既存のデータベースを使用するか、新しいデータベースを作成してデータベース・オブジェクトを作成します.
  • transaction:この方法では、状況に応じてトランザクションのコミットまたはロールバックを制御できます.
  • executeSql:このメソッドは、実際のSQLクエリーを実行するために使用されます.var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024); var msg; db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, "foobar")'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "logmsg")'); console.log('Log message created and row inserted.'); }); db.transaction(function (tx) { tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) { var len = results.rows.length, i; console.log('Found rows: ' + len); for (i = 0; i < len; i++){ console.log(results.rows.item(i).log) } }, null); });

  • データベースとして使えばいいです.
    #4、IndexedDB
    IndexedDBは、構造化されたローカルデータストレージである.は、平面ファイルベースのデータベースで、階層化されたキー値格納と基本的なインデックスを採用しています.
    メリット:
  • 標準化
  • 複雑なデータを格納
  • はインデックス
  • をサポートする
    欠点:
  • SQL
  • はサポートされていません
  • は相対的に複雑である
  • である.
    使用方法
    //      ,          ,          
    
    var dbRequest = window.indexedDB.open('testDb', 2);
    
    
    
    dbRequest.onupgradeneeded=function(e){
    
        //       
    
        var db=e.target.result;
    
        if(!db.objectStoreNames.contains('users')){
    
            var store=db.createObjectStore('users',{keyPath: 'id'});
    
            store.createIndex('nameIndex','name',{unique:true}); 
    
            store.createIndex('ageIndex','age',{unique:false}); 
    
        }
    
        console.log('upgrade successfully!');
    
    };
    
    
    
    dbRequest.onsuccess = function(e){
    
      console.log('Open database successfully!');
    
      //         
    
      var db = e.target.result;
    
      var storeName = 'users';
    
      //     
    
      var tran = db.transaction(storeName, 'readwrite');
    
      var users = tran.objectStore(storeName);
    
      for(var i = 0; i < 5; i++){
    
        users.add({
    
          id: i,
    
          name: 'user' + i,
    
          age: Math.floor(Math.random() * 10) + 18
    
        });
    
      }
    
    
    
      //    
    
      var userStore = db.transaction(storeName).objectStore(storeName);
    
      var request = userStore.openCursor();
    
      request.onsuccess = function(e){
    
        var cursor = e.target.result;
    
        if(cursor){
    
          console.log(cursor.key);
    
          console.log(cursor.value);
    
          cursor.continue();
    
        }
    
      }
    
    }
    
    

    その他
    HTML 5におけるクライアントにデータをローカルに格納するための複数のAPI間の比較
    HTML 5ローカルストレージ——IndexedDB(一:基本使用)
    HTML 5ローカルストレージ——IndexedDB(二:インデックス)
     
    <!--
    /* GitHub stylesheet for MarkdownPad (http://markdownpad.com) */
    /* Author: Nicolas Hery - http://nicolashery.com */
    /* Version: b13fe65ca28d2e568c6ed5d7f06581183df8f2ff */
    /* Source: https://github.com/nicolahery/markdownpad-github */
    /* RESET
    =============================================================================*/
    html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
    margin: 0;
    padding: 0;
    border: 0;
    }
    /* BODY
    =============================================================================*/
    body {
    font-family: Helvetica, arial, freesans, clean, sans-serif;
    font-size: 14px;
    line-height: 1.6;
    color: #333;
    background-color: #fff;
    padding: 20px;
    margin: 0 auto;
    }
    body>*:first-child {
    margin-top: 0 !important;
    }
    body>*:last-child {
    margin-bottom: 0 !important;
    }
    /* BLOCKS
    =============================================================================*/
    p, blockquote, ul, ol, dl, table, pre {
    margin: 15px 0;
    }
    /* HEADERS
    =============================================================================*/
    h1, h2, h3, h4, h5, h6 {
    margin: 20px 0 10px;
    padding: 0;
    font-weight: bold;
    -webkit-font-smoothing: antialiased;
    }
    h1 tt, h1 code, h2 tt, h2 code, h3 tt, h3 code, h4 tt, h4 code, h5 tt, h5 code, h6 tt, h6 code {
    font-size: inherit;
    }
    h1 {
    font-size: 28px;
    color: #000;
    }
    h2 {
    font-size: 24px;
    border-bottom: 1px solid #ccc;
    color: #000;
    }
    h3 {
    font-size: 18px;
    }
    h4 {
    font-size: 16px;
    }
    h5 {
    font-size: 14px;
    }
    h6 {
    color: #777;
    font-size: 14px;
    }
    body>h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h4:first-child, body>h5:first-child, body>h6:first-child {
    margin-top: 0;
    padding-top: 0;
    }
    a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
    margin-top: 0;
    padding-top: 0;
    }
    h1+p, h2+p, h3+p, h4+p, h5+p, h6+p {
    margin-top: 10px;
    }
    /* LINKS
    =============================================================================*/
    a {
    color: #4183C4;
    text-decoration: none;
    }
    a:hover {
    text-decoration: underline;
    }
    /* LISTS
    =============================================================================*/
    ul, ol {
    padding-left: 30px;
    }
    ul li > :first-child,
    ol li > :first-child,
    ul li ul:first-of-type,
    ol li ol:first-of-type,
    ul li ol:first-of-type,
    ol li ul:first-of-type {
    margin-top: 0px;
    }
    ul ul, ul ol, ol ol, ol ul {
    margin-bottom: 0;
    }
    dl {
    padding: 0;
    }
    dl dt {
    font-size: 14px;
    font-weight: bold;
    font-style: italic;
    padding: 0;
    margin: 15px 0 5px;
    }
    dl dt:first-child {
    padding: 0;
    }
    dl dt>:first-child {
    margin-top: 0px;
    }
    dl dt>:last-child {
    margin-bottom: 0px;
    }
    dl dd {
    margin: 0 0 15px;
    padding: 0 15px;
    }
    dl dd>:first-child {
    margin-top: 0px;
    }
    dl dd>:last-child {
    margin-bottom: 0px;
    }
    /* CODE
    =============================================================================*/
    pre, code, tt {
    font-size: 12px;
    font-family: Consolas, "Liberation Mono", Courier, monospace;
    }
    code, tt {
    margin: 0 0px;
    padding: 0px 0px;
    white-space: nowrap;
    border: 1px solid #eaeaea;
    background-color: #f8f8f8;
    border-radius: 3px;
    }
    pre>code {
    margin: 0;
    padding: 0;
    white-space: pre;
    border: none;
    background: transparent;
    }
    pre {
    background-color: #f8f8f8;
    border: 1px solid #ccc;
    font-size: 13px;
    line-height: 19px;
    overflow: auto;
    padding: 6px 10px;
    border-radius: 3px;
    }
    pre code, pre tt {
    background-color: transparent;
    border: none;
    }
    kbd {
    -moz-border-bottom-colors: none;
    -moz-border-left-colors: none;
    -moz-border-right-colors: none;
    -moz-border-top-colors: none;
    background-color: #DDDDDD;
    background-image: linear-gradient(#F1F1F1, #DDDDDD);
    background-repeat: repeat-x;
    border-color: #DDDDDD #CCCCCC#CCCCCC#DDDDDD;
    border-image: none;
    border-radius: 2px 2px 2px 2px;
    border-style: solid;
    border-width: 1px;
    font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
    line-height: 10px;
    padding: 1px 4px;
    }
    /* QUOTES
    =============================================================================*/
    blockquote {
    border-left: 4px solid #DDD;
    padding: 0 15px;
    color: #777;
    }
    blockquote>:first-child {
    margin-top: 0px;
    }
    blockquote>:last-child {
    margin-bottom: 0px;
    }
    /* HORIZONTAL RULES
    =============================================================================*/
    hr {
    clear: both;
    margin: 15px 0;
    height: 0px;
    overflow: hidden;
    border: none;
    background: transparent;
    border-bottom: 4px solid #ddd;
    padding: 0;
    }
    /* IMAGES
    =============================================================================*/
    img {
    max-width: 100%
    }
    -->