我正在研究性能极其受限的设备。由于 AJAX 请求的开销,我打算在浏览器中积极缓存文本和图像资源,但我需要将每个设备的缓存大小配置为低至1MB
文本和9MB
图像的大小——对于多设备来说是一个很大的挑战。屏幕,图形应用程序。
因为设备很容易达到内存限制,所以我必须非常谨慎地管理应用程序的大小:代码文件大小、并发 HTTP 请求数、事件调度时的 JS 处理器周期数、限制 CSS 回流等。我今天的问题是如何为文本资产和图像开发大小受限的缓存。
对于文本,我使用对象和近似大小滚动了自己的缓存。应用程序手动获取/设置缓存条目。在达到可配置的上限时,类垃圾会自行收集 from to大小,为最后访问的属性赋予权重(即,如果最近访问过某些内容,则第一次跳过收集该对象)。JSON.encode().length
'string'.length
gcLimit
gcTarget
对于图像,我打算预加载界面元素,让浏览器通过删除 DOM 元素并从不持久存储Image()
对象来处理垃圾收集本身。对于预加载,我可能会再次推出自己的预加载 - 我有示例可以模仿,例如 FiNGAHOLiC 的 ImgPreloader 和this。我需要记住诸如“下载窗口大小”和“最大缓存请求”之类的功能,以确保我不会无意中使设备过载。
在如此受限的环境中工作是一个巨大的挑战,并且像 Backbone 这样的常见框架不支持“最大集合大小”。在 SO 的其他地方,用户引用5MB
了 HTML5 localStorag
e 的限制,但我的目标不是会话持久性,所以我看不到好处。
我不禁觉得可能有更好的解决方案。想法?
编辑:@Xotic750:感谢您对 IndexedDB 的认可。遗憾的是,这个应用程序是基于 Opera/Presto 构建的标准网页。更好的是,该平台不提供持久性。岩石和坚硬的地方:-/。