资源文件指纹
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 也会做相应处理返回对应指纹的文件,不需要开发人员再做额外工作。