CSS压缩&合并/ js缩小 - 在运行时或构建时更好吗?

时间:2009-06-22 11:35:32

标签: asp.net javascript css caching compression

我必须提出压缩,版本(用于缓存目的)的解决方案,并可能将我们的JS和CSS文件结合起来,到目前为止我已经看到了两种主要方法:

1)在构建时:作为MSBuild任务或类似任务。 2)在运行时动态:作为.js和.css文件的自定义HTTPHandler(我们是ASP.NET btw),这样的内容最终会出现在你的页面中:

<link rel="stylesheet" type="text/css" href="~/StyleSheetHandler.ashx?stylesheets=~stylesheets/master.css" /> 

任何人都可以提供每个人的专业知识和信息吗?就个人而言,我无法看到动态地做这一点并在每次请求时浪费CPU周期(我猜你只是第一次做工作然后缓存,但仍然)但我感觉我可能遗失了什么?

谢谢! 标记

5 个答案:

答案 0 :(得分:8)

我认为一种好的方法是针对不同的环境使用不同的策略:

  • 没有压缩开发(用于开发和调试)
  • 测试环境的
  • 运行时压缩(灵活,不是性能关键)
  • 分段和生产的构建时压缩(已测试,性能至关重要)

我有一些使用YUI compressor用于Javascript和CSS的经验,并且已经学习(很难)测试缩小的JS和CSS确实非常重要。

创建静态缩小的JS和CSS文件作为生产构建的一部分具有以下好处:

  • 他们经过测试
  • 静态文件,可以在没有ASP.NET开销的情况下提供服务
  • 可以是浏览器缓存
  • 应该是webserver-gzipped

答案 1 :(得分:4)

最好的方法是完全没有,因为所有现代浏览器和服务器都处理Gzip编码。看数字:

  • cfform.js - 21k
  • cfform-minified.js - 12k
  • cfform.js.gz - 4.2k
  • cfform-minified.js.gz - 2.2k

这是一个相当大的JS文件,有很多不必要的空白,但在最后的等式中,你已经节省了惊人的2k!不仅如此,而且由于缓存这个节省是每个访问者,而不是每页。 Whoo-hoo,现在值得一试,不是吗?

您可以通过裁剪横幅顶部的像素宽度来节省10倍,并且99%的用户使用宽带,您可以节省大约1毫秒的下载时间。打破飘带和香槟!

JS压缩甚至更糟,因为你只是在每个页面负载上解压缩你的客户。 gzip之后的节省也同样悲惨。

严重。增加的复杂性和调试是不值得的,除非你的目标是移动市场(甚至假设用户仍然使用CDMA,而不是3G)或每天有10亿次点击。否则就不要打扰了。

答案 2 :(得分:3)

我会说在第一次请求和缓存时做得更好。这样做的原因是您可以按可读格式更新css,而无需返回重建。您可以将缓存基于css文件,以便在更改缓存后立即刷新。

约什

答案 3 :(得分:1)

您可以在运行时执行此操作,但仅在需要时执行此操作。这为您提供了最大的灵活性。特别是PHP的一个问题,否则没有构建步骤(即你不想在没有构建步骤的情况下添加一个),但对于其他平台来说仍然存在问题。

冒着自我推销的风险,您可能需要阅读Supercharging Javascript in PHPSupercharging CSS in PHP,其中概述了问题,方法和最佳做法。示例是在PHP中,但代码本身是微不足道的。问题和原则适用于任何Web平台。

答案 4 :(得分:0)

我认为你应该在运行时制作它,除非你的CSS和JS文件非常庞大(超过1MB)。 通过设置一些http headers可以强制使用浏览器缓存,当您希望应用程序在客户端强制重新加载时,只需更改HTTP参数:

<link rel="stylesheet" type="text/css" href="~/StyleSheetHandler.ashx?stylesheets=~stylesheets/master.css&token=1" />

您可以更改令牌以强制在客户端重新加载CSS。