Heim  >  Artikel  >  PHP-Framework  >  So bringen Sie Ihr Laravel in 15 Millisekunden zu einem „Hallo Welt!“ zurück

So bringen Sie Ihr Laravel in 15 Millisekunden zu einem „Hallo Welt!“ zurück

藏色散人
藏色散人nach vorne
2021-03-25 17:19:292044Durchsuche

Zuallererst denke ich, dass die Wirkung des Frameworks vom Start bis zum Ende der Ausführung darin besteht, zum Grundlegendsten zurückzukehren . Empfohlen:

Die neuesten fünf Laravel-Video-Tutorials

Hello world!字符串,是所有以Laravel为框架的项目中,最基本的一个请求过程。除此以外,项目中的任何http请求,都会带有更多的业务逻辑和数据库查询等耗时操作,且这些逻辑的执行时间都是不可控和不可对比的。也就是说,其他任何请求都不会比返回一个Hello world!字符串更短的时间了。所以,通过对比这个最基本的Hello world请求响应时间,我们可以看出,不同的优化对于Laravel

Test. Parameter

Parameter

Version 1c Prozessor, 1G Speicher, 1M Bandbreite
Server
PHP-Version 8.0
Prozessmanagement PHP-FPM

Antwortzeit der Standardkonfiguration

让你的Laravel在 15 毫秒内返回一个

Es ist ersichtlich, dass nach der Installation von PHP unter der Standardkonfiguration durchschnittlich benötigt wird, um einen <code>Hallo Welt! Ungefähr 140 ms. Als nächstes fangen wir an! PHP后,默认配置情况下,返回一个Hello world!平均需要140ms左右。接下来,我们开始搞事情了!

Round 1:Laravel 缓存

Laravel为我们提供了很方便的artisan命令来开启缓存功能,有效的减少了文件读取次数。其中php artisan optimize命令包括了php artisan config:cachephp 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在 15 毫秒内返回一个

可见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_So bringen Sie Ihr Laravel in 15 Millisekunden zu einem „Hallo Welt!“ zurück_override => Off => Off

ok,已经开启opcache扩展了,我门再来看下Hello world!的响应时间:

让你的Laravel在 15 毫秒内返回一个

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_httpswoole_websocket两个配置文件。一个基本的Hello world!测试,无需修改默认配置,我们只在项目的.env文件中,添加SWOOLE_HTTP_HOST=0.0.0.0SWOOLE_HTTP_PORT=2020即可,意思是在2020端口启动一个http监听程序。0.0.0.0指任何IP都可远程访问。

// .env
SWOOLE_HTTP_HOST=0.0.0.0
SWOOLE_HTTP_PORT=2020

基本配置修改完成,我们启动laravel-swoolehttp应用:

root@Aliyun-ECS / # php artisan swoole:http start
Starting swoole http server...Swoole http server started: <http:></http:>

此时我们访问2020端口,即可测试使用swoole扩展后的应用。再看下请求的响应时间:

让你的Laravel在 15 毫秒内返回一个

好家伙!直接干到15ms以内。这里第一次时间较长,是因为开了opcache的原因,会写入缓存。但这里的opcache写缓存,要比Round 2那个只开启opache扩展要快很多,这都是swoole

🎜🎜Runde 1: Laravel-Cache🎜🎜Laravel stellt uns einen sehr praktischen artisan-Befehl zur Aktivierung der Cache-Funktion zur Verfügung, der die Anzahl der Dateilesevorgänge effektiv reduziert. Der Befehl php artisan activate enthält die Befehle php artisan config:cache und php artisan route:cache, es wird jedoch noch einen weiteren geben Dateien Cache. Führen Sie die folgenden 5 Befehle nacheinander aus: 🎜rrreee🎜Werfen wir einen Blick auf die Reaktionszeit: 🎜🎜Lassen Sie Ihr Laravel ein „Hallo Welt!“ zurückgeben“/>🎜🎜Es ist ersichtlich, dass der Cache von <code>Laravel</code> keinen offensichtlichen Einfluss auf die grundlegendsten Anfragen hat. 🎜🎜🎜🎜Runde 2: Opcache aktivieren🎜🎜Dieses Mal habe ich mich für die naheliegendste Methode zur Beschleunigung entschieden: <strong>die <code>opcache</code>-Erweiterung aktivieren</strong>. Da ich <code>php8</code> mit der <strong>remi</strong>-Quelle installiert habe, ist es für mich einfacher, die <code>opcache</code>-Erweiterung hier zu installieren. Für die Installation anderer Versionen bitte Googelt es selbst. 🎜rrreee🎜Nachdem wir auf den Abschluss der Installation gewartet haben, starten wir <code>php</code> neu und prüfen dann, ob die Erweiterung installiert wurde: 🎜rrreee🎜ok, die <code>opcache</code>-Erweiterung wurde aktiviert , wir prüfen noch einmal die Antwortzeit für den Download von <code>Hallo Welt!</code>: 🎜🎜<img src=Fazit

Ich habe es erneut getestet und nur die Erweiterung swoole aktiviert, ohne den opcache zu aktivieren. Ich habe festgestellt, dass die Reaktionszeit dieselbe war wie bei der Aktivierung beider Erweiterungen . Mit anderen Worten, mit swoole ist opcache nutzlos? Da muss ich die Großen um Rat fragen. Hier ist ein einfacher Vergleich: swoole扩展,不启用opcache,发现响应时间和两个扩展都开启的响应时间一样。也就是说,有了swoole后,opcache就没用了?这个还得请各位大佬指点了。这里简单的做个对比:

让你的Laravel在 15 毫秒内返回一个

通过实践对比,发现同时开启opcacheswoole扩展,是响应时间最快的。

其他问题

  • PHP-FPM进程管理,为什么会创建master进程?不科学呀

感谢

感谢 @Hesunfly 的解答。有时在命令行中用php -i模式查看扩展信息,和在页面中使用phpinfo()查看的扩展信息会有不一致的情况。这里引用下 @Hesunfly 原话:
「有的发行版确实是 clifpm 的配置公用的,例如 mac 使用 brew 安装的 php 就是只有一个 php.ini。 但是我在 centos 和 ubuntu 下安装的一般是区分了clifpmLass deinen Laravel in 15 Millisekunden laufen. Returns ein „Hallo Welt!“/><br/><img src=Durch einen praktischen Vergleich wurde festgestellt, dass die gleichzeitige Aktivierung der Erweiterungen opcache und swoole die schnellste Reaktionszeit hat.

🎜🎜Weitere Fragen🎜
  • PHP-FPM-Prozessmanagement, warum wird der Masterprozess erstellt? Unwissenschaftlich
🎜🎜🎜Danke🎜
🎜Danke@Hesunfly🎜 für die Antwort. Manchmal stimmen die erweiterten Informationen, die mit dem php -i-Modus in der Befehlszeile angezeigt werden, nicht mit den erweiterten Informationen überein, die mit phpinfo() auf der Seite angezeigt werden. Hier ist ein Zitat von@Hesunfly🎜Originalworte:🎜"Einige Distributionen teilen die Konfigurationen von cli und fpm. Mac verwendet beispielsweise brew Zur Installation gibt es nur eine php.ini für PHP, aber wenn ich sie auf Centos und Ubuntu installiere, unterscheide ich normalerweise zwischen cli und fpm ."🎜 🎜🎜🎜🎜

Das obige ist der detaillierte Inhalt vonSo bringen Sie Ihr Laravel in 15 Millisekunden zu einem „Hallo Welt!“ zurück. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen