我有一个用PHP编写的webapp,我用header()函数生成头文件。automate http expires
问题是,当我更改我的应用程序的JavaScript代码时,在客户端,旧的JavaScript将不会执行,因为缓存到客户端浏览器。
如何自动化头过期的过程?我认为每次修改javascript代码都必须比修改该函数更好。
我有一个用PHP编写的webapp,我用header()函数生成头文件。automate http expires
问题是,当我更改我的应用程序的JavaScript代码时,在客户端,旧的JavaScript将不会执行,因为缓存到客户端浏览器。
如何自动化头过期的过程?我认为每次修改javascript代码都必须比修改该函数更好。
唯一的防弹解决办法是改变服务器端资源的文件名:
来源:雅虎Best Practices for Speeding Up Your Web Site:
请记住,如果你使用一个遥远的未来Expires头你有每当组件更改时更改组件的文件名。在Yahoo!我们经常使这一步成为构建过程的一部分:版本号嵌入到组件的文件名中[...]
当然,这个过程必须是自动化的。我们将JavaScript文件内容哈希附加到文件名中。
既然你没有提供太多细节只是一般的指针:
通常你可以在Web服务器配置Expires
和其他头PARAMS - 无论是在全球和/或每“文件夹”等
您可以让JS文件在1小时后过期...这样,您就会知道在更改1小时后,所有客户端都将使用新的JS文件...
如果您需要更改生效即使对于目前处于活动状态的客户来说,也不会有太大的帮助 - 你将不得不做一些AJAX魔术......
将每个版本的URI更改为脚本。
这可以通过添加查询字符串来完成。例如,您可以通过从您的版本控制系统获取版本号并将其插入到您的模板中来自动执行此操作。
这将允许您有很长的到期时间(用于优化缓存),并且每次发布新版本时仍会获得新鲜的JavaScript(只要HTML文档未从缓存中加载(但它们倾向于与JS相比,缓存时间短))。
版本JavaScript文件的最佳方式是在其文件名中包含版本号。当你修改代码时,你会碰撞版本号,然后你修改任何包含JS文件的网页来引用新的文件名。然后你只需要自己过期网页,他们会自动引用新的JS文件。 JS文件可能会有很长的到期时间(数月或数年),因此您可以获得最大的缓存效益。
这也确保您获得一组一致的JS文件。
这是jQuery如何使用版本控制。
这是生产中还是开发时的问题? –