ホームページ > ウェブフロントエンド > H5 チュートリアル > HTML5 ローカル ストレージ IndexedDB

HTML5 ローカル ストレージ IndexedDB

不言
リリース: 2018-06-11 17:53:43
オリジナル
2336 人が閲覧しました

この記事では、主に HTML5 のローカル ストレージ IndexedDB を紹介します。これは、必要な友人が参照できるようになりました。構造化データ (ファイル/BLOB を含む)。この記事では、HTML5 ローカル ストレージの IndexedDB の関連知識を紹介することに重点を置きます。興味のある方はぜひ一緒にご覧ください。IndexedDB は、大量の構造化データのクライアント側ストレージに使用される低レベル API です。 (ファイル/BLOB を含む)。 API はインデックスを使用して、このデータの高パフォーマンスな検索を可能にします。

最近、データをオフラインで保存し、ネットワーク信号があるときにフォームや写真をアップロードするというビジネス要件があります。そこでHTML5のIndexedDBを勉強しました。

特定のフィールドのみを保存する必要がある場合は、ローカル ストレージとセッション ストレージを使用できます。しかし、大量のデータが保存されると、ローカル ストレージとセッション ストレージではニーズを満たすことができなくなります。このとき、IndexedDBの力が反映されます。

1. データベースを作成するか開きます

/* 对不同浏览器的indexedDB进行兼容 */
const indexeddb = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.msIndexedDB;
/* 创建或连接数据库 */
const request = indexeddb.open(name, version);  // name:数据库名,version:数据库版本号
ログイン後にコピー

IndexedDB はさまざまなブラウザーで互換性があるため、indexedDB と互換性を持たせるにはいくつかの互換性関数が必要です。

2. データベースに接続するためのコールバック関数

request.addEventListener('success', function(event){ 
    // 打开或创建数据库成功
}, false);
request.addEventListener('error', function(event){ 
    // 打开或创建数据库失败
}, false);
request.addEventListener('upgradeneeded', function(event){ 
    // 更新数据库时执行
}, false);
ログイン後にコピー

データベースに接続した後、リクエストは 3 つの状態を監視します:

success: データベースが正常にオープンまたは作成されました

  • error : open またはデータベースの作成に失敗しました

  • upgradeneeded: データベースの更新

  • upgradeneeded ステータスは、indexedDB が新しいデータベースを作成し、indexeddb.open(name, version) version (データベースのバージョン番号) が変更された場合にのみ監視できます。バージョン番号が変更されない場合、この状態はトリガーされません。データベースの ObjectStore の作成と削除はすべて、このリスニング イベントの下で実行されます。

3. ObjectStore の作成と削除

IndexedDB では、ObjectStore はデータベース テーブルに似ています。

request.addEventListener('upgradeneeded', function(event){ 
    // 创建数据库实例
    const db = event.target.result;
    // 关闭数据库
    db.close();
    // 判断是否有ObjectStore
    db.objectStoreNames.contains(objectStoreName);
    // 删除ObjectStore
    db.deleteObjectStore(objectStoreName);
}, false);
ログイン後にコピー

以下のメソッドでObjectStoreを作成できます

request.addEventListener('upgradeneeded', function(event){ 
    // 创建数据库实例
    const db = event.target.result;
    // 判断是否有ObjectStore
    if(!db.objectStoreNames.contains(objectStoreName)){
        const store = db.createObjectStore(objectStoreName, {
            keyPath: keyPath  // keyPath 作为ObjectStore的搜索关键字
        });
        // 为ObjectStore创造索引
        store.createIndex(name,    // 索引
                          index,   // 键值
                          {
                              unique: unique  // 索引是否唯一
                          });
    }
}, false);
ログイン後にコピー

4. データの追加、削除、変更、確認

request.addEventListener('success', function(event){ 
    // 创建数据库实例
    const db = event.target.result;
    // 查找一个ObjectStore
    db.transaction(objectStoreName, wa);
    // wa为'readwrite'时,数据可以读写 
    // wa为'readonly'时,数据只读
    const store = transaction.objectStore(objectStoreName);
}, false);
ログイン後にコピー

データベース:

// 添加数据,当关键字存在时数据不会添加
store.add(obj);
// 更新数据,当关键字存在时覆盖数据,不存在时会添加数据
store.put(obj);
// 删除数据,删除指定的关键字对应的数据
store.delete(value);
// 清除ObjectStore
store.clear();
// 查找数据,根据关键字查找指定的数据
const g = store.get(value);
g.addEventListener('success', function(event){
    // 异步查找后的回调函数
}, false);
ログイン後にコピー

インデックスでデータを検索

const index = store.index(indexName);
const cursor = index.openCursor(range);
cursor.addEventListener('success', function(event){
    const result = event.target.result;
    if(result){
        result.value       // 数据
        result.continue(); // 迭代,游标下移
    }
}, false);
ログイン後にコピー

インデックス範囲でデータを検索

const index = store.index(indexName);
const cursor = index.openCursor(range);
/**
 * range为null时,查找所有数据
 * range为指定值时,查找索引满足该条件的对应的数据
 * range为IDBKeyRange对象时,根据条件查找满足条件的指定范围的数据
 */
// 大于或大于等于 
range = IDBKeyRange.lowerBound(value, true)   // (value, +∞),>  value
range = IDBKeyRange.lowerBound(value, false)  // [value, +∞),>= value
// 小于或小于等于,isOpen:true,开区间;false,闭区间
range = IDBKeyRange.upperBound(value, isOpen)
// 大于或大于等于value1,小于或小于等于value2
IDBKeyRange.bound(value1, value2, isOpen1, isOpen2)
ログイン後にコピー

以上がこの記事の全内容であり、皆様のお役に立てれば幸いです。関連コンテンツの詳細については、PHP 中国語 Web サイトに注目してください。

関連する推奨事項:

フロントエンド HTML5 のいくつかの保存方法

H5 アクティビティページのモバイルREMレイアウト適応手法の解析

H5水平および垂直画面検出手法の分析


以上がHTML5 ローカル ストレージ IndexedDBの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート