簡體   English   中英

為什么Rails會為每個請求創建一個控制器?

[英]Why does Rails create a controller for every request?

從我之前的問題中我了解到Rails為每個請求創建一個控制器實例。

我的問題是,因為這個主題與我正在研究的項目的設計有關:

為什么Rails會創建一個新的實例

class SomeController < ApplicationController; end

處理每個傳入的請求? 為什么不創建單例對象並將請求轉發給這個? 這似乎更有效,因為我們不會浪費資源來分配和清理請求對象?

實例化新控制器實例的開銷是微不足道的,這意味着兩個完全不相關的請求之間沒有意外共享狀態。 處理器時間的任何“節省”都會被產生毀滅性錯誤的可能性所抵消。

請記住,控制器用於存儲特定於請求的狀態。 重復使用控制器將要求您在每個操作開始時重置您設置的每個@variable 否則,像@is_admin = true這樣的東西可能會被設置並且永遠不會被清除。 你實際上引入的不那么人為的錯誤會更加微妙,並且會影響開發人員的時間。

你看到沒有的優化。 某些東西必須保持狀態並在請求之間重置它,否則你就會遇到意外共享狀態的噩夢。 如果在請求之間保留控制器實例,則只需將維護/重置狀態的工作推送到某個較低級別,其中答案可能仍然是為每個請求實例化某個狀態管理類的新實例。 計算機非常擅長分配和釋放資源,所以在你真正知道這是一個瓶頸之前不要擔心。 在這種情況下,為每個請求實例化一個新控制器很容易是正確的選擇。

對於Rails,能夠使用@variable = value是代碼清晰度和可用性立場的主要勝利,這或多或少需要在請求完成時丟棄控制器的每個實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM