我是一个有观点的博客,
header.blade.php - prints dynamic navbar along with categories and login info.
content.blade.php - prints dynamic content of the page.
sidebar.blade.php - prints dynamic related articles.
footer.blade.php - prints static & some php dynamic content(date).
我需要的是缓存 content.blade.php , sidebar.blade.php , footer.blade.php 。据我所知,这将有助于减少负荷。
我不想缓存 header.blade.php ,因为它会打印当前用户信息和一些动态js变量。
对于控制器,我想缓存function_name(argument_var)。这样,如果第二次将具有相同argument_var的相同函数作为调用,则立即回写响应,而不与db通信,如mem cahche,但不使用它。
我需要有可能控制缓存。
我看过some Cache tutorials。但是我' M不高兴看到它仍然缓慢
。我尝试将html文件创建为磁盘上的缓存,但这似乎有更少的控制器并且增加了所有第一个响应的 ttfb 。
答案 0 :(得分:2)
你要做的事情非常复杂。我之前已经完成了这个并解决了它,但我不推荐解决方案,原因我稍后会尝试解释。首先,值得阅读Laravel View模块中的代码(vendor / laravel / framework / src / Illuminate / View)来弄清楚发生了什么。
将刀片模板(filename.blade.php)编译为PHP文件,该文件保存在存储/框架/视图中,其名称类似于< hash> .php。将刀片呈现为HTML所花费的大部分时间实际上是在将这些视图编译为PHP时使用的。
一旦这些视图在磁盘上,PHP引擎就会将它们从磁盘呈现为PHP代码。让PHP引擎从内存中编译代码是非常棘手的,事实上这样做并不比从磁盘上这样做快得多,因为它需要在PHP中调用 slow 的eval(),而不是include()调用。此外,由执行include()调用的PHP编译器创建的操作码缓存在操作码缓存中(假设您有一个),并且eval()调用创建的操作码不是,这意味着基本上如果您的刀片在内存中PHP必须为每个eval()调用调用编译器。
所以我建议的是:
我希望有所帮助。可以缓存View :: phpEngine编译器(从PHP代码创建HTML)的输出,但它很乱,并且涉及Laravel内部的一些讨厌的黑客攻击。我已经为Laravel 3做了一次,但支出不好,我不建议再试一次。