很多人都说Laravel运行性能太低,其实Laravel自带了很多优化的命令,以获得更好的性能。本文就介绍一些Laravel的技巧,不局限于这些自带的命令行哦。 frame work/views/文件夹下。 php artisan view:clear 命令可以清除这些编译的视图文件。
一、PHP开启OpCache
这个应该是优化效果最明显的了,开启与不开启加载时间相差一倍。并且PHP 5.5 以后内建了 OpCache , 不需要单独去安装,只需要开启就可以了。OpCache 的加速原理是把编译后的 bytecode 存储在内存里面, 避免重复编译 PHP 所造成的资源浪费。 第一步:先加载OpCache扩展:zend_extension=php_opcache.dll第二步: 进行OpCache的相关配置:
[opcache] opcache.enable=1 # 开启OpCache opcache.memory_consumption=64 # OPcache 的共享内存大小,以兆字节为单位。 opcache.interned_strings_buffer=8 # 用来存储临时字符串的内存大小,以兆字节为单位。 opcache.max_accelerated_files=2000 # OPcache 哈希表中可存储的脚本文件数量上限。 设置值取值范围最小值是 200,最大值在 PHP 5.5.6 之前是 100000,PHP 5.5.6 及之后是 1000000。 opcache.revalidate_freq=60 # 检查脚本时间戳是否有更新的周期,以秒为单位。 设置为 0 会导致针对每个请求, OPcache 都会检查脚本更新。 opcache.fast_shutdown=1 # 如果启用,则会使用快速停止续发事件。 所谓快速停止续发事件是指依赖 Zend 引擎的内存管理模块 一次释放全部请求变量的内存,而不是依次释放每一个已分配的内存块。第三步: 重启服务器
sudoservicephp5-fpmrestart sudoservicenginxrestart设置了opcache.revalidate_freq之后会在指定周期更新PHP脚本,所以你可能修改了php文件内容,但是并不是立即生效的,但是又不能等那么长时间,如何更新呢?其实PHP有个函数opcache_reset(),运行这个就可以更新了。如果放在laravel脚本里面就更好了,而Laravel 5.3版本添加脚本变得更容易,只需要在routes/console.php内添加下面三行,就成功添加了php artisan opcache:reset命令,运行即可更新。
Artisan::command('opcache:reset', function () { opcache_reset(); })->describe('Reset opcache');
二、类映射加载优化
使用以下命令可以将常用加载类合并到一个编译文件里,以减少每个请求包含的文件数量。该文件保存在bootstrap/cache/compiled.php,如果文件存在的话会直接覆盖。phpartisanoptimize你也可以通过在config/compile.php来指定要包含的类。 运行上述命令,只有当环境是production时才会创建编译文件,其他环境如果想编译则需要添加–force标志。 php artisan optimize 也会创建bootstrap/cache/services.json来优化服务提供者的加载。 php artisan clear-compiled 可以通过删除bootstrap/cache/compiled.php 和 bootstrap/cache/services.json 来清除编译文件。
三、配置信息缓存
运行php artisan config:cache可以将你所有的配置信息合并到一个文件,来加快加载速度。缓存文件存储在bootstrap/cache/config.php 。该命令会清除旧的缓存并创建一个新的。 运行php artisan config:clear 会删除缓存文件bootstrap/cache/config.php。四、路由缓存
php artisan route:cache 会创建一个路由缓存文件,来加快路由注册过程。缓存文件存储在bootstrap/cache/routes.php。命令会清除旧的缓存文件并创建一个新的。 php artisan route:clear 可以删除这个缓存文件。需要注意的是,如果路由配置中使用了闭包,而不是使用Controller@action的形式,在缓存时可能会报错,导致缓存失败。
五、视图缓存
laravel会在框架第一次渲染视图文件时编译视图文件,并以MD5字符串命名,存储在storage/六、使用Redis/Memcached缓存软件
可以将会话的存储方式改为redis或者memcached,并将缓存驱动修改为redis或者memcached。具体参考laravel相关文档。七、数据库请求优化
- 数据关联模型读取时使用 延迟预加载 和 预加载 ;
- 使用 Laravel Debugbar 查看每一个页面的总数据库请求数量,并想办法优化;
- 其他数据库优化内容请自行查阅其他资料
八、前端资源合并
作为优化的标准,一个页面只应该加载一个 CSS 和 一个 JS 文件,并且文件要能方便走 CDN,需要文件名随着修改而变化。 Laravel Elixir 提供了一套简便实用的方案,详细请见文档: Laravel Elixir 文档 。参考资料:
- 十个 Laravel 5 程序优化技巧 : https://laravel-china.org/topics/2020
- Laravel 5 optimization commands : http://sentinelstand.com/article/laravel-5-optimization-commands
- 使用 OpCache 提升 PHP 5.5+ 程序性能: https://laravel-china.org/topics/301