fballiano / openmage-cssjs-versioning
OpenMage(以及Magento 1.9)的CSS/JS版本管理模块
Requires
- php: >=7.4.0
- magento-hackathon/magento-composer-installer: *
README
简要描述
为所有的CSS/JS添加?v=
,其中v
的值为最新的git提交哈希值。
原因
为了使搜索引擎高兴,你需要使用非常长的浏览器缓存有效期(带或不带CDN),但如果告诉浏览器缓存一个css或js一年,然后你需要修改它?浏览器将不会接收新版本,你的网站将会出错。
我的解决方案是在所有的CSS/JS URL中添加一个v=xxx
参数,这样缓存就会强制更新,新版本的文件将被存储在缓存中,直到下一次更新。
为了可靠和一致地做到这一点,我创建了这个模块,它拦截了http_response_send_before事件,尽可能地使用preg_regex,以实现尽可能的性能,添加v=xxx
参数。
这种方法也应该与全页缓存模块一起工作。
功能
如何生成用于v=xxx
参数的版本号?
此模块支持两种方法
- 使用最新的
Git提交哈希
(仅前6个字符)作为版本号 - 如果失败,则使用时间戳
首选git方法,因为生成的版本号只有在向仓库推送新更改时才会更改。然而,为了工作,OpenMage基本目录也必须是Git项目根目录,并且.git文件夹必须存在于所有你需要此功能工作的服务器上。
总结
- 自动读取最后的Git提交哈希,提取前6个字符
- 将此版本号保存在OpenMage配置缓存中1小时(如果你刷新配置缓存,也会刷新此值),以便尽可能减少对文件系统的冲击
- 如果git方法不工作,则版本号因当前时间戳(并缓存24小时)
- 解析输出HTML并拦截所有
<script
和<link
标签,提取URL并添加v=xxx
参数(使用?v
或&v
相应地) - 它仅捕获具有
src
参数的<script
标签和具有href
参数的<link
标签,但只有当链接类型为icon
或stylesheet
时(我们必须避免错误地修改规范)
限制
- 您还必须在生产服务器上具有.git文件夹(请确保在您的.htaccess中拒绝对.git/*的HTTP访问)
警告
此模块“原样提供”,我不会对任何问题或损坏负责。
安装
通过composer(composer require fballiano/openmage-cssjs-versioning
)、modman(modman clone https://github.com/fballiano/openmage-cssjs-versioning
)或您喜欢的任何其他方式安装
支持
如果您对此扩展有任何问题,请在GitHub上提交问题。
贡献
任何贡献都将非常受赞赏。最佳贡献代码的方式是在GitHub上打开一个拉取请求。
开发者
Fabrizio Balliano
http://fabrizioballiano.com
@fballiano
许可证
版权
(c) Fabrizio Balliano