我正在构建一个AJAX密集型Web应用程序(使用ASP.NET,JQuery和WCF Web服务),我正在研究构建一个HTTP处理程序,它处理我的JavaScript文件和CSS文件的脚本组合和压缩。我知道不组合脚本通常是一种不太喜欢的方法,我相信这可能是我最终会采用的方式,但我的问题是这个......
由于我的许多JS文件都是由我使用的控件引起的,所以在第一次加载后它们是否会被浏览器缓存?由于可以在我的Web应用程序的许多页面上找到这么多控件,因此实际上组合我的所有脚本并提供一个文件(每个页面会有所不同)或者提供将要获得的单个文件更快缓存?我想我得到的是,通过启用脚本组合我现在失去了浏览器的部分缓存能力?我知道我可以缓存组合脚本,但组合脚本对于每个页面都是不同的,而对于单独的控制脚本,每个页面都将被缓存,并且每个页面调用的新脚本数量将是最小的。
这有什么意义吗?想法?
答案 0 :(得分:1)
您服务的JS文件数量越少,您的网页就越快,因为到服务器的往返次数较少。我会手动将所有常见的js代码放入一个文件(或尽可能少的文件),将所有css代码放入一个文件等,而不用担心使用处理程序来组合文件。处理程序将花费处理时间来合并文件,因此您也将支付罚款。您可以在IIS上打开gzip压缩并让它为您处理。我会在生产中使用的Javascript文件上运行类似YUI Compressor的内容。
如果处理程序在页面之间更改文件内容,浏览器将无法对其进行缓存。如果您正在使用SSL,这一点将没有实际意义,因为浏览器无论如何都不会缓存文件。
EDIT 我已经纠正了一些浏览器(如FF)可以缓存SSL内容但不是全部。
答案 1 :(得分:1)
正如其他提到的:minify,gzip和打开缓存(设置过期时间并看到你支持etags)你拥有的一个静态JS文件和你拥有的一个静态CSS文件。除此之外,建议尽可能早地加载你的CSS文件和你的JS文件(JS文件加载阻止其他下载,如果它尽快获得CSS,浏览器渲染页面的速度更快)。如果您有许多小图像/图标,精灵也会有所帮助。从子域加载静态内容将有助于浏览器同时下载更多内容,您可以删除这些子域的所有cookie以降低http标头大小。
您可以咨询YSlow进行性能分析,这是一个很棒的工具!
答案 2 :(得分:0)
通常不太优选
是现场js吗?我想到了JavaScriptMVC,它在编译生产时将所有代码压缩成一个文件,而不是开发......我相信这是一个沉重的重量。
答案 3 :(得分:0)
通常最好组合所有脚本。在这种情况下,您将减少http开销。缩小的控件脚本通常非常小。在极少数情况下,当您使用相当大的控件时,无法将其与主js组合。