使用NGINX + Express进行URL指纹识别/极速caching

在NGINX(代理)和Node / Express堆栈中处理主动caching和URL指纹的推荐技术是什么?

Googlebuild议“使用指纹识别来dynamic启用caching”。 在他们的最佳实践指导方针,这正是我想要实现的。

我已经看了很多不同的指纹识别方法,但是我很难理解,在什么情况下,这些方法实际上会产生一个新的指纹,最好坐在开发stream程的哪一部分。 我以前认为,如果在文件上的“最后修改”更改,然后服务器将生成另一个指纹,但目前似乎不是这种情况。 (除非我configuration错误)

以下是几种不同的方法:

运行时指纹识别

  • dactyloscope
  • 静态资产

build立指纹识别

  • 资产架
  • 节点版本资产

CI指纹识别

  • 咕噜指纹
  • 咕噜-资产版本

所以,我希望有人可以回答一些问题:

  1. 即使有ETags的要求,或者在跨浏览器支持方面是否有太多漏洞?

  2. 资产应该可以坐在CDN上,所以这个问题很大程度上推迟到CDN提供商(如果是这样的话,你如何更新参考而无需手动参与)?

  3. 如何在没有手动清除caching的情况下生成新的指纹?

  4. 关于这个指纹将在开发者渠道中的位置的build议是什么? 我想避免对像Grunt.js的依赖

我觉得我错失了一些非常明显的东西,所以如果你只能回答其中的一个问题,我会很感激。

指纹识别和Etags是减少加载时间的独立功能。

如果浏览器缓存了资产并且资产没有改变,则Etags避免重新发送资产。 但是,浏览器仍然需要单独的HTTP往返发送If-None-Match并返回304 Not Modified。

加快HTTP往返的最好办法就是避免做一个。 当一个网站的第二页使用与第一页相同的资产时,这些资产将有大量的未来缓存过期头,那么在第一次之后请求这些资产时甚至不需要进行单次往返。

指纹识别是为每种资产提供一个从其内容派生的唯一名称的技术。 然后,当一个资产(比如一个CSS包)中的一个位发生变化时,它的名字就会改变,所以浏览器将获得更新后的资产。 而且,由于指纹识别使用内容的加密散列,因此只要资产相同,多个服务器上的唯一名称就会相同。 各处的缓存(CDN,ISP,网络设备或Web浏览器中)都可以保留每个资产的副本,但由于HTML引用了每个资产的唯一名称,所以只有正确版本的资产从缓存中。

每个浏览器都支持Etags和fingerprinting。

  1. 指纹是不需要的,这是一个优化。 如果您使用的Stylus,Browserify和AngularTemplateCaches等技术已经需要构建步骤,那么添加指纹是免费的。

  2. 你的HTML页面将有/aboutus /aboutus-sfghjs3646dhs73shwsbby3而不是/aboutus-sfghjs3646dhs73shwsbby3他们会得到指纹。 您链接的所有解决方案都支持Javascript,CSS和图像的指纹识别,以及将指纹名称动态替换为HTML的方法。 所以,HTML会引用/css-hs6hd73ydhs7d7shsh7w直到你改变了CSS中的一个字节,然后他们会引用/css-37r7dhsh373hd73 (一个不同的文件)。

  3. 只有在文件被修改时才需要生成指纹,这通常应该在服务器重新启动或建立时进行。

  4. 我推荐资产架,它支持大量的资产类型,并可以从RAM提供指纹资产或推送到CDN。 每次Express启动时,它都会生成所有指纹。