1.1.1 laravel官方提供了一些优化laravel的优化方法php
php artisan optimize php artisan config:cache php artisan route:cache
1.1.2 使用opcache加速,PHP是个解释型语言执行的时候先得把程序读进来,由Zend引擎编译成opcode。最后Zend虚拟机顺次执行这些opcode完成操做。opcache起到的做用就是缓存opcode,从而减小编译的时间,减小CPU密集。node
1.1.3 使用PHP7.1,不要问我为何laravel
Laravel自己启动须要的文件就不少,外加其出了名的生态环境好,开发中咱们会不少不少现有的轮子,使得一次启动的磁盘IO特别高(就是要加载不少文件嘛),虽然官方的php artisan optimize方法优化了文件的加载,但并无实际解决IO上的问题。
知道了问题那就很容易解决了,只要不要每次启动都从新加载就行了,下面轮到Swoole上场啦。git
Swoole是一个PHP扩展,使得PHP使用异步的方式执行,就像node同样,并且还能使用socket,为PHP提供了一系列异步IO、事件驱动、并行数据结构功能。具体的安装方法这就不说了,本身谷歌吧。github
搜搜github上已有的swoole启动laravel的轮子,找了三个轮子redis
scil/LaravelFly
chongyi/swoole-laravel-framework
garveen/laravoolecentos
用了LaravelFly,听名字感受感受挺酷,结果不如人意,实在不喜欢它那种强硬的启动方式。跟Laravel的风格-'优雅' 很不搭。因而又想本身写,结果写到一半发现laravoole这个项目有更新,而后启动方式(使用artisan命令,没更新前是用的bash脚本启动),代码风格都很酷,这不就是我想作的东西嘛!api
chongyi/swoole-laravel-framework这个轮子是我在写轮子的时候,做者在微信群里分享的,有兴趣的朋友能够试试,我还没试过。缓存
能够看看做者的文档,我就只总结下我在用的过程当中遇到的几个点
1 你应该再也不使用如下的超全局变量,由于它们是WEB服务器建立的,而一个非热启动的项目使用他们可能会形成变量污染,你能够从Laravel的Request类中拿到你要的数据。bash
$GLOBALS $_SERVER $_REQUEST $_POST $_GET $_FILES $_ENV $_COOKIE $_SESSION
2 由于我要开发微信相关的,因此使用了EASYWECHAT这个包,可是这个包的oauth方法使用的是原生的SESSION,因此这边也要改为redis等其它方式去存储session。具体代码以下。
//在你的控制器或者中间件中 public function handle(Request $request, Closure $next) //省略代码 $redirect = config('app.url') . $request->getRequestUri();//这个地址要求带着token $options = [ 'app_id' => config('app.appid'), 'secret' => config('app.secret'), 'oauth' => [ 'scopes' => ['snsapi_userinfo'], 'callback' => $redirect, ], ]; $app = new Application($options); //使用laravel session替代原生session $app->oauth->setRequest($request); //省略下面代码 }
3 不支持热启动了,因此每次更新代码后都须要从新启动Laravoole进程。
$ php artisan laravoole restart
如须要支持热启动,请自行谷歌 swoole + inotify,大概原理就是用inotify监控文件变动,若是更新了重启swoole,若是正式环境中还能够本身写个部署脚本,git pull后重启服务等,方法不少不一一列举。
测试机子:
阿里云
centos6.5
双核
4G
无视带宽影响,向本机请求,测试结果以下,测了几回,平均在700RPS左右。原先的只有20多RPS。