2009-08-19 85 views
128

什麼是渴望加載?我使用PHP/JS進行編碼,但更廣義的答案將會很好。什麼是渴望加載?

我看到很多關於Ruby的問題,但我不知道這些語言中的任何一種,而且我發現很難閱讀代碼。我不知道什麼應該首先做

回答

296

有三個層次:

  1. 預先加載:當問及你所做的一切。經典的例子是當你乘兩個矩陣。你做所有的計算。這是急切的加載;
  2. 延遲加載:您只需要時進行計算。在前面的例子中,除非訪問結果矩陣的一個元素,否則不做任何計算;和
  3. 過分渴望加載:這是您嘗試和預測用戶將要求和預加載它的地方。

我希望在你看到的上下文中有意義。

讓我給你一個「Webby」的例子。

想象一個包含翻轉圖像的菜單項或導航頁面。有三種方式將圖像加載可在此頁上運行:

  1. 加載您呈現頁面(渴望)之前,需要每一個圖像;
  2. 在頁面加載時僅加載顯示的圖像並在需要時加載其他圖像(lazy);和
  3. 僅加載頁面加載時顯示的圖像。在頁面加載之後,在背景中預加載其他圖像以防您需要它們over-eager)。

有意義嗎?

+0

雖然你摔過通過超越的具體問題;這仍然是一個很好的答案。它簡短並且舉例。 – Phil 2011-03-05 17:22:26

+3

謝謝..很好的回答:) – Orlando 2012-05-08 14:27:01

21

這與lazy loading相反,它推遲對象的初始化,直到需要該對象。急切加載在創建時初始化對象。

+1

我可以補充說,這些術語通常用在ORM(對象關係映射器)的上下文中,在這裏你將對象映射到關係數據庫中的表格。 – Loki 2009-08-19 11:44:57

9

如果你想象你有一個叫人的對象,他有一個名字,一個出生日期和一些不太關鍵的細節,可以說最喜歡的顏色,最喜歡的電視節目。

爲了延遲加載這個類,你可能會從數據庫讀取所有核心更頻繁使用的細節(比如說出生的名字和出生日期),並且只有在需要/需要的時候纔會讀取較少使用的細節,渴望加載是相反的,即你在同一時間加載所有細節。

懶加載的典型應用該類超支往往citied爲effiecency,但如果對象是不是複雜或efficency不關心預先加載可用於

+7

當你考慮它時,延遲加載更多的是關於每個函數調用時更少的內存和更多的計算,而當創建類時急切的加載會使用更多的內存和更多的計算,而調用函數時會減少計算量。 – Loki 2009-08-19 11:49:25