资源文件指纹

1. 问题

在实际项目开发中,静态资源文件的更新需要注意浏览器缓存的问题。

在现在浏览器一般都会开启资源文件缓存的情况下,如果一个脚本或者样式表内容更新了,但名称和路径没变更,那么很大可能会因为浏览器缓存导致页面出问题。

每次内容变更都更新文件名的解决方案明显不可取,因此 Leap 针对这个问题提供了很好的处理方法。

2. 属性指定附加文件指纹

这里的文件指纹可以理解为文件的哈希值,不同内容的文件一般文件指纹都是不一样的。

当然 Leap 用的并非真正的文件哈希值,不过不同内容的文件还是很难碰撞出一样的文件指纹的,实际使用过程中不需要担心这一点。

我们可以在资源文件元素上使用 assets-src 属性替代 src 属性来让 Leap 自动为我们给这个资源文件加上文件指纹

比如原来的资源文件引用声明是这样的:

<script type="text/javascript" src="/static/js/hello.js"></script>

经过 HTPL 渲染后除了给路径自动加上应用上下文前缀之外没有其他处理。

如果我们现在改成这样:

<script type="text/javascript" assets-src="/js/hello.js"></script>

这个时候渲染结果将是(假设应用上下文是 /demo):

<script type="text/javascript" src="/demo/assets/js/dello-2856139799.js"></script>

我们在使用了 assets-src 属性的同时还省略了资源路径的前缀 /static,这是因为 Leap 默认将 webapp 目录下的 static 目录作为资源文件目录的根。

因此在指定了 assets-src 属性的时候就可以省略这个默认的资源文件根目录。

3. 前缀指定附加文件指纹

除了以上手动指定的方式,还有另外一种比较直观的方式也可以让 Leap 为我们处理文件指纹。

当资源文件路径是以虚拟路径前缀 /assets 开头的时候,Leap 会自动处理文件指纹。

关于虚拟路径前缀 /assets ,可以查看之前 MVC 章节下对静态资源的介绍。

比如这样设置其实跟上面是等效的:

<script type="text/javascript" src="/assets/js/hello.js"></script>

其实 Hello.js 在服务器上真实的路径是在 webapp 下的 /static/js/hello.js

但是我们前面说过,static 目录默认是资源文件目录的根,因此我们可以用 /assets 代表资源根目录。

需要注意的是,以上渲染生成的文件指纹路径对应的路由,Leap 也会做相应处理返回对应指纹的文件,不需要开发人员再做额外工作。

上一篇:增强语法属性 下一篇:与 JSP 混合使用

results matching ""

    No results matching ""