我希望将大型UI列表的内容缓存在客户端上,并根据标准或定期更新。然后,客户端代码可以在本地填充下拉列表,避免长页面下载时间。
这些列表可以接近4k项目,并且在没有缓存的情况下动态过滤它们会导致几次相当大的往返。
我该如何解决这个问题?我的意思是,哪种模式和策略适合这个?
答案 0 :(得分:2)
JSON的激进缓存可以为此工作,您只需对JS文件进行哈希处理并将其放在URL的末尾,以便在更改时对其进行更新。一个版本可能如下所示:
/media/js/ac.js?1234ABCD
当文件发生变化时,哈希值会发生变化。
/media/js/ac.js?4321DCBA
这样,当客户端加载页面时,服务器端代码链接到散列URL,客户端将在下一页加载时获得304 Not Modified响应(假设您在服务器上启用了此功能)。如果您使用此方法,您应该将文件设置为永不过期,因为“过期”部分将由散列处理,即,当JS文件 到期时,散列将更改并且客户端不会获得304,而是200。
ac.js可能包含一个列表或其他可迭代的自动完成代码可以解析为完成池,您可以像任何其他JS变量一样访问它。
实际上,对大多数项目来说,这不是必需的。使用像memcached服务器端和gzip压缩这样的东西会使文件既小又加载速度惊人。如果列表是巨大的(比如成千上万的项目),你可能想要考虑这个。
答案 1 :(得分:1)
Combres是一个很好的解决方案 - 它会跟踪更改并让浏览器永远缓存js,直到进行更改,在这种情况下,它会更改项目的URL。
答案 2 :(得分:0)
您可以考虑使用jQuery和AJAX在本地存储数据,以动态更新下拉列表。可以在需要时进行呼叫,下载速度非常快。
只是一个想法。
这可能会有所帮助:
http://think2loud.com/using-jquery-and-xml-to-populate-a-drop-down-box/
答案 3 :(得分:0)
如果它只是文本数据,您在Web服务器上启用了压缩,并且少于100个项目,则可能不需要在客户端脚本中维护列表。
通常最好将所有数据(列表项都是数据)放在一个地方,这样你就不用担心同步了。