我的测试环境
服务器是腾讯云轻量云主机 2核4G, php7.4
ab 客户端运行在 mac m1
我的测试分3个步骤,相互之间无影响
1. laravel 线上环境(nginx + php-fpm, 无 opcache)
2. laravel + opcache 环境 (nginx + php-fpm)
3. laravel + laravelS 扩展 (swoole)
测试步骤
1. laravel 线上环境
composer create-project laravel/laravel laravel-test
加一个 route:
Route::get('/test', function () {
return 'ok';
});
然后做一下简单优化,也就是文档中提到的几个命令,因为我们上线一定会用到这些优化的
composer install --optimize-autoloader --no-dev
php artisan config:cache
php artisan route:cache
接下来要用 ab 做测试了,在我的电脑上输入
ab -n 1000 -c 100 http://www.itutil.cn:8001/test
结果:
image1000 个请求在42.6s 内完成,qps: 23.42
2. laravel + opcache
先安装 opcache, 安装完后会自动启用,默认配置
sudo apt install php7.4-opcache
1000 个请求在4.1s 内完成,qps: 227
3. laravel + laraveS 扩展
我们先停掉 nginx 和 php-fpm,写在 opcache 扩展
sudo service nginx stop
sudo service php7.4-fpm stop
安装 laravelS
composer require hhxsv5/laravel-s
php artisan laravels publish
别忘了,还要安装并启用 swoole 扩展 ,所有选项都默认
sudo pecl install swoole
echo "extension=swoole.so" |sudo tee /etc/php/7.4/cli/conf.d/20-swoole.ini
然后一样的在输入 laravel 优化的命令
composer install --optimize-autoloader --no-dev
php artisan config:cache
php artisan route:cache
大功告成,启动服务器
修改 laravels 的监听端口,默认是127.0.0.1,外网无法访问
echo "LARAVELS_LISTEN_IP=0.0.0.0" >> .env
php artisan config:cache
执行测试
ab -n 1000 -c 100 http://www.itutil.cn:5200/test
1000 个请求在1.87s 内完成,qps: 533
总结
我们对结果汇总
Laravel | Laravel + Opcache | Laravel + LaraveS | |
---|---|---|---|
请求数 | 1000 | 1000 | 1000 |
总耗时 (s) | 42.698 | 4.405 | 1.876 |
失败数 | 0 | 0 | 0 |
每个请求平均耗时 (ms) | 42.698 | 4.405 | 1.976 |
QPS | 23.42 | 227.04 | 533.08 |
可以看到, swoole 对 helloword 程序的确有一点加速效果,比 opcache 快了 2.4 ms 左右,也许你会说这也快了不止2倍,
但是如果访问数据库或者 redis,随随便便都是10ms,况且完整的项目要多次访问数据库,这 2.4ms 就可以忽略了。
所以我的结论是 swoole 对 laravel 的加速效果微乎其微,反而增加了复杂度和不稳定性,得不偿失。
一个项目的瓶颈几乎都是在数据库,所以如果想用 swoole 加速你的 laravel 或其他 php 框架,正确的姿势是使用连接池,提高数据库的效率。
网友评论