Laravel 5 性能优化技巧
说明
性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能。
接下来分享一些开发的最佳实践,还有调优技巧,大家有别的建议也欢迎留言讨论。
这里是简单的列表:
- 配置信息缓存
artisan config:cache
- 路由缓存
artisan route:cache
- 类映射加载优化
artisan optimize ,线上环境
php artisan optimize --force
- 自动加载优化
composer dumpautoload
- 使用 Memcached 来存储会话
config/session.php
- 使用专业缓存驱动器
config/cache.php
- 数据库请求优化
- 为数据集书写缓存逻辑
- 使用即时编译器(JIT),如:HHVM、OpCache
- 前端资源合并 Elixir
1. 配置信息缓存
使用以下 Artisan 自带命令,把 config
文件夹里所有配置信息合并到一个文件里,减少运行时文件的载入数量:
php artisan config:cache
上面命令会生成文件 bootstrap/cache/config.php
,可以使用以下命令来取消配置信息缓存:
php artisan config:clear
此命令做的事情就是把 bootstrap/cache/config.php
文件删除。
注意:配置信息缓存不会随着更新而自动重载,所以,开发时候建议关闭配置信息缓存,一般在生产环境中使用,可以配合 Envoy 任务运行器 一起使用。
2. 路由缓存
路由缓存可以有效的提高路由器的注册效率,在大型应用程序中效果越加明显,可以使用以下命令:
php artisan route:cache
以上命令会生成 bootstrap/cache/routes.php
文件,需要注意的是,路由缓存不支持路由匿名函数编写逻辑,详见:文档 - 路由缓存。
可以使用下面命令清除路由缓存:
php artisan route:clear
此命令做的事情就是把 bootstrap/cache/routes.php
文件删除。
注意:路由缓存不会随着更新而自动重载,所以,开发时候建议关闭路由缓存,一般在生产环境中使用,可以配合 Envoy 任务运行器 一起使用。
3. 类映射加载优化
optimize
命令把常用加载的类合并到一个文件里,通过减少文件的加载,来提高运行效率:
php artisan optimize --force
会生成 bootstrap/cache/compiled.php
和 bootstrap/cache/services.json
两个文件。
你可以可以通过修改 config/compile.php
文件来添加要合并的类。
在 production
环境中,参数 --force
不需要指定,文件就会自动生成。
要清除类映射加载优化,请运行以下命令:
php artisan clear-compiled
此命令会删除上面 optimize
生成的两个文件。
注意:此命令要运行在
php artisan config:cache
后,因为optimize
命令是根据配置信息(如:config/app.php
文件的providers
数组)来生成文件的。
4. 自动加载优化
此命令不止针对于 Laravel 程序,适用于所有使用 composer
来构建的程序。此命令会把 PSR-0
和 PSR-4
转换为一个类映射表,来提高类的加载速度。
composer dumpautoload -o
注意:
php artisan optimize --force
命令里已经做了这个操作。
5. 使用 Memcached 来存储会话
每一个 Laravel 的请求,都会产生会话,修改会话的存储方式能有效提高程序效率,会话的配置信息是config/session.php
,建议修改为 Memcached 或者 Redis 等专业的缓存软件:
'driver' => 'memcached',
6. 使用专业缓存驱动器
「缓存」是提高应用程序运行效率的法宝之一,默认缓存驱动是 file
文件缓存,建议切换到专业的缓存系统,如 Redis 或者 Memcached,不建议使用数据库缓存。
'default' => 'redis',
7. 数据库请求优化
数据库请求优化
- 数据关联模型读取时使用 延迟预加载 和 预加载 ;
- 使用 Laravel Debugbar 或者 Clockwork 留意每一个页面的总数据库请求数量;
这里的篇幅只写到与 Laravel 相关的,其他关于数据优化的内容,请自行查阅其他资料。
8. 为数据集书写缓存逻辑
合理的使用 Laravel 提供的缓存层操作,把从数据库里面拿出来的数据集合进行缓存,减少数据库的压力,运行在内存上的专业缓存软件对数据的读取也远远快于数据库。
$posts = Cache::remember('index.posts', $minutes = 30, function()
{
return Post::with('comments', 'tags', 'author', 'seo')->whereHidden(0)->get();
});
remember
甚至连数据关联模型也都一并缓存了,多么方便呀。
9. 使用即时编译器
HHVM 和 OpCache 都能轻轻松松的让你的应用程序在不用做任何修改的情况下,直接提高 50% 或者更高的性能,PHPhub 之前做个一个实验,具体请见:使用 OpCache 提升 PHP 5.5+ 程序性能。
10. 前端资源合并
作为优化的标准,一个页面只应该加载一个 CSS 和 一个 JS 文件,并且文件要能方便走 CDN,需要文件名随着修改而变化。
Laravel Elixir 提供了一套简便实用的方案,详细请见文档:Laravel Elixir 文档。
转 http://www.cnblogs.com/wish123/p/5503870.html
Laravel 5 性能优化技巧的更多相关文章
- PHP程序Laravel框架的优化技巧
Laravel是一套简洁.优雅的php Web开发框架(PHP Web Framework).它可以让你从杂乱的代码中解脱出来,可以帮你构建一个完美的网络app,而且每行代码都简洁.富于表达力.而性能 ...
- Java程序性能优化技巧
Java程序性能优化技巧 多线程.集合.网络编程.内存优化.缓冲..spring.设计模式.软件工程.编程思想 1.生成对象时,合理分配空间和大小new ArrayList(100); 2.优化for ...
- Python代码性能优化技巧
摘要:代码优化能够让程序运行更快,可以提高程序的执行效率等,对于一名软件开发人员来说,如何优化代码,从哪里入手进行优化?这些都是他们十分关心的问题.本文着重讲了如何优化Python代码,看完一定会让你 ...
- Python 代码性能优化技巧(转)
原文:Python 代码性能优化技巧 Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化. ...
- Python 代码性能优化技巧
选择了脚本语言就要忍受其速度,这句话在某种程度上说明了 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 performance 较差的机器上,因此有必要进行一定的代码优化 ...
- JavaScript 性能优化技巧分享
JavaScript 作为当前最为常见的直译式脚本语言,已经广泛应用于 Web 应用开发中.为了提高Web应用的性能,从 JavaScript 的性能优化方向入手,会是一个很好的选择. 本文从加载.上 ...
- Unity UI性能优化技巧
本文将介绍一些提升Unity UI性能的技巧.更多优化技巧,可以观看Unity工程师Ian Dundore在Unite Europe 2017的演讲<使用Unity性能提升技巧>. 1.划 ...
- MySQL 性能优化技巧
原文地址:MySQL 性能优化技巧 博客地址:http://www.extlight.com 一.背景 最近公司项目添加新功能,上线后发现有些功能的列表查询时间很久.原因是新功能用到旧功能的接口,而这 ...
- jQuery 性能优化技巧
原文地址:jQuery 性能优化技巧 博客地址:http://www.extlight.com 一.使用最新版本 jQuery 类库 二.合理使用选择器 # 推荐使用 $("#id" ...
随机推荐
- Mac删除JDK
安装了1.6以后,没有安装1.7发现Android Studio报错: invalid source release: JDK 1.7 原因是Android Studio需要1.7以上的版本,结果再次 ...
- NIO的一坑一惑小记
前言 不知不觉,已那么长时间没有更新东西了,说来真是汗颜啊.(主要是最近在技术上豁然开朗的感觉越来越少了-_-|||) 最近一直在学习Linux相关的东西.又一次接触到了I/O复用模型(select/ ...
- Azure Redis Cache (1) 入门
<Windows Azure Platform 系列文章目录> Microsoft Azure Redis Cache基于流行的开源Redis Cache. 1.功能 Redis 是一种高 ...
- CSS魔法堂:深入理解line-height和vertical-align
前言 一直听说line-height是指两行文本的基线间的距离,然后又说行高等于行距,最近还听说有个叫行间距的家伙,@张鑫旭还说line-height和vertical-align基情四射,贵圈真乱啊 ...
- C++二维码相关库编译
一.瞎想 坐在地铁上闲来无聊,突然想到了二维码,顺手就百度了下相关的资料,目前C++二维码相关的库不多,也就zbar(开源中国上下了半天也没下载下来).zxing,不过这两个库据说都是解析二维码的,不 ...
- HtmlAgilityPack 处理通配的contains
//选择不包含class属性的节点 var result = node.SelectNodes(".//span[not(@class)]"); //选择不包含class和id属性 ...
- [Asp.net 5] Configuration-新一代的配置文件(ConfigurationSource的多种实现)
关于配置文件的目录:[Asp.net 5] Configuration-新一代的配置文件 在前面我们介绍了,系统中用IConfigurationSource表示不同配置文件的来源,起到读取.设置.加载 ...
- 【吐槽】IM群里几种我认为愚蠢的提问方式
一.“有人吗?” 你能得到一句[在,请说]的答复我就服了你,这样问的结果往往是等半天没一个人鸟你,悲观的你或者就此凄凉的退群了,感概人情冷暖的同时甚至开始怀疑人生:积极的你或者这才意识到~要不干脆说问 ...
- Scalaz(44)- concurrency :scalaz Future,尚不完整的多线程类型
scala已经配备了自身的Future类.我们先举个例子来了解scala Future的具体操作: import scala.concurrent._ import ExecutionContext. ...
- Verilog学习笔记简单功能实现(八)...............异步FIFO
基本原理: 1.读写指针的工作原理 写指针:总是指向下一个将要被写入的单元,复位时,指向第1个单元(编号为0). 读指针:总是指向当前要被读出的数据,复位时,指向第1个单元(编号为0). ...