通過 PHP OPcache 讓你的 Laravel 應用運行速度飛起來
什麼是 Opcache
每一次執行 PHP 腳本的時候,該腳本都需要被編譯成位元組碼,而 OPcache 可以對該位元組碼進行緩存,這樣,下次請求同一個腳本的時候,該腳本就不需要重新編譯,這極大節省了腳本的執行時間,從而讓應用運行速度更快,同時也節省了伺服器的開銷。
用數字說話
我們當然很想知道到底進行了怎樣的優化,儘管性能提升高度依賴於應用和伺服器的配置,不過我們可以通過運行基準測試(benchmark)有一個大概的了解。
為此我專門準備了一個很低配置的機器:1核CPU,1G內存來運行 Apache 基準測試。我請求的是 Laravel 5.4 默認的歡迎頁面,讓 10 個並發請求持續訪問 1 分鐘,以下是關閉 OPcache 的基準測試結果:
對於一個這麼低配置的伺服器而言,這也不算太壞,但是我們可以做得更好。開啟 OPcache 的基準測試結果如下(使用默認 OPcache 配置):
差距還是很大的!我們接下來對 OPcache 配置進行優化,基準測試的表現效果更好:
這把服了沒有?
聽起來很牛逼,不過怎麼使用呢
首先,我們需要確保在伺服器上安裝了 OPcache,從 PHP 5.5 開始,OPcache 已經成為 PHP 核心的一部分,所以對於 Laravel 開發者而言,基本上不需要手動去安裝這個擴展。
當然,如果不放心,可以通過查看 進行確認:
該腳本會顯示所有 PHP 安裝的擴展。在頁面搜索 「OPcache」,如果找到,證明已經安裝。如果沒有,則需要自己去安裝。
接下來,我們需要在 PHP 的配置文件中啟用 OPcache(默認是關閉的):
下面我們繼續對 OPcache 進行一些優化配置:
這個配置表示你想要分配給 OPcache 的內存空間(單位:MB),設置一個大於 64 的值即可。
這個配置表示你想要分配給實際字元串的空間(單位:MB),設置一個大於 16 的值即可。
這個配置表示可以緩存多少個腳本,將這個值儘可能設置為與項目包含的腳本數接近(或更大)。
改配置值用於重新驗證腳本,如果設置為 0(性能最佳),需要手動在每次 PHP 代碼更改後手動清除 OPcache。如果你不想要手動清除,可以將其設置為 1 並通過 配置重新驗證間隔,這可能會消耗一些性能,因為需要每隔 x 秒檢查更改。
這個配置會在腳本中保留注釋,我推薦開啟該選項,因為一些庫依賴於這個配置,並且我也找不出什麼關閉它的好處。
快速關閉會給一個更快速清理內存的機制,不過,在我的基準測試中,更慢一些,可能這會應用帶來一些性能提升,但是你需要自己去嘗試。
所以,最終的配置優化長這樣:
你可以使用這些配置值進行實驗,具體配置值取決於你的應用大小和伺服器配置。
最後,保存這個配置文件並重啟 Web 伺服器,你的應用肯定會變得更快。
準備好 Laravel 應用
前面提到, 設置為 的話我們需要在每次修改 PHP 代碼後手動清除 OPcache。為此我創建了一個擴展包來提供相應的 Artisan 命令處理 OPcache 清理事宜:https://github.com/appstract/laravel-opcache。
安裝完擴展後,只需執行如下命令即可清理 OPcache:
此外,改擴展包還提供了一些其他有用的工具,你可以在項目的 GitHub頁面 上看到。
※RED_HAWK:基於PHP實現的信息收集與SQL注入漏洞掃描工具
※如何在海外伺服器上搭建無需域名認證的個人網站
TAG:PHP技術大全 |
※IHS Markit:蘋果或推出可摺疊iPad,運行iPad OS
※你現在可以在OnePlus X和OnePlus 2上運行Android 9 Pie
※Chrome OS再進一步:已可運行Linux應用
※怎樣在 Kubernetes 上運行 PostgreSQL
※Oculus Avatars APP可跨平台運行
※在Kubernetes上運行高可用的WordPress和MySQL
※三代iPhone Plus運行iOS誰更快
※Google 的 Fuchsia OS 將能運行 Android 應用
※Google推出AI晶元Edge TPU,可在邊緣運行TensorFlow Lite機器學習模型
※在 Kubernetes 上運行一個 Python 應用程序
※運行Android Pie的Nokia 3.1Plus現身Geekbench 或即將得到更新
※允許多個應用同時運行 Magic Leap最新版SDK增加Runtime
※Lumia移植Windows RT迎突破進展:可運行Store應用
※Pixel 3a/XL現身Google Play:運行Android 9 Pie
※Surface Phone蹤跡再現:運行Andromeda系統
※Darling能夠Linux上運行macOS軟體
※如何讓您的舊iPhone儘可能長時間運行-使用SparkleComm的IOS用戶注意啦
※三星Gear S4或將被稱為Galaxy Watch,還會運行Watch OS?
※Cellebrite說它現在可以解鎖運行iOS 11的設備,包括iPhone X
※谷歌新系統Fuchsia OS將能運行Android應用 為 Fuchsia 建構 ART