从内存而不是磁盘加载视图数据

时间:2019-01-08 08:26:53

标签: laravel laravel-5

我注意到Laravel在每次渲染之前都会从磁盘读取视图文件。有什么方法可以将视图内容缓存到内存并呈现视图而无需从文件中读取它?

我不想缓存渲染的视图,而是在渲染之前从内存中加载视图文件(.blade)。

编辑:

根据我在其他论坛上收到的回答,从文件中加载视图文件的好处有限,因为文件系统已经具有缓存机制。

Laracast论坛的回复

  

当您从应用程序调用视图时,Laravel将编译   刀片模板到PHP中并在其中缓存内容   存储/框架/视图,以便后续请求相同   内容不需要重新编译模板。

     

我不知道框架内配置视图的方法   缓存以使用Redis之类的备用内存缓存。

     

如果由于从磁盘读取视图而导致磁盘I / O,我会感到惊讶   会导致大量的磁盘I / O,但是有诸如iostat之类的工具   和pidstat,您可以用来确定这是否是瓶颈   你。

     

一种可能的解决方案是将视图缓存文件夹安装为   单独的tmpfs挂载点

     

mount -t tmpfs -o size = 128M tmpfs /您的/路径/存储/框架/视图   这会将文件夹临时挂载到内存中(最大大小为   128Mb,您可以对其进行调整)。如果你想永久化你   需要按照上面的链接添加到/ etc / fstab。

     

随意尝试,但老实说,IMO,您将受到限制   好处。

1 个答案:

答案 0 :(得分:0)

如果您使用某种类型的内存缓存,则可以手动呈现视图并缓存结果。
但是,我认为这不会给您带来很大的速度改进。

$view = cache()->remember('view_home.index', 30, function() {
    return view('home.index');
});

return response($view);

请记住,php也必须从磁盘读取所有类,因此,从一百个缓存一些文件不会加快您的网站的速度。