2010-05-11 45 views
5

爲after_find和after_initialize事件定義回調的唯一方法是將它們定義爲方法。如果您嘗試使用第二種技術將它們聲明爲處理程序,它們將被默默忽略。爲什麼after_find和after_initialize事件的回調函數將它們定義爲方法?

有人可以解釋爲什麼是這樣嗎?

爲什麼專門爲這兩個回調?

編輯

從書: - Rails有使用reflec-重刑,以確定是否有要調用的回調。在進行真正的數據庫操作時,與數據庫開銷相比,這樣做的成本通常並不顯着。但是,單個數據庫選擇語句可能會返回數百行,並且每個回調都必須被調用。這顯着降低了查詢速度。 Rails團隊決定在這種情況下性能勝過一致性。 這到底是什麼...... !!!!這就是所有..只是作爲解釋... !!!

回答

2

the API來自:

的after_find和after_initialize例外

由於after_find和after_initialize被稱爲找到的每個對象和實例化由取景器,如Base.find(:所有),我們」我們不得不實現一個簡單的性能約束(在簡單的測試用例上速度提高了50%)。與其他所有回調函數不同,after_find和after_initialize只有在定義了顯式實現時纔會運行(def after_find)。在這種情況下,所有的回調類型都會被調用。

+0

Yaa我預定我使用作爲參考說明給定有: - Rails必須使用反射來確定是否有回調被調用。在進行真正的數據庫操作時,與數據庫開銷相比,這樣做的成本通常並不顯着。但是,單個數據庫選擇語句可能會返回數百行,並且每個回調都必須被調用。這顯着降低了查詢速度。 Rails團隊決定在這種情況下性能勝過一致性。 這到底是什麼...... !!!! – 2010-05-11 07:08:13

相關問題