今天参加Web标准化交流会的一些补充
今天下午参加了《Web标准化交流会》广州站第七期的交流会,其中有网易邮箱的同学分享他们的前端开发中的架构和经验,百才网的同学分享他们对于项目中协同的理解,和Vingel同学的vim的视频分享。
其中网易同学分享时提到的14条前端优化的方法,出自于Yahoo的YUI前端开发工程师写的《高性能网站建设指南》,绝对是值得前端的同学详读的一本好书。当时提到了使用Expires头和Etag的使用。回家再翻了一下书,发现我当时说的不够准确,特此记录如下:
1、Expires头是以服务器时间来设定的。如:Expires: Thu, 15 Apr 2010 20:00:00 GMT。那么如果客户端和服务器时间不同步的话,那么实际的缓存效果就不可控了。
2、在HTTP1.1中,引入了Cache-Control头来改善这个问题。他是以客户端时间为基数,来设定一个有效期,单位为秒。如:Cache-Control:max-age=315360000(设定有效期为当次下载后10年)。
3、可以同时指定Expires头和Cache-Control头。而mag-age的优先级将大于Expires头。
4、apache里有mod_expires模块来设置Expires头以相对时间的方式返回值。
5、当用户本地为空缓存时,所有的请求都会被下载,产生200的状态码。当本地缓存有效时,而ie设置为自动(选项为每次访问时、每次启动时、自动、从不,默认为自动),则httpwatch可以看到为(cache),不会产生http请求。当用户明确重载(如crtl+F5、本地缓存过期或ie设置为每次访问时),则根据Last-Modified和服务器进行校验,如果Last-Modified一致,则返回If-Modified-Since头,重设本地缓存有效期,产生304状态码。
6、Http1.1中提供了Etag的校验方式。apache1.3和2.x的Etag格式是:inode-size-timestamp。IIS5.0和6.0的Etag格式为Filetimestamp:Changenumber。而对于有CDN网络的网站来说,不同服务器之间的Etag是不同的。
7、Etag的If-None-Match头比Last-Modified的If-Modified-Since头具有更高的优先级。所以如果Etag不匹配,但Last-Modified相同,也会产生200的状态码,而不是304。
8、IIS和apache都可以配置Etag的。一般建议apache设置为文件大小+时间戳,而IIS则只有时间戳。但最好的方法还是完全移除,只使用Last-Modified就足够了。
9、我觉得典型的闭包表现形式为:
a = function () {
alert(\'test\');
}
或
function test () {
var aa = \'hello\';
return (function (name) {
return name + \' world\';
})(aa);
}
10、闭包只是内存泄露的一种方法,但不是必然。
- 前端优化中的Javascript脚本加载测试(总结) - 07月02日 09:20
- 前端优化中的Javascript脚本加载测试(一) - 06月01日 00:21
