Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.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缓存视图以优化磁盘i/o_Php_Caching_Laravel - Fatal编程技术网

Php 使用laravel缓存视图以优化磁盘i/o

Php 使用laravel缓存视图以优化磁盘i/o,php,caching,laravel,Php,Caching,Laravel,我在laravel中有一个很小的子视图/partial,它加载在foreach循环中。我想把它放在一个单独的视图中,因为将来我会扩展它,我不想在主视图中乱放代码。但是,由于它是部分的,所以每次从磁盘加载时都要付出代价 问题是:如何缓存视图并向其传递新数据,而不必每次都从磁盘读取它?您可以尝试手动创建新视图。它应该可以工作,但请注意,这是完全未经测试的: <?php $view = View::make('your-partial'); foreach($data as $m

我在laravel中有一个很小的子视图/partial,它加载在foreach循环中。我想把它放在一个单独的视图中,因为将来我会扩展它,我不想在主视图中乱放代码。但是,由于它是部分的,所以每次从磁盘加载时都要付出代价


问题是:如何缓存视图并向其传递新数据,而不必每次都从磁盘读取它?您可以尝试手动创建新视图。它应该可以工作,但请注意,这是完全未经测试的:

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


如果你真的要减少读取量,我认为你唯一的选择就是把部分视图代码直接放到另一个视图中。

hmm太糟糕了。。读取导致加载时间增加400%。这并不是那么糟糕,因为我们使用的是毫秒,在生产服务器上,所有东西都在SSD上。。但是。。谢谢你的帮助!部分太大,无法直接显示在视图中?现在是这样,没有。但根据路线图,它会更大。但是如果必要的话,我会在另一个地方分解视图。我明白了。我会采用这种策略。例如,您也可以将循环本身移动到局部区域中。这样代码仍然是分开的,但部分代码只需要包含一次:)
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());
}