8

我正在使用 Magento,并且有一个功能可以将 CSS 和 Javascript 合并到一个大文件中。

不论其优劣,存在以下问题:

最终文件被缓存在多个级别,包括但不限于:

  • 亚马逊云前
  • 代理服务器
  • 客户端浏览器缓存

Magento 使用连接的 css 文件名的 MD5 和来为合并的 css 文件生成新的文件名。这样每个具有一组不同 css 文件的页面都会得到一个适当的合并 css 文件。

为了解决缓存问题,我还将文件修改时间戳包含在该哈希中,以便在每次修改 css 文件时生成一个新的哈希。

因此,非重新验证缓存分数的全部优势,但如果发生更改,它会立即可见,因为资源链接已更改。

到现在为止还挺好:

唯一的问题是,用于生成 has 的文件名只是通常在 HTML-Head 块中直接引用的文件名,并且包括这些文件中的 css 导入

因此,在 css 文件中导入的文件的更改不会导致新的哈希值。

不,我真的不想递归解析所有导入并扫描它们或类似的东西。

我宁愿考虑基于目录的解决方案。有什么东西可以在文件系统的基础上有效地监控“目录内的最后更改”吗?

我们正在使用 ext4。

或者也许还有另一种方法,也许是使用 find 命令,它可以根据 inode 索引完成所有工作?

类似的东西?

我见过很多程序无需扫描整个文件系统即可立即“看到”更改。我相信在 linux 下也有某种“文件操作监视”守护进程可用。

问题是 css 目录非常大。

谁能指出我正确的方向?

4

4 回答 4

7

我建议您在修改依赖 php 文件之一时使用独立于 php 的守护程序来修改主 css 文件的更改日期。您可以为此使用 dnotify,例如:

dnotify -a -r -b -s /path/to/imported/css/files/ -e touch /path/to/main/css/file;

每次修改其他文件夹中的一个文件时,它将在主 css 文件上执行“触摸”(-a -r -b -s = 任何访问/递归目录查找/在后台运行/无输出)。或者您可以执行任何其他操作并通过 PHP 对其进行测试。

于 2011-07-22T11:03:16.883 回答
2

如果你使用命令

ls -ltr `find . -type f `

它将为您提供所有文件的长列表,底部是最新的。

于 2011-07-22T10:15:46.817 回答
2

尝试查看 inotify 包,以便在目录中发生修改时通知您。

于 2011-07-22T10:18:29.363 回答
1

我从未使用过它,但显然有对 PHP 的 inotify 支持

(inotify 将是在 Linux 下获取通知的最有效方式)

于 2011-07-22T10:19:30.973 回答