首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于NGINX + Express的URL指纹/累进缓存

基于NGINX + Express的URL指纹/累进缓存
EN

Stack Overflow用户
提问于 2013-11-19 14:44:26
回答 1查看 5.2K关注 0票数 13

在NGINX (代理)和Node / Express堆栈中处理侵略性缓存和URL指纹的推荐技术是什么?

谷歌在他们的最佳实践指南中推荐"use fingerprinting to dynamically enable caching.",这正是我想要达到的目标。

我看过很多不同的指纹识别方法,但我很难理解在什么样的场景下,这些指纹实际上会产生新的指纹,以及开发过程中的哪一部分是最好的选择。我之前曾假设,如果对文件进行“最后修改”更改,那么服务器将生成另一个指纹,但情况似乎还不是这样。(除非我配置错了)

以下是几种不同的方法:

运行时指纹

构建指纹

CI指纹

所以我希望有人能回答几个问题:

  1. 指纹甚至是ETags的要求,还是跨浏览器支持中有太多漏洞?
  2. 资产应该位于CDN上,那么这个问题主要是由CDN提供者来解决的吗(如果是这样的话,如何在没有手动参与的情况下更新引用)?
  3. 如何在不需要手动缓存的情况下生成新的指纹?
  4. 对于这个指纹在开发者管道中的位置有什么建议呢?我想避免依赖于像Grunt.js这样的

我觉得我错过了一些显而易见的东西,所以如果你能回答其中的一个问题,我会非常感激的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-20 03:52:21

指纹和电子标签是单独的功能,以减少负载时间。

如果浏览器已经缓存了资产,并且资产没有更改,Etags就可以避免重新发送资产。但是,浏览器仍然需要一个单独的HTTP往返才能发送一个If-None匹配,然后返回304而不是修改。

加速HTTP往返的最佳方法是避免进行往返。当网站的第二页使用与第一页相同的资产,且这些资产具有遥远的未来缓存过期头时,则在第一次请求这些资产时,甚至不需要为这些资产进行一次往返旅行。

指纹是为每一项资产提供一个从其内容中派生出来的唯一名称的技术。然后,当资产中的一个位(例如CSS包)发生变化时,它的名称就会发生变化,因此浏览器将得到更新的资产。而且,由于指纹使用内容的加密散列,所以只要资产是相同的,在多个服务器上计算唯一名称是相同的。任何地方(CDN、ISP、网络设备或web浏览器中的缓存)都能够保存每个资产的副本,但是由于HTML引用了每个资产的唯一名称,所以只有正确版本的资产才能从缓存中得到服务。

每个浏览器都支持电子标签和指纹。

  1. 指纹是不需要的,这是一个优化。如果您正在使用已经需要构建步骤的Stylus、Browserify和AngularTemplateCaches等技术,那么添加指纹是免费的。
  2. 您的HTML页面将有类似于/aboutus的名称,而不是通过指纹获得的/aboutus-sfghjs3646dhs73shwsbby3。您链接到的所有解决方案都支持Javascript、CSS和图像的指纹,以及将指纹名称中的内容动态替换为HTML的方法。因此,HTML将引用/css-hs6hd73ydhs7d7shsh7w,直到您更改CSS中的一个字节,然后它们将引用/css-37r7dhsh373hd73 (一个不同的文件)。
  3. 只有在修改文件时才需要生成指纹,通常应该在服务器重新启动或生成时生成指纹。
  4. 我推荐Asset,它支持许多资产类型,并且可以从RAM中提供指纹资产,或者将它们推送到CDN中。每次启动Express都会生成所有指纹。
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20074521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档