使用laravel缓存视图以优化磁盘I / O.

时间:2015-02-07 14:58:39

标签: php caching laravel

我在laravel 中有一个小的子视图/部分,它在foreach循环中加载 。我想将它保存在一个单独的视图中,因为将来我会扩展它并且我不想用代码丢弃我的主视图。但是,由于它是部分的,因此每次从磁盘加载时都会收费。

问题是:如何缓存视图并将新数据传递给它,而不必每次都从磁盘读取它?

1 个答案:

答案 0 :(得分:1)

您可以尝试手动创建新视图。它应该工作,但请注意,这是完全未经测试的:

<?php
    $view = View::make('your-partial');
    foreach($data as $model){
        $v = clone $view;
        $v->with('data', $model);
        echo $v->render();
    }
?>

修改

我只是挖得更深一些,发现上面的内容对这个问题没什么帮助。在调用render()之前,不会读取视图文件,因此上面的代码仍然会读取每次迭代的文件。

render()调用getContents(),在引擎上调用get(),然后再调用evaluatePath

protected function evaluatePath($__path, $__data)
{
    $obLevel = ob_get_level();

    ob_start();

    extract($__data);

    // We'll evaluate the contents of the view inside a try/catch block so we can
    // flush out any stray output that might get out before an error occurs or
    // an exception is thrown. This prevents any partial views from leaking.
    try
    {
        include $__path;
    }
    catch (\Exception $e)
    {
        $this->handleViewException($e, $obLevel);
    }

    return ltrim(ob_get_clean());
}

如果你真的要减少读数,我说你唯一的选择是将部分视图代码直接放到另一个视图中。