首頁  >  文章  >  php框架  >  如何讓你的Laravel在15毫秒內返回一個"hello world!"

如何讓你的Laravel在15毫秒內返回一個"hello world!"

藏色散人
藏色散人轉載
2021-03-25 17:19:292043瀏覽

下面由laravel教學專欄給大家介紹如何讓你的Laravel在15毫秒內返回一個"hello world!",希望對需要的朋友有所幫助!

首先,我認為透過傳回最基本的Hello world!字串,是所有以Laravel為框架的專案中,最基本的一個請求過程。除此之外,專案中的任何http請求,都會帶有更多的業務邏輯和資料庫查詢等耗時操作,且這些邏輯的執行時間都是不可控且不可對比的。也就是說,其他任何請求都不會比回傳一個Hello world!字串更短的時間了。所以,透過比較這個最基本的Hello world請求回應時間,我們可以看出,不同的最佳化對於Laravel框架從啟動到執行結束的影響。

推薦:最新的五個Laravel影片教學

#測試參數

##

預設配置回應時間

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

可以看出,在安裝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_如何讓你的Laravel在15毫秒內返回一個hello world!_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的功勞。

結語

我又測試了一下,單獨只啟用swoole擴展,不啟用opcache,發現回應時間和兩個擴充都開啟的回應時間一樣。也就是說,有了swoole後,opcache就沒用了?這個還得請各位大佬指點了。這裡簡單的做個對比:

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

透過實作對比,發現同時開啟opcacheswoole擴展,是回應時間最快的。

其他問題

  • PHP-FPM進程管理,為什麼會建立master進程?不科學呀

感謝

感謝 @Hesunfly 的解答。有時在命令列中以php -i模式查看擴充訊息,和在頁面中使用phpinfo()檢視的擴充資訊會有不一致的情況。這裡引用下@Hesunfly 原話:
「有的發行版確實是clifpm 的設定公用的,例如mac 使用brew 安裝的php 就是只有一個php.ini。但我在centos 和ubuntu 下安裝的一般是區分了clifpm 的。」
如何讓你的Laravel在15毫秒內返回一個hello world!

#參數 版本
#伺服器 1c處理器,1G內存,1M頻寬
PHP版本 8.0
#程式管理 PHP-FPM

以上是如何讓你的Laravel在15毫秒內返回一個"hello world!"的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除