背景

我正在构建一个应用程序,它将在服务器上轮询大型数据集,然后使用D3.js可视化库处理响应 . 然后,用户将能够通过 - 例如 - 覆盖其他相关数据集来进一步操纵视图 .

该站点的这个区域将位于 /app/dataview 之下,并且要求每个视图应具有用于共享/书签的唯一URL . 我认为使用queryParameters是最方便的实现方法,因为它不需要使用DB /数据存储区将URL映射到相应的配置

/app/dataview?q=<<_queryStr_>>

其中<< _ queryString _ >>将是(urlencoded)

{
    "title": "ABC",
    "layers": [
        {
            "q": "SELECT * FROM tblA WHERE name='AAPL' ..."
        },
        {
            "q": "SELECT * FROM tblA WHERE name='MSFT' ..."
        }
    ]
}

鉴于每个数据集

  • 将需要服务器请求/响应;

  • 的大小可达10MB;和

  • 可能需要15秒才能使用D3.js进行处理和渲染(之前的酸测试使用非AngularDart方法)

并且采用2层示例,支持页面的数据集大小可以是大约20MB,并且在DOM中完全呈现需要大约30秒 .

(请注意,目标受众可以访问快速,可靠的互联网连接,而应用程序则面向现代浏览器 . )

我希望AngularDart /浏览器以某种方式缓存此视图,以便在视图A和B之间导航时,返回视图A不会简单地为用户触发新的30秒延迟 .

我考虑过使用LocalStorage,但主要问题是我的内容很可能会超过5MB的限制;并且将生成的HTML片段保存为字符串将是一个缓慢的过程,更不用说它们在重新插入时会产生很大的开销 .

我也考虑过使用IndexedDB,虽然我主要关心的是在将文档片段附加/分离到DOM时,事件管理起来很麻烦 . 另外,我并不过分担心在用户会话之外保存状态,所以我想尽可能尝试管理AngularDart中的内容 . 当用户关闭浏览器时,我很高兴视图被垃圾收集 .

问题

使用AngularDart服务缓存部分DOM /文档片段,例如 . @Injectable() class CustomService { ... } 或者AngularDart中是否有其他功能我在文档中找到ViewFactoryCache但是不明白这是否是为此目的而设计的 .

提前致谢...