如何让你的Laravel在15毫秒内返回一个"hello world!"
下面由laravel教程栏目给大家介绍如何让你的Laravel在15毫秒内返回一个"hello world!",希望对需要的朋友有所帮助!
首先,我认为通过返回最基本的Hello world!
字符串,是所有以Laravel
为框架的项目中,最基本的一个请求过程。除此以外,项目中的任何http
请求,都会带有更多的业务逻辑和数据库查询等耗时操作,且这些逻辑的执行时间都是不可控和不可对比的。也就是说,其他任何请求都不会比返回一个Hello world!
字符串更短的时间了。所以,通过对比这个最基本的Hello world
请求响应时间,我们可以看出,不同的优化对于Laravel
框架从启动到执行结束的影响。
测试参数
参数 | 版本 |
---|---|
服务器 | 1c处理器,1G内存,1M带宽 |
PHP版本 | 8.0 |
进程管理 | PHP-FPM |
默认配置响应时间
可以看出,在安装PHP
后,默认配置情况下,返回一个Hello world!
平均需要140ms
左右。接下来,我们开始搞事情了!
Round 1:Laravel 缓存
Laravel
为我们提供了很方便的artisan
命令来开启缓存功能,有效的减少了文件读取次数。其中php artisan optimize
命令包括了php artisan config:cache
和php artisan route:cache
命令,但是会多出现一个Files
缓存。将下面的 5 个命令依次执行:
root@Aliyun-ECS / # php artisan optimize root@Aliyun-ECS / # php artisan config:cache root@Aliyun-ECS / # php artisan event:cache root@Aliyun-ECS / # php artisan route:cache root@Aliyun-ECS / # php artisan view:cache
我们再看下响应时间:
可见Laravel
的缓存对于最基础的请求,没有明显的影响。
Round 2:开启 opcache
这次,我决定使用提速效果最明显的手段:开启opcache
扩展。由于本人是使用的 remi 源安装的php8
,所以我这里安装opcache
扩展会比较容易,其他版本的安装请自行 Google。
root@Aliyun-ECS / # yum install php80-php-opcache
等待安装结束后,我们重启php
,然后看下扩展是否已经安装上:
root@Aliyun-ECS / # systemctl restart php80-php-fpm root@Aliyun-ECS / # php -i|grep opcache.enable opcache.enable => On => On opcache.enable_cli => On => On opcache.enable_file_override => Off => Off
ok,已经开启opcache
扩展了,我门再来看下Hello world!
的响应时间:
OHHHHHH!效果太明显了,一下子降到 30ms
以内,提升足足有将近 5 倍 的响应时间。注意一下,在第一次请求时,会比较慢,是因为opcache
在写缓存导致的,访问过一次以后,速度就飞起了。到这里你就满足了吗?看看文章标题,我们要进一步加大力度!
Round 3:开启 swoole
swoole
模块大家都懂,就是将应用程序提前加载到内存中,从而在处理请求时,减少文件的读取和加载过程,为PHP
插上了翅膀。下面安装swoole
扩展,其他版本的请自行 Google。
root@Aliyun-ECS / # yum install php80-php-pecl-swoole
老样子,安装完后检查下是否安装成功:
root@Aliyun-ECS / # systemctl restart php80-php-fpm root@Aliyun-ECS / # php -i|grep swoole.enable swoole.enable_coroutine => On => On swoole.enable_library => On => On swoole.enable_preemptive_scheduler => Off => Off
扩展已经启用了,但是还无法进行测试。因为 swoole
是一个 cli
模式下的扩展,php-fpm
无法使用。所以我们需要实现一个cli
模式下的http
应用。但实际上我们无需自己手动编写http
应用,社区中有大佬已经写好了。所谓「前人种树,后人乘凉」,我们引入 laravel-swoole 软件包,再启动一个http
服务即可,很简单。
// 引入软件包 root@Aliyun-ECS / # composer require swooletw/laravel-swoole // 发布配置文件 root@Aliyun-ECS / # php artisan vendor:publish --tag=laravel-swoole
执行以上两步操作后,即可在项目的config
目录下找到swoole_http
和swoole_websocket
两个配置文件。一个基本的Hello world!
测试,无需修改默认配置,我们只在项目的.env
文件中,添加SWOOLE_HTTP_HOST=0.0.0.0
和SWOOLE_HTTP_PORT=2020
即可,意思是在2020
端口启动一个http
监听程序。0.0.0.0
指任何IP都可远程访问。
// .env SWOOLE_HTTP_HOST=0.0.0.0 SWOOLE_HTTP_PORT=2020
基本配置修改完成,我们启动laravel-swoole
的http
应用:
root@Aliyun-ECS / # php artisan swoole:http start Starting swoole http server...Swoole http server started: <http://0.0.0.0:2020>
此时我们访问2020
端口,即可测试使用swoole
扩展后的应用。再看下请求的响应时间:
好家伙!直接干到15ms
以内。这里第一次时间较长,是因为开了opcache
的原因,会写入缓存。但这里的opcache
写缓存,要比Round 2
那个只开启opache
扩展要快很多,这都是swoole
的功劳。
结语
我又测试了一下,单独只启用swoole
扩展,不启用opcache
,发现响应时间和两个扩展都开启的响应时间一样。也就是说,有了swoole
后,opcache
就没用了?这个还得请各位大佬指点了。这里简单的做个对比:
通过实践对比,发现同时开启opcache
和swoole
扩展,是响应时间最快的。
其他问题
- PHP-FPM进程管理,为什么会创建master进程?不科学呀
感谢
感谢 @Hesunfly 的解答。有时在命令行中用
php -i
模式查看扩展信息,和在页面中使用phpinfo()
查看的扩展信息会有不一致的情况。这里引用下 @Hesunfly 原话:
「有的发行版确实是cli
和fpm
的配置公用的,例如 mac 使用 brew 安装的 php 就是只有一个php.ini
。 但是我在 centos 和 ubuntu 下安装的一般是区分了cli
和fpm
的。」
Atas ialah kandungan terperinci 如何让你的Laravel在15毫秒内返回一个"hello world!". Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Kaedah untuk mendapatkan kod kembali apabila menghantar e -mel Laravel gagal. Apabila menggunakan Laravel untuk membangunkan aplikasi, anda sering menghadapi situasi di mana anda perlu menghantar kod pengesahan. Dan pada hakikatnya ...

