[英]What is Rails doing after it logs 200 OK? (Debugging slow response time)
我正在嘗試在Ruby on Rails應用程序中調試非常慢的請求調用。 我已經按照自己的喜好優化了控制器方法,Rails的日志告訴我它已在XX毫秒內完成了操作( Completed 200 OK in 5049ms (Views: 34.9ms | ActiveRecord: 76.3ms)
毫秒內Completed 200 OK in 5049ms (Views: 34.9ms | ActiveRecord: 76.3ms)
)。 但是,在加載頁面時,此消息會在瀏覽器中實際呈現任何內容之前打印很久 ; 長達約15秒的等待時間。 Rack mini-profiler確認了這一點,並告訴我GET操作(不計算完成控制器操作所花費的時間)大約需要14秒。 (探查器還確認控制器動作的執行時間約為5秒)。
我可以用5秒鍾左右的時間來完成控制器的動作,因為我可以對代碼的各個部分進行基准測試,並清楚地看到什么很慢以及為什么。 關於這種神秘的滯后時間為何存在,我完全感到困惑。 到底在做什么
資產
主要原因可能是資產加載。 您是否在開發環境中? 默認情況下,資產不會預先編譯(我相信資產緩存也處於關閉狀態)
也許您看不到關聯的GET請求,因為您使用的是“安靜資產” gem。 看到所有對資產的GET請求(javascript / css)后,我感到非常疲倦,以至於將這個gem放入我的Gemfile中並忘記了一段時間。 但是接下來還有很多事情要做。
服務資產可能非常長。 例如,我正在使用一些jquery ui,一開始我是在application.js
調用//require jquery.ui.all
。 事實證明,它實際上只是為jquery.ui發送了數十個文件。 而且即使文件很小且提供服務的速度非常快,連續的GET請求/回復之間也會有一些延遲,這是導致我的localhost / development中的應用程序響應時間過慢的原因
您不想在開發中預編譯資產,但是可以擺脫無用的資產(如果使用的是jquery,則很可能只需要幾個文件,而不是全部)
在預編譯資產的情況下,我的服務器在測試/生產中的響應時間快10-100倍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.