开发中的Laravel和视图缓存 - 无法立即看到更改

2022-08-30 19:10:14

我和一些朋友决定开始做一个项目,我们遇到了Laravel,认为它可能是一个很好的工具。我们开始在本地使用它来开发我们的一些页面,并注意到一些奇怪的东西。

当我们使用不同的信息更新视图时,视图信息需要近 5 到 10 分钟才能更改。这就像Laravel正在缓存视图并在其上放置TTL一样。

我知道这不是我在本地Web服务器上做的任何事情,因为我使用过其他框架,我从来没有遇到过这个问题。

在互联网上搜索时,我找不到有关如何禁用此功能的好答案。我想使用Laravel,但如果每次我想进行更改时,我的观点都需要一段时间才能更新,那么它就毫无价值了。事实上,这听起来适得其反。

有没有办法禁用它?为什么我的观点需要永远更新开箱即用?


答案 1

#laravel IRC频道是上帝派来的。这与拉拉维尔的行为毫无关系。这实际上是 PHP 5.5 正在做的事情。

这之所以如此令人困惑,是因为我从5.3升级了我的PHP版本,从来没有遇到过这个问题。

在.ini文件中,您需要调整 OPcache 设置。对我来说,这些设置从.ini文件的第 1087 行开始,如下所示:

opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1

请特别注意 .这就是实际使视图缓存的原因。如果这不是所需的行为,请将值设置为,每次进行更改时,视图都会更新。耶!opcache.revalidate_freq=600

编辑 2014年8月21日

正如下面的 Matt 所提到的,请确保重新启动 Web 服务器,以查看更改后的更改在.ini文件后生效。


答案 2

对于较新版本的PHP,opcache不起作用。这是我使用的(在应用程序/过滤器中.php):

App::before(function($request)
{
    // Clear view cache in sandbox (only) with every request
    if (App::environment() == 'sandbox') {
        $cachedViewsDirectory=app('path.storage').'/views/';
        $files = glob($cachedViewsDirectory.'*');
        foreach($files as $file) {
            if(is_file($file)) {
                @unlink($file);
            }
        }
    }
});

推荐