在客户端缓存大量的json结果

Nil*_*Pun 9 javascript asp.net-mvc caching

我有一个asp.net mvc应用程序,它返回包含多达数年的数据的JSON结果,然后在Javascript图表上呈现.

为了获得良好的用户体验(在性能方面),我正在寻找最佳解决方案,是否可以在客户端缓存JSON数据,以便用户点击图表时使用不同的参数,如白天,周视图等,在没有命中服务器的情况下查询相同的JSON数据.

有人可以帮助我们做出最佳决策来缓存关于数据是应该缓存在客户端还是服务器端的最佳实践,还是应该直接命中数据库以进行每个图切换?

提前致谢.

Jos*_*eph 11

首先,数据库在哪里?如果您使用的是具有千兆位LAN的本地网络,那么点击它就不会有问题.但是,在互联网上并非如此.人们的带宽有限,特别是在移动设备上,因此您应该限制HTTP呼叫.此外,较少的HTTP调用意味着服务器上的压力较小.

以下是一些提示:

  • 考虑分页

    当加载"2年值"时,我想象很多,就像一篇100多页的论文.考虑对数据进行分页而不是一次性加载所有数据.这样可以节省带宽和缓存空间(如果有限的话).

    如何:让服务器脚本根据客户端的需要切片数据.LIMIT在查询中使用SQL创建分页非常容易.逻辑就像starting_item = (page_needed - 1) * items_per_page

  • JSONify数据

    使用JSON将数据传输到网络或从网络传输数据.除了轻量级外,它还具有结构化.以后解析和存储会更容易.

    如何:PHP有一个json_encode函数将数组转换为JSON字符串.我假设您的框架具有类似的功能.让字符串在页面上回显然后用于JSON.parse从JSON字符串转换为JS对象.JSON方法现代浏览器中是原生的,但如果你需要迎合旧的浏览器,Crockford有一个库可以解析它

  • 使用众所周知的存储框架

    如果跨页面缓存需要持久存储,我最近遇到了PersistJS,它将localStorage抽象为浏览器上可用的.此外,这是LZWJS实现.保持方便,因为localstorage使用字符串来存储数据,它有5-10MB的限制.

    如何:使用JSON.stringifyPersistJS 将数据转换为字符串并存储它.然后进行检索,获取字符串并使用解析它JSON.parse()

  • 仅在需要时拨打电话

    如果某些内容被修改,添加或者某些内容不存在,那么缓存系统是否只调用服务器.如果有数据,为什么要为它调用服务器?

  • 同步缓存

    如果你害怕陈旧的数据,那么让一些AJAX通过使用一些实时数据获取方法同步你的缓存系统,如本维基中关于Comet的描述.

最后两点取决于您的缓存框架.但是BackboneJS允许它的模型和集合同步到服务器,它具有我提到的相同功能.