提高Laravel应用性能
发布时间 - 2019-06-21 00:00:00 点击率:次使用Laravel做开发是高效而愉悦的体验。
通常,当你准备部署应用的时候,你可能会意识到应用也许会在真实环境下表现不佳。
需要明白的是,没有银弹。通过努力去对应用的每个细节完成所有的优化,速度可能会变慢,但使用下面这些技巧会让你感到恰到好处。
缓存配置文件
laravel 的配置项分布在数十个配置文件中,在每次的请求中都将每个文件 including 进来很消耗性能。为了将所有的配置文件都合并为一个,可以使用:
php artisan config:cache
记住修改了配置文件后不会影响已有的配置文件缓存。为了刷新缓存,可以再次上述的命令。如果你想完全清除缓存,执行:
php artisan config:clear
路由缓存
在laravel中,路由也需要昂贵的开销。用以下命令缓存 routes.php 文件:
php artisan route:cache
请注意,它不适用于闭包。 如果你正在使用闭包,这是一个很好的机会将它们移动到控制器中,因为 artisan 命令在尝试编译绑定到闭包的路径而不是正确的控制器方法时会抛出异常。
与配置缓存相同,对 routes.php 的任何更改都不会有任何影响。 要刷新缓存,请在每次更改路径文件时运行上面的命令。 要完全清理干净路由缓存,请运行以下命令:
php artisan route:clear
类映射加载优化
在一个中型项目中,存在数百个 PHP 源文件是很正常的事情,由于良好的编程习惯,我们会把代码做一些分离,每一个 php 文件都有自己的职责。当然,这并非没有缺点,Laravel 必须为每一次请求都加载这数百个文件,这是一件很消耗性能的事情。
因此,一个比较好的办法是声明哪些文件是用户每一次请求(如:服务提供者,中间件等)都需要载入的 ,然后将这些需要每次加载的文件写入同一个文件中,减少 include 文件的数量。
这类似于 javascript 将文件合并为一个没有区别 (webpack, gulp),会减少游览器会服务器的请求。
如果需要添加其他的源文件,可以在 config / compile.php 的files key中声明。
当你把需要为每个请求都加载的文件设置好之后,它们就会写入同一个文件中,减少加载文件的性能消耗
php artisan optimize --force
优化 composer 的自动加载
这不仅适用于 laravel,而且适用于任何使用 composer 的应用程序。
我将首先解释 PSR-4 自动加载器的工作原理,然后向您展示应该运行什么命令来优化它。如果您对了解 composer 如何工作不感兴趣,我建议您直接跳到关于控制台命令的段落处。
当您向 compsoser 请求 App\Controllers\AuthController 类时,它首先在类映射中搜索直接关联。classmap 是一个由类和文件组成的 1 到 1 关联的数组。当然,由于您没有手动将 Login 类及其相关文件添加到类映射中,composer 将继续在命名空间中搜索。
因为 App 是一个 PSR-4 命名空间,默认情况下是与 Laravel 一起提供的,并且与 app/ 文件夹相关联,所以 composer 将尝试使用基本的字符串操作过程将 PSR-4 类名转换为文件名。最后,它猜测 App\Controllers\AuthController 必须位于 AuthController.php 文件中,它位于 Controllers/ 文件夹中,恰巧的是,该文件夹正好位于名称空间文件夹中,即 app/。
所有这些艰苦的工作只是为了得到 App\Controllers\AuthController 类存在于 app/Controllers/AuthController.php 文件中。为了让 composer 扫描整个应用程序并创建类和文件的直接 1 对 1 关联,运行以下命令:
composer dumpautoload -o
请记住,如果您已经运行了 php artisan optimize --force,那么您就不必再运行这个函数了。因为优化命令已经告诉 composer 创建一个优化的自动加载器。
JIT 编译器(即时编译器)
PHP 并不是天然就被计算机理解的。你不能把它编译为字节码然后让计算机运行。PHP 必须要经过一个中介,像是 Zend 引擎,它会解释 PHP 文件并执行相应的 C 例程。如你所想,它的速度很慢。每次你的服务器执行一个 PHP 文件,都必须把它转换成 tokens —— 这个过程由 AST 解析器完成并解释。不幸的是,解析器必须每次都编译 PHP 文件,即使它每次都得到相同的结果。
为了让你的应用速度更快,你需要一个 编译一次,终生运行 的方法,而这就是一个 JIT 编译器所做的事情。
对于 Laravel 所推荐使用的 JIT 编译器是 HHVM,由 Facebook 创立并广泛使用。Wikipedia、Etsy 和其他上千项目也在使用它。
使用更快的缓存和会话驱动
将 session 保存在文件中是种足够快速而又优雅的方法,自 PHP 开始的时代就在这样做了。但是如果你追求性能,那么文件系统就是你需要注意的一件事,因为它很慢。一种更好的做法是将 cache 和 session 存储在内存中,因为它提供了一种高效读写数据的方式。幸运的是,laravel 支持一些基于内存的 cache 和 session 驱动。
我的建议是使用 memcached 作为 cache 和 session 的驱动,但你可以选择任何你喜欢的,只要它是基于内存工作的。
要更改 session 驱动,需要检查以下文件中「driver」项:
app/config/session.php
要更改 cache 驱动,需要检查以下文件中「driver」项:
app/config/cache.php
不要低估通过优化查询语句带来的查询速度的提升
就像你看到的,大部分优化都是在不同的层面使用缓存。但当面临数据库优化时,你不应该依赖缓存。缓存应是优化查询的最后手段。
缓存查询结果
MySQL 不会替你做这件事,也不如你自己做的好。当然了你肯定不会把应用中每个查询的结果都做缓存,看看数据统计,在应用程序中那些高频率的查询语句,它们真的有必要被频繁地执行?每 15 分钟运行一次然后把相同的结果提供给用户
不是更好吗?
在查询构造器中移除了 
removing方法是件好事(它曾经是个很好的功能,但不够好 - 人们似乎高估了它的作用)。然后你可以更多地使用 Cache::remember 方法,就像这样:
$posts = Cache::remember('index.posts', 30, function()
{
return Post::with('comments', 'tags', 'author', 'seo')->whereHidden(0)->get();
});更多Laravel相关技术文章,请访问Laravel教程栏目进行学习!
# laravel
# php
# JavaScript
# composer
# mysql
# 中间件
# gulp
# webpack
# 命名空间
# include
# Session
# 字符串
# 闭包
# memcached
# 数据库
# 的是
# 是一个
# 配置文件
# 加载
# 适用于
# 如果你
# 很好
# 应用程序
# 你不
# 更快
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
微信小程序 五星评分(包括半颗星评分)实例代码
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
如何在Ubuntu系统下快速搭建WordPress个人网站?
海南网站制作公司有哪些,海口网是哪家的?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
如何在建站之星网店版论坛获取技术支持?
个人网站制作流程图片大全,个人网站如何注销?
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
Laravel如何为API编写文档_Laravel API文档生成与维护方法
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
网站建设保证美观性,需要考虑的几点问题!
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
jQuery中的100个技巧汇总
如何快速搭建高效服务器建站系统?
Laravel如何实现事件和监听器?(Event & Listener实战)
JS经典正则表达式笔试题汇总
手机软键盘弹出时影响布局的解决方法
装修招标网站设计制作流程,装修招标流程?
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
EditPlus中的正则表达式实战(6)
Linux系统命令中tree命令详解
魔毅自助建站系统:模板定制与SEO优化一键生成指南
如何快速建站并高效导出源代码?
如何在VPS电脑上快速搭建网站?
Laravel如何使用Collections进行数据处理?(实用方法示例)
Angular 表单中正确绑定输入值以确保提交与验证正常工作
java中使用zxing批量生成二维码立牌
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
北京专业网站制作设计师招聘,北京白云观官方网站?
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
详解Android图表 MPAndroidChart折线图
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
济南网站建设制作公司,室内设计网站一般都有哪些功能?
Java垃圾回收器的方法和原理总结
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
如何做网站制作流程,*游戏网站怎么搭建?
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
如何在阿里云服务器自主搭建网站?
常州企业网站制作公司,全国继续教育网怎么登录?
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
nginx修改上传文件大小限制的方法

