我的應用程序有幾個中間件可以在每個請求上運行。Laravel 5很多中間件和性能
我想知道有許多中間件的性能影響。它只是一個函數調用,或者當一箇中間件傳遞給另一箇中間件時,它正在執行HTTP重定向。
我有可能將所有中間件都加入到單箇中間件中,但爲了模塊化,我將中間件分開以執行特定任務。
我的應用程序有幾個中間件可以在每個請求上運行。Laravel 5很多中間件和性能
我想知道有許多中間件的性能影響。它只是一個函數調用,或者當一箇中間件傳遞給另一箇中間件時,它正在執行HTTP重定向。
我有可能將所有中間件都加入到單箇中間件中,但爲了模塊化,我將中間件分開以執行特定任務。
中間件只是一段在每個請求上執行的代碼。據我所知,它不會干擾你的請求週期,就像創建HTTP重定向一樣,除非你的中間件明確地這樣做了。中間件執行最基本的流程是
request -> middleware-1 -> middleware-2 ... middleware-N -> controller action -> response
從邏輯上講,當您添加更多的中間件,更多的代碼能夠順利通過每一個請求執行,從而是的,我認爲這可能會影響應用程序的性能,但要找出到底有多大的影響是的,你將不得不使用中間件來對你的代碼進行基準測試。此外,中間件可幫助您過濾請求。如果某個中間件停止了將請求傳播到應用程序中的進程,那麼只需執行很少的代碼,因此您還必須記住並非所有請求都執行相同數量的代碼。換句話說,在上圖中,如果中間件-1中的某個條件失敗,其餘的中間件加控制器代碼甚至不會執行,並且響應立即返回。
至於每個中間件都有專門的對象,我會說是的,這應該是你的方法,因爲Laravel 5的架構鼓勵這樣做,它也使得你的中間件模塊化(可在其他應用程序中重用)。
我正要通過中間件文檔和我創辦這個:
HTTP中間件進入您的應用程序過濾HTTP請求提供一個方便的機制。例如,Laravel包含一箇中間件,用於驗證應用程序的用戶是否已通過身份驗證。如果用戶未通過身份驗證,則中間件會將用戶重定向到登錄屏幕。但是,如果用戶通過身份驗證,中間件將允許請求繼續進入應用程序。
根據我,它不會每次都重定向,除非和直到出現故障。所以,據我說,不會有性能問題。
中間件只是一個函數調用的遞歸鏈。第一個中間件調用第二個調用第三個的中間件,依此類推。
如果其中一箇中間件選擇重定向或其他請求破壞性操作,則鏈終止。 (例如,如果用戶未通過身份驗證,身份驗證中間件將重定向)
如果沒有任何中間件斷開鏈,遞歸尾部會回滾並且請求會繼續進入應用程序。
編輯: 下面是一箇中間件的一個很簡單的例子:https://github.com/laravel/framework/blob/5.0/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php#L35
public function handle($request, Closure $next)
{
if ($this->app->isDownForMaintenance())
{
throw new HttpException(503);
}
return $next($request);
}
你看處理方法獲得的$request
作爲參數,並指向$next
中間件的handle
一個封閉方法。
除非應用程序處於維護模式,您可以看到(在這種情況下),它只是調用鏈中下一個具有(可能已更改)請求的中間件。
謝謝。一旦我有更多的空閒時間,我會做一些基準測試。 – Yada