标签: indexeddb

IndexedDB模糊搜索

好的,首先,对不起我的英语.

我在一个web项目中工作,显示当我在输入框中键入内容时,但我想使用IndexedDB来提高Firefox中的查询速度.

使用WebSQL我有这句话:

db.transaction(function (tx) {
  var SQL = 'SELECT "column1", 
                    "column2" 
             FROM "table"
             WHERE "column1" LIKE ?
             ORDER BY "sortcolumn" DESC
             LIMIT 6';

  tx.executeSql(SQL, [searchTerm + '%'], function(tx, rs) {
    // Process code here
  });
});
Run Code Online (Sandbox Code Playgroud)

我想用IndexedDB做同样的事情,我有这个代码:

db.transaction(['table'], 'readonly')
  .objectStore('table')
  .index('sortcolumn')
  .openCursor(null, 'prev')
  .onsuccess = function (e) {
    e || (e = event);
    var cursor = e.target.result;
    if (cursor) {
        if (cursor.value.column1.substr(0, searchTerm.length) == searchTerm) {
            // Process code here
        } else {
            cursor.continue();
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

但是速度太慢而且我的代码有问题......我想知道有没有更好的方法来做到这一点.

谢谢回复.

javascript indexeddb

22
推荐指数
1
解决办法
7343
查看次数

如何通过缓存制作离线地图(使用传单OSM)?

我试图通过浏览器中的缓存(IndexedDB)制作离线地图.我理解这个概念是我在连接到互联网时首先下载并存储地图的图块.

然后我必须在逻辑上离线加载磁贴.

但是,我无法弄明白.

如何存储它们以及如何在逻辑上再次加载它们?我被困在这里 我正在使用 leaflet APIfor maps.如何实施?

offline offline-caching indexeddb leaflet

21
推荐指数
2
解决办法
2万
查看次数

IndexedDB:将文件存储为File或Blob或ArrayBuffer.什么是最好的选择?

现在大多数浏览器都支持IndexedDB将数据/文件直接存储为File,BlobArrayBuffer.

此代码将IDB密钥"File1"保存为文件

<input type="file" id="userfile" />
var a = document.getElementById("userfile");
var b = a.files[0];
Run Code Online (Sandbox Code Playgroud)

现在我们可以使用以下代码直接将此文件保存到IDB

//LocalForage is a library for indexedDB developed by Mozilla
//Note: localforage._config.driver=asyncStorage (IDB method)
function run(){
  //"File1" = IDB data table key and b=value
  localforage.setItem("File1", b, function(err, value) {
    console.log(err)
  });
}

a.onchange = function(){
  run()
}
Run Code Online (Sandbox Code Playgroud)

此代码将IDB密钥"BlobFile"保存为Blob

mb = new Blob([b],{type:b.type});

function runB(){
  localforage.setItem("BlobFile", mb, function(err, value){
    console.log(err)
  });    
}

a.onchange = function(){
  runB()
}
Run Code Online (Sandbox Code Playgroud)

我想知道将文件存储到IDB的最佳做法是什么.(文件/斑点/ ArrayBuffer) …

javascript html5 blob filereader indexeddb

21
推荐指数
2
解决办法
7423
查看次数

在IndexedDB的objectstore阻止UI中插入大量数据

我想在我的IndexedDB的objectstore中保存约35000个对象.我使用下面的代码插入.

AddListings = function (x2j_list_new, callback) {   
    var transaction = db.transaction(["listings"], IDBTransaction.READ_WRITE);
    var count = 0;
    transaction.oncomplete = function (event) {
        if (callback) {
            console.log('x2jShowListing Added ' + count + '/' + x2j_list_new.length);
                callback([count, x2j_list_new.length]);
            }
    };
    transaction.onerror = function (e) {
       console.log("myError: ", e);  
       if (callback) {
          callback(false);
       }
    };
    var store = transaction.objectStore("listings");

    $.each(x2j_list_new, function (index0, item0) {
        var request = store.put(item0);
        request.onsuccess = function (event) {
            count++;
            // event.target.result  
            };
        });
    });        
};
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常,但循环和插入约35000个对象使UI无响应约200秒.我想也许我可以使用WebWorkers,但是WebWorkers中没有IndexedDB.我试图找到批量插入的方法,找不到一个.有关如何在不阻止UI的情况下插入大量对象的任何想法?

javascript google-chrome-extension indexeddb

19
推荐指数
1
解决办法
1万
查看次数

通过AJAX读取后显示视频blob

当我试图在IndexedDB的Chrome的非对应的斑点,我发现我可以作为arraybuffer通过AJAX读取图像,将其存储在索引资料,提取它,将其转换为一个blob,然后使用显示它在一个元素来创建一个解决方法以下代码:

var xhr = new XMLHttpRequest(),newphoto;
xhr.open("GET", "photo1.jpg", true);    
xhr.responseType = "arraybuffer";
xhr.addEventListener("load", function () {
    if (xhr.status === 200) {
        newphoto = xhr.response;
        /* store "newphoto" in IndexedDB */
        ...
    }
}

document.getElementById("show_image").onclick=function() {
    var store = db.transaction("files", "readonly").objectStore("files").get("image1");
    store.onsuccess = function() {
        var URL = window.URL || window.webkitURL;
        var oMyBlob = new Blob([store.result.image], { "type" : "image\/jpg" });
        var docURL = URL.createObjectURL(oMyBlob);
        var elImage = document.getElementById("photo");
        elImage.setAttribute("src", docURL);
        URL.revokeObjectURL(docURL);
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常.但是,如果我尝试相同的过程,但这次装载的视频(.MP4)我不能表现出来:

...    
var oMyBlob = new Blob([store.result.image], …
Run Code Online (Sandbox Code Playgroud)

javascript ajax blob indexeddb html5-filesystem

18
推荐指数
1
解决办法
5149
查看次数

用于桥接IndexedDB和WebSQL的JavaScript库

我很好奇是否有一个库或项目为IndexedDB或WebSQL提供通用接口,具体取决于用户的浏览器支持.如果他们使用Chrome/Safari,请使用WebSQL,如果他们使用的是Firefox或Internet Explorer,请使用IndexedDB.

这个问题的海报似乎有自己开发的解决方案,但没有提供任何源代码.

javascript web-sql indexeddb

17
推荐指数
5
解决办法
2万
查看次数

Javascript:使用多个索引搜索indexeddb

我想从WebSql更改为Indexeddb.但是,如何进行SQL查询

SELECT * FROM customers WHERE ssn = '444-44-4444' and emal = 'bill@bill@company.com'
SELECT * FROM customers WHERE ssn = '444-44-4444' and emal = 'bill@bill@company.com' and age = 30
SELECT * FROM customers WHERE ssn = '444-44-4444' and emal = 'bill@bill@company.com' and name = 'Bill'
etc
Run Code Online (Sandbox Code Playgroud)

使用IndexedDB?例如,我在阅读indexedDb 的文档时注意到,所有示例当时只查询一个索引.所以你可以做到

var index = objectStore.index("ssn");
index.get("444-44-4444").onsuccess = function(event) {
     alert("Name is " + event.target.result.name);
};
Run Code Online (Sandbox Code Playgroud)

但我需要同时查询多个索引!

我还发现了一些关于复合索引的有趣帖子,但它们只有在查询复合索引中的所有字段时才有效.

javascript web-sql indexeddb

17
推荐指数
1
解决办法
1万
查看次数

检查IndexedDB数据库是否存在

有没有办法检查IndexedDB数据库是否已经存在?当程序尝试打开不存在的数据库时,将创建数据库.我能想到的唯一方法是如下所示,我测试objectStore是否已经存在,如果没有,则删除数据库:

var dbexists=false;
var request = window.indexedDB.open("TestDatabase");
request.onupgradeneeded = function(e) {
    db = e.target.result;
    if (!db.objectStoreNames.contains('todo')) {
       db.close();
       indexedDB.deleteDatabase("TestDatabase");
    } else {
       dbexists=true;
    }
}
Run Code Online (Sandbox Code Playgroud)

indexeddb

16
推荐指数
4
解决办法
2万
查看次数

indexeddb中添加和放入有什么区别?

我刚开始使用indexeddb并转换Web SQL.

我尝试使用add和put在数据存储中添加一些数据.我真的不知道使用这两个函数的区别是什么/是什么.

我想我必须知道差异所以我可以适当地使用它们.

谢谢你

indexeddb

15
推荐指数
1
解决办法
4178
查看次数

在HTML5 iOS应用程序中安全存储数据 - localStorage/WebSQL/IndexedDB是否合适?

我正在编写一个我想在iOS应用商店中发布的HTML5应用程序.使用PhoneGap或包装在UIWebView控件中.

我在为应用程序存储数据方面有什么选择,我有点困惑.

是否使用适合在此类应用程序中存储应用程序数据的localStorage,WebSQL或IndexedDB技术?我将存储JSON和XML数据.

请记住,如果用户无意中删除了这些数据,那么他们将失去工作,这显然是我不想发生的.

我知道减轻这种风险的唯一真正方法是将数据同步到"云"或其他在线系统 - 我可以在将来的版本中执行此操作,但现在不能.最初我只想在本地存储数据,如果这是一种合理稳定的做事方式.

根据我的理解,当清除cookie时,浏览器也将清除任何localStorage数据.因此,我可以看到用户意外地执行此操作的规则.

WebSQL看起来很不错 - 用户无法在iOS上无意中删除它.他们实际上必须进入浏览器设置并手动删除数据库.

但是WebSQL的缺点在于,未来我可能不会支持它.

使用IndexedDB,我不清楚何时清除该数据.删除cookie时是否也会删除它,或者Safari设置中的"数据库"选项是否会控制它?

IndexedDB是更好的解决方案,因为它将来会比WebSQL提供更好的支持吗?

还有其他更合适的解决方案我不知道吗?

html5 local-storage ios web-sql indexeddb

14
推荐指数
2
解决办法
7673
查看次数