retweet

对ajax cache的一些思考

ajaxcn.orgbbs中看到这篇《对ajax cache的一些思考》,做了回复,如下: -------------------------------- 去年我做ajax时,使用了cache, cc.eyou.com,ajax部分是我设计的,可惜我后来离开了,没有把它做到尽善尽美。 我使用了观察者模式组织界面:
  • 把不同界面划分成不同的单元,作为view;
  • 其中每个view对应一个view类和一个javascript template文件 ;
  • 当view进行更新时,载入javascript template用到了cache ;
  • 数据集在doc类里面,里面的数据用到了cache ;
我用cache实现了这样的效果:
  • 当页面载入时,初始化用到的view,每个view载入各自的javascript template文件后,这个文件就被缓存了,以后的view更新时不必再次请求服务器。
  • 页面载入后,载入“联系人列表”第一页,同时缓存第一页数据,向后翻页继续缓存,并合并缓存。这样当重新访问第一页时,不必请求互联网。
不过,我与到了很多问题:
1。一个函数用来载入数据,那么它要判断是从缓存读取数据,还是从服务器获取数据,由于xmlHttpRequest是异步调用,所以这个函数必须为异步调用定义回调函数。 如果这个函数被别的函数调用,那么调用者必须知道,被调用者是个异步函数,需要为他做回调函数。 这样这个接口就很复杂了。 如果用同步请求,可以避免这个问题,不过这就不叫ajax了哈哈。 我是没办法,纯手工做的。特别是这些函数都是在不同的类里面,模型很复杂,我的uml顺序图最终理顺了这些问题。不过我只是消极抵御,没有更好的办法。 2。如同楼主所言,缓冲数据的更新问题比较复杂。 3。我做的是分页缓冲,这些每个页面缓冲数据集要合并在一起,当数据总共有10页,而我只缓冲了5页数据时,要保证分页顺序不会出错,和服务器分页顺序要一致。 总之从目前的浏览器功能来说,没有浏览器的支持, js级别的缓存还是不宜使用太多。使用了缓存,编码复杂度会很复杂,可能会陷入进去难以自拔。 另外,js做缓存只能通过变量存储字符串的形式来做。这样做的缺点很明显,不能跨页面,关了窗口就没了。 我考虑过的其他途径,都被否定了。
1。如果依赖浏览器对静态页面的缓存,可能浏览器仍然会发出一个If-Modified-Since之类的http头请求。 2。使用本地文本文件?不行,有安全限制。不过,用js开发HTA之类的应用程序,可以这么做。 3。使用cookie? 嗯,貌似不错,但是cookie会随着每次http会话一起提交,带来不必要的流量。 忽然想到,最近看到qyb的文章,介绍Set-Cookie 的 secure 属性, 它表示创建的 cookie 只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该信息。 不知道可不可以通过这个途径使用cookie实现缓存,哈哈。不过,这是奇技淫巧,不能保证始终有效吧。
--EOF--

若无特别说明,本站文章均为原创,转载请保留链接,谢谢

本文地址: http://www.dulao5.com/front-end/2006/12/03/thinking-about-ajax-cache.textile