Month: June 2010

高性能网站建设指南 — 笔记– 8.将脚本放在底部

我们知道浏览器可以并行下载内容。 但脚本却会阻塞这种并行机制。 浏览器遇到脚本时,就不会另起线程下载别的组件。 所以,脚本应该放在最后,以让浏览器逐步呈现其他组件。 你不放最后也可以,可以通过“DEFER”脚本告诉浏览器:下载此脚本时不必阻塞其他组件(可惜的是,firefox不支持DEFER) 最后,还要注意到并不是所有脚本都可以放在最后。带了document.write的脚本就不行。

高性能网站建设指南 — 笔记– 7.浏览器的并行下载

打开一个页面时,浏览器在一般情况下会用两个线程下载同一个主机上的内容。 举例说,你的页面包含四个来自 foo.com的图片和四个来自bar.com的图片。 那浏览器就会先,     并行下载foo.com中的两个图片和bar.com中的两个图片   再并行下载foo.com中的另两个图片和bar.com中的另两个图片 但这只是HTTP1.1的建议。很多浏览器都可以自己设置并发数。不过,这个并发数并不是越来越好,因为它会占用更多的CPU和带宽。

高性能网站建设指南 — 笔记– 6.将样式表放在顶部

作者认为将样式表放在顶部,而不是底部,可以避免IE的白屏问题。 他说,如果样式放在底部,由于IE在渲染页面上的组件时还没拿到样式,因此就不会渲染这个组件,直到从页面底部拿到样式为止。 在拿到之前会一直白屏。 但按我的测试,测试不出他说的这种情况。这条规则的说服力对我来说不是很大。

高性能网站建设指南 — 笔记– 5.压缩

1. 通过压缩减少须传输的字节数,以加快传输时间 2. 什么东西应该压缩?      a.图片、PDF等二进制文件不应该压缩,因为它们已经压缩过了      b.太小的文件不应压缩。为小文件压缩而耗费一些CPU时间不太值得。一般来说,应该只对1KB或2KB以上的文件进行压缩。 3.浏览器端的支持     支持HTTP1.1的浏览器才能展现压缩过的内容。如果你用的是APACHE服务器,则可以设置“浏览器白名单”,只对名单里的客户端传输压缩过的内容。 4.具体怎么配置?    Apache : mod_gzip_on (Apache 1.3), mod_defalte (Apache 2.x)    考虑到代理服务器的情况,应在响应头中设置 Vary: Accept-Encoding    代理服务器可能会带来很多复杂性(请看原书)。可以通过 Cache-Control:Private干脆禁止代理缓存, Google和Yahoo就是这样干的。 附:HTTP中浏览器和服务器怎么就压缩问题“握手”?    1.浏览器发出的请求头有:Accept-Encoding: gzip,deflate, 表示本浏览器支持压缩过的东西    2.服务器发出的响应头有:Accept-Encoding: gzip,表示本服务器已将内容进行了gzip压缩。如果服务器不支持压缩,则不提供此头。

高性能网站建设指南 — 笔记– 4.通过Http头来设置缓存

通过Http头设置缓存,可以减少重复的HTTP请求  — 因为第二次下载时只需从浏览器缓存中去拿。 有两种头可以设置。    1. Expires: “此图片将在2010年12月30日过期,在此之前的重复请求可以使用浏览器中的缓存”    2. Cache-Control max-age: “在未来10年里都可以使用浏览器中的缓存来获得此图片” 第一种头用的是绝对时间,这就存在时钟同步的问题,而且真正到期后服务器端还要更新一下这个日期;第二种头的问题在于它不适用于只支持Http 1.0的浏览器 第三种方案是:如果你用的是Apache服务器,可以使用mode_expires指令来设置超时。它可以避免上述第二种方案的问题。 ============================================================================== 现在的问题是,如果静态内容真的变了,需要浏览器刷新缓存怎么办? 办法是修改静态内容的文件名。当它被请求时,浏览器中由于没有相应的缓存,所有就会请求服务器以重新下载。 当然这会带来版本管理上的负担。 ===================================================================== 注意:如果没有设置缓存头浏览器仍会试图通过缓存来提高效率;第二次请求一个图片时,浏览器会先发送一个 Conditional Get Request问一下此内容是否已被修改,如果没有的话就使用缓存。

高性能网站建设指南 — 笔记– 3.使用CDN发布静态内容

CDN是 Content Delivery Network的缩写。 通过把静态内容发部到多台服务器上,可以在用户访问时选择较近的服务器给予响应,以缩短响应时间。 比如说,把我们网站的静态内容发布到两台服务器上,一台放在教育网,另一台放在ChinaNet; 教育网用户将从前一台下载内容,公众网将从后一台下载内容。 可以自己搞CDN(如果有钱的话),也可以找CDN供应商。后者的缺点是你的系统发布受到供应商的约束,并且如果供应商当了,你也当了。

高性能网站建设指南 — 笔记– 2.合并脚本和样式表

把原有的多个样式表文件合成一个,可以使用户在浏览网页时只需下载一个CSS文件。这样减少了HTTP请求,速度自然就快了些。 Javascript文件也一样。 不过这样做似乎不符合模块化的开发原则。 本书作者提出的建议是:开发时仍用多个文件,部署时再把它们合并在一起。 

[Freemarker XML Processing] XPATH里必须包含namespace,即使表达式只与默认 namespace有关

原文这样说的: =================================================================== Unfortunately, XPath does not support this idea of a default namespace. Thus, in XPath expressions, element names without prefixes always select the elements that does not belong to any XML namespace. However, to access elements in the default namespace you can directly use prefix D, for example: doc["D:book/D:chapter[title=’Ch1′]"].