IndexedDB性能

Sid*_*ebp 12 html5 indexeddb

任何人都可以指向我的文章,或者最好提供一些IndexedDB(理想情况下是Chrome)的性能体验 - 获取,插入和更新性能如何?

似乎有合理的意见,它几乎无法用于超过几千条记录的数据集,但我不确定这是否仅仅是由于缺乏索引 - 当然在概念上它不能比网络存储慢两者都可能在内部使用键值存储?

谢谢

Sco*_*ott 10

我最近在WebSQL和IndexedDB之间进行了一些性能比较.令人惊讶的是,IndexedDB赢了(我没想到).

http://blog.oharagroup.net/post/16394604653/a-performance-comparison-websql-vs-indexeddb


编辑:以上网址已关闭,但可在archive.org上找到:http://web.archive.org/web/20160418233232/http: //blog.oharagroup.net/post/16394604653/a-performance-comparison-websql -VS-是IndexedDB

综上所述:

WebSQL平均需要~750-850ms来完成查询并呈现结果; 和IndexedDB平均需要约300-350ms来呈现完全相同的结果.


Mar*_*tos 8

我见过的唯一表现是@Scott(这个问题的另一个答案的作者)制作的.不幸的是,他的文章没有做Web SQL数据库正义,因为它使用低效的HAVING子句来限制结果集的大小.我调整了Scott的SQL,将(几乎)等效的WHERE和子选择替换为HAVING,GROUP BY和LEFT JOIN:

SELECT p.Name AS ProgramName,
       s.rowid,
       s.Name,
       s.NowShowing,
       s.ProgramID,
       (SELECT COUNT(*) FROM Episode WHERE SeriesID = s.rowid AND STATUS IN ('Watched', 'Recorded', 'Expected') OR STATUS IS NULL) AS EpisodeCount,
       (SELECT COUNT(*) FROM Episode WHERE SeriesID = s.rowid AND STATUS = 'Watched') AS WatchedCount,
       (SELECT COUNT(*) FROM Episode WHERE SeriesID = s.rowid AND STATUS = 'Recorded') AS RecordedCount,
       (SELECT COUNT(*) FROM Episode WHERE SeriesID = s.rowid AND STATUS = 'Expected') AS ExpectedCount
  FROM Program p
  JOIN Series s ON p.rowid = s.ProgramID
 WHERE s.NowShowing IS NOT NULL OR
       EXISTS (SELECT * FROM Episode WHERE SeriesID = s.rowid AND STATUS IN ('Recorded', 'Expected'))
ORDER BY CASE
           WHEN s.NowShowing IS NULL THEN 1
           ELSE 0
         END,
         s.NowShowing,
         p.Name
Run Code Online (Sandbox Code Playgroud)

这比我原来的速度提高了约28倍 - 在我的计算机上为20毫秒vs 560毫秒 - 通过斯科特的数字推断,它比同等的IndexedDB快10倍.我无法确认这一点,因为IndexedDB代码在我的浏览器中不起作用,似乎是由于API的变化.

我应该解释一下上面写的"(几乎)".Scott最初的SQL和我的SQL有着微妙的不同含义:我的EpisodeCount上的一个无偿的WHERE子句 - 它具有用索引搜索替换表扫描的效果 - 如果不覆盖所有可能的Status值,可能无法计算一些剧集.删除此子句会以将执行时间加倍到40 ms为代价来消除差异.

请注意,在早些时候,我与Scott讨论了对他的SQL的一个较小的改变,也达到了40毫秒的时间.

更新:非常感谢斯科特更新他的文章以承认我们的讨论.