Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.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
Php 在Laravel中使用HTTP缓存,静态文件路径生成_Php_Laravel_Browser Cache_Http Caching - Fatal编程技术网

Php 在Laravel中使用HTTP缓存,静态文件路径生成

Php 在Laravel中使用HTTP缓存,静态文件路径生成,php,laravel,browser-cache,http-caching,Php,Laravel,Browser Cache,Http Caching,我计划在下一个项目中使用Laravel框架。 到现在为止,我一直在组织项目中静态内容的链接(图像、脚本等) 例如,我有这个缓存选项(do cache all static files,nginx): 如何创建指向main.js文件的链接?如果文件被修改,如何告知代理文件已过期 在我目前的项目中,我有一个版本控制系统,它使用文件修改时间为文件生成唯一的前缀。所以链接会像下一次文件更改时,链接会自动更改 在Laravel中实现此功能的最佳实践是什么?谢谢 我会将其作为一个查询字符串来执行,它很简单,

我计划在下一个项目中使用Laravel框架。 到现在为止,我一直在组织项目中静态内容的链接(图像、脚本等) 例如,我有这个缓存选项(do cache all static files,nginx):

如何创建指向main.js文件的链接?如果文件被修改,如何告知代理文件已过期

在我目前的项目中,我有一个版本控制系统,它使用文件修改时间为文件生成唯一的前缀。所以链接会像下一次文件更改时,链接会自动更改


在Laravel中实现此功能的最佳实践是什么?谢谢

我会将其作为一个查询字符串来执行,它很简单,足够准确,并且不需要任何复杂的层来实现。只需将文件的最后修改作为查询字符串放在链接上即可。这将强制浏览器刷新文件

<link rel="stylesheet" type="text/css" href="/css/style.min.css?v=<?= File::modified(path('public').'/css/style.min.css') ?>" />
我们还在CloudFront上定义了10个子域,因此浏览器不会达到同一个域6-8个并发请求的限制:

cdn0.example.com
cdn1.example.com
cdn2.example.com
... and so on
我们数据库中的每个条目都使用一个通过计算
resource.id%10
选择的独占子域,这非常快,并且总是为每个实体返回相同的子域(帮助客户端和CloudFront缓存)。这是你能得到的最好的图像服务

UI图像存储在独占的子域
assets.example.com
,这些图像到目前为止还没有版本化,因为我们不会对设计做太多更改,如果我们这样做,我们可能会将新的资产放在类似
/v2/
/newhemename/
文件夹中。这种方法对回滚甚至用户选择的主题都有很大帮助


CSS和JS由Apache从Laravel
/public
目录中提供。这不是最快的方法,但由于我们现在专注于开发,所以自动编译更少的代码和闭包就更重要了。当我们为最终用户启动时,我们可能会想到一个自动部署系统,它编译资产,使用时间戳前缀在S3/CloudFront上发布资产,并缓存它们的最后一个时间戳以进行视图渲染。

我会将其作为一个查询字符串来执行,它非常简单、准确,并且不需要任何复杂的层来实现。只需将文件的最后修改作为查询字符串放在链接上即可。这将强制浏览器刷新文件

<link rel="stylesheet" type="text/css" href="/css/style.min.css?v=<?= File::modified(path('public').'/css/style.min.css') ?>" />
我们还在CloudFront上定义了10个子域,因此浏览器不会达到同一个域6-8个并发请求的限制:

cdn0.example.com
cdn1.example.com
cdn2.example.com
... and so on
我们数据库中的每个条目都使用一个通过计算
resource.id%10
选择的独占子域,这非常快,并且总是为每个实体返回相同的子域(帮助客户端和CloudFront缓存)。这是你能得到的最好的图像服务

UI图像存储在独占的子域
assets.example.com
,这些图像到目前为止还没有版本化,因为我们不会对设计做太多更改,如果我们这样做,我们可能会将新的资产放在类似
/v2/
/newhemename/
文件夹中。这种方法对回滚甚至用户选择的主题都有很大帮助


CSS和JS由Apache从Laravel
/public
目录中提供。这不是最快的方法,但由于我们现在专注于开发,所以自动编译更少的代码和闭包就更重要了。当我们为最终用户启动时,我们可能会想到一个自动部署系统,它编译资产,使用时间戳前缀在S3/CloudFront上发布资产,并缓存它们的最后一个时间戳以进行视图渲染。

这看起来是一个不错的解决方案,但不是最好的,因为大多数代理正在剥离查询字符串参数。尽管如此,我还是要试试,谢谢!我将编辑我的答案,并就如何实现这一点提供一些建议。这看起来是一个不错的解决方案,但不是最好的,因为查询字符串参数正在被大多数代理剥离。尽管如此,我还是要试试,谢谢!我将编辑我的答案,并就如何实现这一点提供更多建议。您可能想看看您可能想看看