我必须提出压缩,版本(用于缓存目的)的解决方案,并可能将我们的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周期(我猜你只是第一次做工作然后缓存,但仍然)但我感觉我可能遗失了什么?
谢谢! 标记
答案 0 :(得分:8)
我认为一种好的方法是针对不同的环境使用不同的策略:
我有一些使用YUI compressor用于Javascript和CSS的经验,并且已经学习(很难)测试缩小的JS和CSS确实非常重要。
创建静态缩小的JS和CSS文件作为生产构建的一部分具有以下好处:
答案 1 :(得分:4)
最好的方法是完全没有,因为所有现代浏览器和服务器都处理Gzip编码。看数字:
这是一个相当大的JS文件,有很多不必要的空白,但在最后的等式中,你已经节省了惊人的2k!不仅如此,而且由于缓存这个节省是每个访问者,而不是每页。 Whoo-hoo,现在值得一试,不是吗?
您可以通过裁剪横幅顶部的像素宽度来节省10倍,并且99%的用户使用宽带,您可以节省大约1毫秒的下载时间。打破飘带和香槟!
JS压缩甚至更糟,因为你只是在每个页面负载上解压缩你的客户。 gzip之后的节省也同样悲惨。
严重。增加的复杂性和调试是不值得的,除非你的目标是移动市场(甚至假设用户仍然使用CDMA,而不是3G)或每天有10亿次点击。否则就不要打扰了。
答案 2 :(得分:3)
我会说在第一次请求和缓存时做得更好。这样做的原因是您可以按可读格式更新css,而无需返回重建。您可以将缓存基于css文件,以便在更改缓存后立即刷新。
约什
答案 3 :(得分:1)
您可以在运行时执行此操作,但仅在需要时执行此操作。这为您提供了最大的灵活性。特别是PHP的一个问题,否则没有构建步骤(即你不想在没有构建步骤的情况下添加一个),但对于其他平台来说仍然存在问题。
冒着自我推销的风险,您可能需要阅读Supercharging Javascript in PHP和Supercharging 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。