hyperf官網熱更新加了FinderDriver。它主要是解決linux環境下,本地開發,熱更新沒有比mac系統fswatch好用的問題。但是FinderDriver對mac系統並不友好,mac系統下還是推薦使用fswatch。
配置FindDriver
use Hyperf\Watcher\Driver\ScanFileDriver;
use Hyperf\Watcher\Driver\FswatchDriver;
use Hyperf\Watcher\Driver\FindDriver;
return [
'driver' => FindDriver::class,
'bin' => 'php',
'watch' => [
'dir' => ['app', 'config', 'vendor'],
'file' => ['.env'],
'scan_interval' => 2000,
],
];
hyperf預設熱更新ScanFileDriver掃描vendor目錄下檔案,效能特別低。使用FindDriver的話,掃描效能可以提升上100倍左右。
為什麼FindDriver那麼快
FindDriver熱更新的思路跟ScanFileDriver一樣,每2秒遍歷獲取剛剛更新的檔案然後觸發restart。但是獲取檔案的思路不一樣,FindDriver通過linux系統find命令的高階語法實現,資源消耗小,命令響應快。
find app -mmin -0.05 -type f -printf "%p %T+\n"
find命令在linux系統一般是不用裝擴充套件,使用方便。而且使用上面的命令,在shell上面執行發現,很快就把剛剛更新的檔案顯示出來。
後記
用ScanFileDriver的時候,感覺很不習慣。然後在回家的路上,突然想到可以用find代替。然後第二天上午就把程式碼寫好了,提交pull request給hyperf官網。感謝hyperf團隊對程式碼重構和加上gfind以支援mac系統。活了這麼久,終於可以為hyperf開源做一點點貢獻。
本作品採用《CC 協議》,轉載必須註明作者和本文連結