Php Laravel缓存视图或控制器响应
我有一个观点博客Php Laravel缓存视图或控制器响应,php,laravel,caching,Php,Laravel,Caching,我有一个观点博客 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 d
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变量
对于控制器,我想缓存函数名(参数变量)。这样,如果第二次调用具有相同参数的同一函数,响应将立即写回,而不与db通信,如mem cahche,但不使用它
我需要对缓存进行控制的可能性
我已经看过了。但我很不高兴看到它仍然进展缓慢
我试图在磁盘上创建html文件作为缓存,但这似乎减少了控制器,增加了所有第一次响应的ttfb 你要求做的事情相当复杂。我以前经历过这个问题,并且已经解决了它,但是我不推荐这个解决方案,原因我将在后面解释。首先,有必要阅读Laravel视图模块(vendor/Laravel/framework/src/illumb/View)中的代码来了解发生了什么 刀片模板(filename.blade.php)被编译成一个php文件,该文件保存在storage/framework/views中,名为.php。将刀片渲染为HTML所花费的大部分时间实际上都是在将这些视图编译为PHP时花费的 一旦这些视图在磁盘上,PHP引擎就会从磁盘将它们呈现为PHP代码。让PHP引擎从内存编译代码是非常棘手的,事实上,这样做并不比从磁盘编译代码快多少,因为它需要一个eval()调用,这在PHP中很慢,而不是include()调用。此外,由执行include()调用的PHP编译器创建的操作码被缓存在操作码缓存中(假设您有),而由eval()调用创建的操作码则不是,这意味着如果刀片服务器在内存中,则每次eval()调用都必须调用PHP编译器 因此,我建议:
- 忽略将.blade编译成PHP并将其存储在RAM中的诱惑,它不会对您起作用
- 在存储/framework/views目录上放置一个ramdisk(例如/dev/shm)以加快访问速度——例如,将该目录链接到/dev/shm(启动时必须这样做),或者为其添加一个特定的fstab条目 <> LI>如果缓存视图确实是您需要的速度,那么考虑另一个模板引擎,如SMATY,它可以从RAM编译,而不编译到PHP代码。
我希望这有帮助。可以缓存View::phpEngine编译器(它从PHP代码创建HTML)的输出,但它很混乱,并且在Laravel中涉及一些令人讨厌的黑客攻击。我曾经为Laravel 3做过一次,但回报不好,我不建议再尝试一次。您要求做的事情相当复杂。我以前经历过这个问题,并且已经解决了它,但是我不推荐这个解决方案,原因我将在后面解释。首先,有必要阅读Laravel视图模块(vendor/Laravel/framework/src/illumb/View)中的代码来了解发生了什么 刀片模板(filename.blade.php)被编译成一个php文件,该文件保存在storage/framework/views中,名为.php。将刀片渲染为HTML所花费的大部分时间实际上都是在将这些视图编译为PHP时花费的 一旦这些视图在磁盘上,PHP引擎就会从磁盘将它们呈现为PHP代码。让PHP引擎从内存编译代码是非常棘手的,事实上,这样做并不比从磁盘编译代码快多少,因为它需要一个eval()调用,这在PHP中很慢,而不是include()调用。此外,由执行include()调用的PHP编译器创建的操作码被缓存在操作码缓存中(假设您有),而由eval()调用创建的操作码则不是,这意味着如果刀片服务器在内存中,则每次eval()调用都必须调用PHP编译器 因此,我建议:
- 忽略将.blade编译成PHP并将其存储在RAM中的诱惑,它不会对您起作用
- 在存储/framework/views目录上放置一个ramdisk(例如/dev/shm)以加快访问速度——例如,将该目录链接到/dev/shm(启动时必须这样做),或者为其添加一个特定的fstab条目 <> LI>如果缓存视图确实是您需要的速度,那么考虑另一个模板引擎,如SMATY,它可以从RAM编译,而不编译到PHP代码。
我希望这有帮助。可以缓存View::phpEngine编译器(它从PHP代码创建HTML)的输出,但它很混乱,并且在Laravel中涉及一些令人讨厌的黑客攻击。我曾经为Laravel 3做过一次,但回报不好,我不建议再尝试。感谢您的回答。我完全同意你的看法。即使在多年的PHP专业经验之后,我也不喜欢它,因为它无法提供我经常需要的完整控件。我想我可能会创建一个新的框架,只是为了获得这个功能。也许现在是时候换一种语言了,你有没有建议像RoR这样的语言?谢谢你的回答。我完全同意你的看法。即使在多年的PHP专业经验之后,我也不喜欢它,因为它无法提供我经常需要的完整控件。我想我可能会创建一个新的框架,只是为了获得这个功能。也许现在是时候换一种语言了,你有没有建议像RoR这样的语言?