extjs中js资源缓存策略

本文探讨了HTTP的缓存协商机制,重点解析了如何处理静态资源的缓存策略,并深入讲解了ExtJS框架的动态加载策略,旨在优化前端应用的性能和用户体验。
摘要由CSDN通过智能技术生成

http的缓存协商

浏览器对静态文件的缓存主要是通过cache-control来控制的,cache-control可以设置no-cache,max-age以及must-revalidate等来设置缓存策略。
如果max-age> 0则会在max-age的时间内不访问服务器,用本地缓存的静态文件代替。
如果max-age<=0则会每次都询问服务器,资源文件是否有修改,有则200,无则304。这相当于f5操作。
no-cache表示不理会缓存协商,全部重新加载。这相当于是ctrl+f5操作。
must-revalidate表示必须遵循策略规则。因为浏览器有时候会提取过期的缓存,设置了这个策略后,浏览器会严格遵循客户设置的策略。

服务器在首次应答客户的request时,会返回last-modified和etag给浏览器,浏览器将cache住这些信息,下一次request服务器时就会在header里带上if-modified-since和if-non-match信息,这两个分别对应last-modified和etag。服务器会提取对应资源的modified时间和etag来做对比,如果有改变则返回200并且response last-modified和etag给客户端,没变则返回304不需要改变。

目前tomcat已经支持etag, tomcat是根据文件的contentLength和lastModified混合编码生成串儿。因为last-modified因为只支持到秒级,所以对于秒内频繁修改的静态资源效率会比较低下,etag则很好的避免了这一点。

对静态资源的处理策略

一般对于静态资源,服务器端会通过过滤机制,自动为响应的header里添加max-age信息,这样浏览器就会在本地cache住这些资源。

我们最近的一个项目,前台使用extjs,使用extjs带来的成本就是所有的页面几乎都是js页面了。因为静态js的文件量大,且我们系统的运营地点非洲网络条件不太好,带宽资源比较宝贵,不能承受频繁的静态资源请求(这里需要提一点,即使是web服务器最终响应不需要更改的304请求,对系统也是一次带宽开销,我们也想尽力避免),于是我们想通过cache-contro将js文件cache在本地。但是这就带来一个问题,对于紧急发布的一些前台界面,因为超时机制会无法及时在系统层面体现。

所以我们必须实现一种机制,在发布了新的js后,对应的引用该js的地方都要能自动刷新。所以最简单的方法就是每次编译完后生成一个版本号,然后对每个引用js的url都添加上版本号就ok。这样就可以保证在一次发布周期内始终只有一个js版本。

Extjs的动态加载策略

Extjs实现了一套动态加载策略,可以通过js语言的方式去直接引入一个资源(Ext.require),这和我们平时使用的静态引用(<script src=" xxx")是完全不同的。所以决定研究一下extjs的动态加载机制。

目前网上有开源的extjs4的源码,在动态load script时&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值