日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

html5 indexeddb 排序,HTML5 IndexedDB,Web SQL数据库和浏览器大战

發布時間:2024/9/30 HTML 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 html5 indexeddb 排序,HTML5 IndexedDB,Web SQL数据库和浏览器大战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

根據您在iOS上對Safari的要求,除了WebSQL之外別無選擇 . 其他移動瀏覽器(如Opera和Opera)支持WebSQL黑莓 . 即使他們有IndexedDB,我也不認為他們會刪除WebSQL支持 . 不知何故,他們是互補的 .

另一方面,在瀏覽器存儲戰爭中,IndexedDB獲勝 . IE和FF只有IndexedDB . 諷刺的是,FF在Sqlite之上實現了IndexedDB .

我想說的是IndexedDB不僅僅是關鍵值存儲 . 它有索引和交易 . 這些只有兩個幾乎構成SQL查詢的所有功能,包括連接,條件和排序 . 起初并不明顯,因為它的異步API .

IndexedDB的性能優于WebSQL . 它更安全 . 它對javascript用例更靈活 . 最后它更容易使用 .

為了說明這種情況,我將使用my library中的sudo代碼,但您可以直接使用IndexedDB API:

'people'商店有索引字段'name'和list indexed字段'hobby' . 在JSON中,

people = {

name: 'Foo Bar',

email: 'foo@bar.com'

hobby: ['camping', 'swimming']};

從“愛好者”露營的“人”中檢索姓名 .

var req = db.keys('people', 'hobby', IDBKeyRange.only('camping'));

req.done(function(campers) {

db.keys('people', campers, 'name').done(function(names) {

console.log(names);

});

});

關于這段代碼的有趣之處在于沒有涉及序列化 . 因此它非常快 .

以下示例說明了友誼圖查詢 . friendship 對象庫只有一個列出的索引字段 friend_list . 它使用人物對象存儲鍵作為外線主鍵 . people 對象庫有很多屬性,其中有 location 字段 . 該查詢是查找知道 me 和 other_guy 且位于'Singapore'的朋友列表 .

var q1 = new ydn.db.Iterator('friendship', 'friend_list', IDBKeyRange.only(me));

var q2 = new dn.db.Iterator('friendship', 'friend_list', IDBKeyRange.only(other_guy));

// if location is not indexed, a filtered value query is used.

var q3 = new ydn.db.Iterator('people', new ydn.db.Expression(['"location"', "'Singapore'", '=']));

// if location is indexed, an index query is used.

// var q3 = new ydn.db.Iterator('people', 'location', IDBKeyRange.only('Singapore'));

var current_loop = 2; // start from inner loop

var join_algo = function(keys, index_keys) {

var advancement = [];

advancement[keys.length - 1] = null;

var has_adv = false;

for (var i = 0; i < keys.length; i++) {

if (!goog.isDef(keys[i])) {

// completed iterator

if (i != 0) {

advancement[i] = false; // request to restart the iteration

advancement[i - 1] = true; // advance outer iterator

current_loop = i - 1;

} // i == 0 means we are done.

has_adv = true;

break;

}

}

if (!has_adv) {

// continue looping current

advancement[current_loop] = true;

}

return advancement;

}

var result = db.scan([q3, q1, q2], join_algo);

result.done(function(keys, index_keys, values) {

console.log(values); // should get desire list of friends

});

此連接查詢再次只是鍵掃描,因此非常快 . 默認情況下 scan 使用sorted-merge算法來查找匹配的鍵,但這里顯示了樸素的嵌套循環連接算法 . 因此表連接是可能的,但您必須編寫連接算法 . 但是像Zigzag merge這樣的新算法比使用Sqlite更快,因為所有輸入都是排序的,游標可以很好地進步,更重要的是加入過程可以利用不在數據庫中的外部知識 . 使用SQL,連接操作是不透明的 .

除了IndexedDB之外,還可以使用流式傳輸和map / reduce處理等技術 .

總結

以上是生活随笔為你收集整理的html5 indexeddb 排序,HTML5 IndexedDB,Web SQL数据库和浏览器大战的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。