[英]Laravel Cache views or controller response
我有一个博客,包含意见,
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 var。
对于控制器,我想缓存function_name(argument_var)。 这样,如果第二次调用具有相同arguments_var的相同函数,则会立即写回响应,而无需与db通信(如mem cahche),但不会使用它。
我需要对缓存进行控制。
我看过一些Cache教程 。 但我不愿意看到它会仍然缓慢。
我试图创建html文件作为磁盘上的缓存,但是这似乎减少了控制器,并增加了所有第一个响应的ttfb 。
您要执行的操作非常复杂。 我之前已经解决了这个问题,但是我不推荐该解决方案,原因是我稍后会尝试解释。 首先,值得阅读Laravel View模块(vendor / laravel / framework / src / Illuminate / View)中的代码以了解发生了什么。
刀片模板(filename.blade.php)被编译成一个PHP文件,该文件以类似<hash> .php的名称保存在存储/框架/视图中。 实际上,将刀片呈现为HTML所花费的大部分时间是将这些视图编译为PHP。
一旦这些视图在磁盘上,PHP引擎就会将它们从磁盘呈现为PHP代码。 让PHP引擎从内存中编译代码是非常棘手的,实际上这样做并不比从磁盘中编译代码快得多,因为它需要在PHP中较慢的eval()调用,而不是include()调用。 。 此外,由PHP编译器执行include()调用创建的操作码被缓存在操作码缓存中(假设您有一个),而由eval()调用创建的操作码则没有,这意味着从本质上讲,如果刀片位于内存中,则PHP必须为每个eval()调用调用编译器。
所以我建议是:
希望对您有所帮助。 可以缓存View :: phpEngine编译器的输出(可从PHP代码创建HTML),但是它很杂乱,并且在Laravel中涉及一些讨厌的黑客。 我曾经为Laravel 3做过一次,但是支出并不高,我不建议再次尝试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.