Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Caching cdn动态查询?还是不_Caching_Optimization_Cdn - Fatal编程技术网

Caching cdn动态查询?还是不

Caching cdn动态查询?还是不,caching,optimization,cdn,Caching,Optimization,Cdn,我需要一些关于CDN使用动态查询的反馈。我很想知道动态查询和静态查询之间的最佳选择 在我的例子中,我们有一个包含大量静态内容的网络游戏。我们每两周执行一次Realease,我们在CDN上添加了一些内容,但也更新了一些内容 我认为有三种可能的方法: 1) 对每个文件使用版本管理(例如:welcome01.jpg、welcome02.jpg) 2) 对每个文件使用动态查询(例如:welcome.jpg?v=01,welcome.jpg?v=02) 3) 使用无版本化的命名,并对每个已修改的文件在CD

我需要一些关于CDN使用动态查询的反馈。我很想知道动态查询和静态查询之间的最佳选择

在我的例子中,我们有一个包含大量静态内容的网络游戏。我们每两周执行一次Realease,我们在CDN上添加了一些内容,但也更新了一些内容

我认为有三种可能的方法: 1) 对每个文件使用版本管理(例如:welcome01.jpg、welcome02.jpg) 2) 对每个文件使用动态查询(例如:welcome.jpg?v=01,welcome.jpg?v=02) 3) 使用无版本化的命名,并对每个已修改的文件在CDN上执行失效(清除)

对我来说,解决方案3是最糟糕的,因为我们不能设置高缓存,我们必须使CDN中已经更新的每个文件无效

在解决方案1和2之间,我认为1是最好的,因为当我将新的静态内容上载到我的orign服务器上并在CDN上执行部署时,我的所有内容都在每个边缘发送。在这种情况下,我可以设置一个高缓存内容值。 在解决方案2中,我认为性能比解决方案1最差,因为当我在源服务器中添加新内容(进行一些文件更新)时,只有新文件被发送到边缘。仅当客户端使用新参数(例如:welcome.jpg?v=03)执行查询时,更新的文件才可用。在这种情况下,边缘服务器将在我的源服务器上下载welcome.jpg,并将其与新参数关联。但他没有在所有其他边缘复制

对于我来说,解决方案2在性能级别上小于解决方案1,但对于这两个解决方案,我们可以设置一个较高的缓存内容值

你能给我你的意见或更多的信息吗

提前谢谢


PS:我们使用cloudfront,但这是所有CDN提供商的一个普遍问题。

并非所有的代理缓存或ISP都会使用querystring单独缓存资源。换句话说,它们可能不会正确地使缓存无效。更多关于这个

所以我不得不说,如果您想确保您的新文件在那里并已下载,那么解决方案1更安全。一个新的唯一URI将为您提供此功能。为此,对文件进行版本控制将非常有效

根据CDN的工作方式,您可能可以使用mod rewrite强制下载,而不必手动繁琐地修改文件

例如,如果您的CDN可以通过CNAME获取您的更改,例如,这就是MaxCDN的工作方式,您可以执行以下操作

基于文件名的缓存破坏
#如果您没有使用生成过程来管理文件名版本的更新,
您可能想考虑启用以下指令来路由所有
#请求,如`/css/style.12345.css`到`/css/style.css`。
#要理解为什么这比“*.css?v231”更重要和更好,请阅读:
# http://stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^(.+)\(\d+)\(js | css | png | jpg | gif)$$1.$3[L]
基于文件夹的缓存破坏 或者,如果您不需要/不想对每个文件进行版本控制,并且不得不乏味地更改所有代码和css。如果您有一个完整的文件夹版本系统,而不是基于文件的系统,可能会更好。例如,假设您的物理资源文件位于/assets/css和/assets/img和/assets/js中,您可以使用mod rewrite将/v1.0/assets/*映射到实际文件夹。通过这种方式,您可以像平常一样上载新更新的资源,然后在站点配置中增加版本变量,并使所有资源指向新文件夹。这是类似的修改

<IfModule mod_rewrite.c>
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^/v([0-9\.]+)/assets/(.+)$ /assets/$2 [L,QSA]
</IfModule>

重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^/v([0-9\.]+)/assets/(.+)$/assets/$2[L,QSA]

并非所有代理缓存或ISP都将使用querystring单独缓存资源。换句话说,它们可能不会正确地使缓存无效。更多关于这个

所以我不得不说,如果您想确保您的新文件在那里并已下载,那么解决方案1更安全。一个新的唯一URI将为您提供此功能。为此,对文件进行版本控制将非常有效

根据CDN的工作方式,您可能可以使用mod rewrite强制下载,而不必手动繁琐地修改文件

例如,如果您的CDN可以通过CNAME获取您的更改,例如,这就是MaxCDN的工作方式,您可以执行以下操作

基于文件名的缓存破坏
#如果您没有使用生成过程来管理文件名版本的更新,
您可能想考虑启用以下指令来路由所有
#请求,如`/css/style.12345.css`到`/css/style.css`。
#要理解为什么这比“*.css?v231”更重要和更好,请阅读:
# http://stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^(.+)\(\d+)\(js | css | png | jpg | gif)$$1.$3[L]
基于文件夹的缓存破坏 或者,如果您不需要/不想对每个文件进行版本控制,并且不得不乏味地更改所有代码和css。如果您有一个完整的文件夹版本系统,而不是基于文件的系统,可能会更好。例如,假设您的物理资源文件位于/assets/css和/assets/img和/assets/js中,您可以使用mod rewrite将/v1.0/assets/*映射到实际文件夹。通过这种方式,您可以像平常一样上载新更新的资源,然后在站点配置中增加版本变量,并使所有资源指向新文件夹。这是类似的修改

<IfModule mod_rewrite.c>
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^/v([0-9\.]+)/assets/(.+)$ /assets/$2 [L,QSA]
</IfModule>

重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^/v([0-9\.]+)/assets/(.+)$/assets/$2[L,QSA]

谢谢Anthony,非常有意思,特别是知道查询字符串不是一直缓存的。谢谢Anthony,非常有意思,特别是知道查询字符串不是一直缓存的。