IndexedDB性能和IndexedDB v/s WebSQL性能比较
WebSQL和IndexEdDB都是DB API,用于访问Web浏览器中的基础嵌入式数据库(CRUD).如果我是正确的话,那就像SQL访问(crud)诸如Oracle等的任何客户端服务器数据库(在许多情况下对WebSQL和IndexEdDB的支持都可以在同一浏览器上使用) 所以,这是否意味着WebSQL和IndexedDB都在访问(crud)相同的基础嵌入式数据库,如果是这样的话,那么它将在所有Web浏览器上具有相同的性能! 但是我认为情况并非如此,这是否意味着Web浏览器将拥有一个以上的嵌入式数据库?为什么在同一浏览器中应该有2个嵌入式数据库? 并且由于WebSQL和IndexEdDB是API,因此这意味着要说WebSQL和IndexEdDB的性能并不完全正确(因为它们更像是查询/访问语言),但这在很大程度上取决于基础嵌入式数据库的性能.并且,根据Google, leveldb比sqlite 可以说是正确的,这不是WebSQL和IndexedDB之间的性能差异,而是
2 2024-04-03
编程技术问答社区
IndexedDB事务和承诺之间的相互作用不一致
我看到了 sync-promise 发布在reddit和与作者进行了讨论.我们注意到索引edb交易与承诺之间的关系中有一些奇怪的矛盾. indexedDB事件完成时,索引自动销售.一个并发症是您不能在onsuccess回调内部执行任何异步,除了在同一交易上执行另一个操作.例如,您无法在onsuccess中启动AJAX请求,然后在AJAX请求返回一些数据后重复使用相同的交易. 承诺与它有什么关系?据我了解,承诺的决议应该永远是异步的.这意味着如果不自动承诺索引ddb交易. 这是我在谈论的例子: var openRequest = indexedDB.open("library"); openRequest.onupgradeneeded = function() { // The database did not previously exist, so create object stores and indexes. var db = openRequ
0 2024-04-01
编程技术问答社区
从Linux bash解析FB-Purity'的Firefox idb(索引数据库API)object_data blob。
从Linux Bash脚本中,我想读取特定的Firefox附加组件存储的结构化数据,称为fb-purity. 我找到了一个称为.mozilla/firefox/b8eab5j0.default/storage/default/moz-extension+++37a9788c-671d-4cae-ba5c-fbdb8788499a^userContextId=4294967295/的文件夹,其中包含a .metadata文件,其中包含字符串moz-extension://37a9788c-671d-4cae-ba5c-fbdb8788499a,一个在Firefox中打开时的URL显示附加组件的详细信息,因此我很确定此文件夹属于到附加. 该文件夹包含一个idb目录,听起来像 indexed database api ,w3c标准 idb文件夹仅包含一个空文件夹和一个sqlite文件. 不幸的是,sqlite文件不包含太多的应用程序结构化数据,但是object_data表包含
4 2024-04-01
编程技术问答社区
HTML5视频源作为本地存储的blob不再工作了
从Chrome 80开始,似乎以Blobs或IndexedDB工作方式发生了变化. 将视频文件加载为blob,并通过CreateObjectUrl分配给HTML5视频元素,仍然有效: // load the blob through XMLHttprequest RequestAsBlob("https://devserver/some-video.mp4", function(blob) { video.src = URL.createObjectURL(blob); // same above, video.src is now "blob:https://devserver/36e15718-e597-4859-95d3-6bc39daaa999" } video.play(); 输出:承诺{} 视频播放很好. 检查斑点,看起来像这样: Blob {size: 6752122, type: "video/mp4"} size: 675212
0 2024-04-01
编程技术问答社区
IndexedDB:将文件存储为文件或Blob或ArrayBuffer。什么是最好的选择?
现在,大多数浏览器都支持indexedDB直接以文件, blob 或 arraybuffer . 此代码将IDB键'file1'作为 file var a = document.getElementById("userfile"); var b = a.files[0]; 现在,我们可以使用以下代码直接将此文件保存到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) {
0 2024-04-01
编程技术问答社区
在Blazor WASM中使用SQLite的好处是什么?
我正在观看此史蒂夫·桑德森(Steve Sanderson >我正在考虑在我的一个项目中使用它.我只是想了解好处是什么.从我能找到的任何信息来看,实际的SQLite数据库都存在于内存中.在他的项目中,他正在将其与索引db同步,以保持持久性.如果是这种情况,那比将数据作为对象列表中的对象列表中的对象列表更好,以及使用LINQ直接查询对象,而不是实体框架从SQLITE数据库查询?如果需要,您也可以将对象持续到索引.我从来没有这样的印象是,将这些数据保留在内存中是个好主意.当您看到您可以在Blazor中使用SQLite时,我最初的想法是,它允许您在不保留所有内存的情况下保持数据客户端.如果不是这种情况,在Blazor应用中使用Sqllite有什么好处? 解决方案 一个好的编程规则是亲吻 - 保持简单. 因此,如果LINQ满足您的应用程序对对象的要求,那么将其与SQLite复杂化似乎是错误的事情. 但是,在视频中,Steve S.确实提出了要求使用SQLite的要求参数 - 应用程
0 2024-04-01
编程技术问答社区
从Bash或Python获取google Chrome IndexedDB内的数据
i有leveldb(indexeddb)从我的Google Chrome中,该文件位于此文件夹中: /home//.config/google-chrome/Default/IndexedDB/https__0.indexeddb.leveldb/ 文件夹内容是: $ ls 000005.ldb 000006.log CURRENT LOCK LOG MANIFEST-000001 我有一个非常简单的python脚本来打开它: #!/bin/python import leveldb db = leveldb.LevelDB('./000005.ldb') 现在我总是得到此错误: leveldb.LevelDBError: IO error: ./000005.ldb/LOCK: Not a directory 有人是否有有关如何正确访问我的indexDB文件中存储的数据的信息?基本上,我只需要从"开发人员工具"视
30 2024-03-28
编程技术问答社区
YDN-DB 如何验证一条记录是否存在?
我正在尝试通过给定的ID验证表中是否存在特定记录.例如: var id = 23; db.count('products',id).done(function(count) { if(count>0){ db.get('products',id).done(function(r) { //Do something }); }else{ alert('No product found'); } }); 当我尝试此操作时,我会收到以下错误:uncaught exception: null 我真的很感谢您的帮助! 解决方案 您的解决方案几乎是正确的. 在IndexedDB API中,没有exists方法,可能是因为可以使用count方法对其进行模拟.但是count方法仅接受关键范围,因此存在测试应为: var id = 23; db.count('products
0 2024-03-18
编程技术问答社区
是否有一个服务工作者启动waitUntil来延迟处理取件?
是否有可能让服务工作者等待开始处理事件,直到在服务工作者启动中完成异步工作? 我有一个应用程序外壳,其中包含数据中定义的路由.要在服务工作者启动时安装特定的路线获取处理程序,我需要从indexedDB(异步)查找路由数据. 不幸的是,服务工作者在索引dexeddb查找可以完成并设置路线上的设置之前开始接受提取事件. 目前,我只是为此为特殊案例默认处理程序进行了硬编码,但是让服务工作者只延迟处理提取事件,直到服务工作者启动完成indexedDB处理. . 我没有看到为此" waituntil"的方法,也许我错过了? 解决方案 有一个解决方法: function startupAsyncStuff() { return new Promise(function (fulfill, reject) { // put here your async stuff and fulfill the promise when done. }); }
2 2024-03-18
编程技术问答社区
为什么在连接到indexedDB时,onsuccess有时会在onupgradeneeded之前被调用?
我在IndexedDB上遇到了麻烦.在Firefox 18上,当我创建一个新数据库时,onsuccess方法同时onupgradeneeded.在Chrome 24上(这是我想获得的行为),仅在完成onupgradeneeded方法完成后才调用onsuccess方法. 根据有关索引索引的MDN信息,我的印象是,当调用OnSuccess方法时,使用数据库是安全的,但这似乎使它似乎不在Firefox中. . (function(){ app = {}; // These will hold the data for each store. app.objectstores = [ { name: 'UNIVERSITIES', keyPath: 'UID', autoIncrement: false, data_source: 'http://mysites.dev/nddery.ca_www/larelance/data/
4 2024-03-18
编程技术问答社区
使用indexedDB异步
加载数据并将它们存储在索引DB数据库中.我定期将数据库崩溃并丢失了访问它. 请给我一个解决方案,如何异步使用indexeddb! 我现在使用的示例代码: var dataTotal = 0; var threads = 6; //openIndexeddbConnection(); function start(total){ dataTotal = total; for (var i = 0; i dataTotal){ //checkEnd(); return; } $.ajax({ url: baseUrl, data: {offset: dataNum}, succes
2 2024-03-18
编程技术问答社区
在阻塞的chrome.webRequest.onBeforeSendHeaders监听器中进行异步操作
我正在开发一个镀铬扩展,并且由于与同步和同步API的混合而发展而陷入了问题. chrome.webRequest.onBeforeSendHeaders.addListener(function(details) { //code that modifies details.requestHeaders //.. return {requestHeaders: details.requestHeaders}; }, {urls: [""]}, ["blocking", "requestHeaders"] 在侦听器函数中,我想从indexedDB获取数据,并根据此数据修改请求标头. IndexEdDB仅具有异步API,而听众的合同要求同步. 有什么想法我如何解决这个问题? 解决方案 DB调用通常太贵了.也就是说,这是我头顶上的一个主意(这可能很恐怖): 保留最常用数据的内存缓存.使用某种类型的简单数据结构,例如 map . 当
如何从javascript同步调用indexeddb方法?
我有一种方法说 method1 在Java脚本中,另一种方法为 Method2 调用. method2 返回一个值1之后的方法2()调用. var userObj={"first": [{'Key':'1', 'value':'student',}, {'Key':'2', 'value':'Teacher',} ], "second":[{'Key':'1', 'class':'theory',}, {'Key':'2', 'value':'lab',} ] }; function method1(){ var dataArray =meth
4 2024-03-18
编程技术问答社区
在indexeddb游标内的异步操作
我正在使用 indexeddb 承诺的库将 indexeddb api 转换为承诺. 看来,到我的获取完成时,我的索引DB事务已经不再活跃了.我猜这是时候了吗? 我遇到的错误是: DOMException: Failed to execute 'delete' on 'IDBCursor': The transaction has finished. 我要完成的工作是从indexedDB中删除项目,并且仅当获取成功完成时.我知道我可以在获取后创建第二笔交易以获取物品并将其删除.但是我想知道如果没有进行新的交易,是否有更好的方法?我想念什么吗? 谁能向我解释为什么我看到这个问题? DBHelper.DBPromised.then( db => { const store = db.transaction('deferredReviews', 'readwrite').objectStore('deferredReviews'); const su
0 2024-03-18
编程技术问答社区
只有在IndexedDB中的对象被更新后才能运行代码(特别是在Chrome中)。
我觉得这是一件非常平凡的事情.我想更新索引DB数据库中的对象,然后运行一些代码,然后使用更新的值. 我最初所做的只是在调用cursor.update后才运行我的回调函数,该功能在Firefox中起作用.但是它在Chrome中失败了,在运行以下代码之前,该更新不会发生.这可能是种族条件,因为(我理解)更新是异步的. 因此,我认为我应该使用onsuccess cursor.update的信号来调用我的回调函数.但令我惊讶的是,这似乎在Chrome中也不起作用! 一些示例代码您可以在JSFiddle上运行...尽管这似乎很有趣,这似乎很有趣某些原因,但是Chrome效果很好.对于Firefox,您可以在本地运行它,并且可以使用(这会在浏览器中的JavaScript控制台上产生输出): var db, request; request = indexedDB.open("test", 1); request.onupgrad
2 2024-03-18
编程技术问答社区
IndexedDB的回调在Angularjs中没有更新UI
我正在使用以下库在一个新的Chrome应用程序中访问AngularJS中的索引DB: https:https://github .com/aaronpowell/db.js 当我尝试通过使用此信息来更新应用程序启动的UI时: db.orders.query().all().execute().done(function(results) { $scope.ordercount = results.length; }); 在我的main.html中,我使用了订购变量为: Orders : {{ordercount}} 但是,除非我进行ng点击或任何其他ng-*事件,否则UI不会更新.我需要的只是在加载应用程序时显示订单数量.我尝试了$ scope.apply(),但是出现错误,说apply()不可用. 请帮助. 解决方案 由于您从Angular JS的外部获得值,因此您需要这样做, $scope.$apply(function
6 2024-02-24
编程技术问答社区
如何从IndexedDb对象库中获得多个键值
有人可以建议如何从indexedDB对象存储中获取多个键值吗?我做了多个选择,但没有工作. 在此创建索引 $provide.value('dbModel', { name: 'TestDB', version: '1', instance: {}, objectStoreName: { dashboards: 'Appointment' }, upgrade: function (e) { var db = e.target.result; if (!db.objectStoreNames.contains('Appointment')) { var calendarobj = db.createObjectStore('Appointment', {
22 2024-02-24
编程技术问答社区
Dexie DB的加时性速度较慢
我使用的是Angular 8和Electron的Dexie DB版本2.0.4.我意识到我在数据库中输入的数据越多,对它的查询越慢,我的数据库呼叫速度就慢了. 我是Dexie Noob,不确定在我提出某些请求后是否有办法关闭连接,或者是否存在记忆中的某些东西. 有人知道如何调试或确认问题是什么? 这是我对DB的请求之一的示例: await this.indexdb.TableName.filter(SomeProperty => SomeProperty == Property).toArray(); await this.indexdb.TableName.put({'SomePropertyName':'SomePropertyValue'}) 非常感谢 解决方案 过滤器方法不利用任何索引,而是使用光标穿过表中的所有行来测试您的条件.使用区域时,这可能会变得缓慢,尤其是缓慢的.JS(这是Angular的一部分),因为它将拦截所有索引EDEXEDDB
12 2024-02-21
编程技术问答社区
如何在@ngrx/core中用indexedDB的承诺来设置初始状态
我想使用IDB软件包在NGRX中设置初始状态,该软件包使用有望获取数据,但是每次我尝试设置它时都会遇到错误.我读到@ngrx是同步的,这意味着它与承诺无法使用. 我尝试的不同方法: 这是我的IDB包装方法,它在数据中加载它的工作正常 export function getInitialState(): Promise { return StorageService.dB.loadInitialState('app-state'); } 和我尝试的不同方法设置了初始状态 方法:1 StoreModule.forRoot(reducers, {initialState: getInitialState}) 方法:2 import { INITIAL_STATE } from '@ngrx/store'; { provide: INITIAL_STATE, useFactory: getInitialState } 方法:3 ex
2 2024-02-20
编程技术问答社区
在安卓系统中从浏览器外访问网络存储或索引数据库
我想使用HTML和JavaScript构建一个基于离线浏览器的应用程序,以收集有关Android平板电脑的调查数据.该应用程序将由一些静态页面组成,其中包含供用户输入数据的表单,然后使用Web Storage或IndexEdDB在本地存储.但是,我还想构建一个小型本机Android应用程序,该应用程序可以抓住此数据并将其传输到其他设备.这是可能的,如果是这样,我该怎么办? 特别是,我想了解本机应用程序是否以及如何访问浏览器的数据存储(我可以管理其余的).我希望使用Android浏览器,但可以使用其他任何其他浏览器,如果可以更轻松.我发现此博客文章可能是可能的,但我很感谢Android浏览器存储数据的位置,以及另一个应用程序可以轻松地访问数据. 解决方案 不幸的是,我认为数据流无法按照您想要的方式工作.在Chromium Webkit实现中,IDB将数据存储在LevelDB文件中,您应该无法访问(设计). 那么,我们如何让Java和JavaScript一起玩耍?这是一个
0 2024-02-04
编程技术问答社区