Tugas Jadual Laravel menjalankan penyelesaian masalah yang tidak responsif semasa menggunakan penjadualan tugas jadual Laravel, banyak pemaju akan menghadapi masalah ini: Jadual: Jalankan ...

Kaedah mengendalikan kegagalan e -mel Laravel untuk menghantar kod pengesahan adalah menggunakan Laravel ...

Cara melaksanakan fungsi jadual klik tersuai untuk menambah data dalam dcatadmin (laravel-admin) semasa menggunakan dcat ...

Laravel - Dump Server - Laravel dump server datang dengan versi Laravel 5.7. Versi sebelumnya tidak termasuk pelayan dump. Pelayan dump akan menjadi kebergantungan pembangunan dalam fail komposer laravel/laravel.

Kesan perkongsian sambungan Redis dalam rangka kerja Laravel dan pilih kaedah apabila menggunakan Rangka Kerja Laravel dan Redis, pemaju mungkin menghadapi masalah: melalui konfigurasi ...

Sambungan pangkalan data penyewa tersuai dalam pakej lanjutan multi-penyewa Larave Stancl/penyewaan ketika membina aplikasi multi-penyewa menggunakan pakej lanjutan multi-penyewa Larave Stancl/penyewaan, ...

Laravel - URL Tindakan - Laravel 5.7 memperkenalkan ciri baharu yang dipanggil "URL tindakan boleh panggil". Ciri ini serupa dengan yang terdapat dalam Laravel 5.6 yang menerima kaedah rentetan dalam tindakan. Tujuan utama sintaks baharu memperkenalkan Laravel 5.7 adalah untuk mengarahkanl
