在web應用程式中,系統的瓶頸常在於系統的響應速度。如果系統響應速度過慢,使用者就會出現埋怨情緒,系統的價值也因此會大打折扣。因此,提高系統響應速度,是非常重要的。
web應用程式做的最多就是和後台資料庫互動,而查詢資料庫是種非常耗時的過程。當資料庫裡記錄過多時,查詢優化更顯得尤為重要。為了解決這種問題,有人提出了快取的概念。快取就是將使用者頻繁使用的資料放在記憶體中以便快速訪問。在使用者執行一次查詢操作後,查詢的記錄會放在快取中。當使用者再次查詢時,系統會首先從快取中讀取,如果快取中沒有,再查詢資料庫。快取技術在一定程度上提公升了系統效能,但是當資料量過大時,快取就不太合適了。因為記憶體容量有限,把過多的資料放在記憶體中,會影響電腦效能。而另一種技術,懶載入可以解決這種問題。
懶載入(load on demand)是一種獨特而又強大的資料獲取方法,它能夠在使用者滾動頁面的時候自動獲取更多的資料,而新得到的資料不會影響原有資料的顯示,同時最大程度上減少伺服器端的資源耗用。
考慮這樣乙個例子:海爾電器是乙個非常大的組織機構,它下有1萬多個組織單元。由於組織單元的複雜性,組織單元間也存在著上下級關係。現在的問題是:使用者想加入海爾電器的某個組織單元,他該怎麼選擇到這個組織單元呢?
很容易想到的乙個解決方法是:查詢資料庫,把海爾電器的所有組織單元放到乙個下拉列表中,讓使用者選擇即可。這樣的確是解決問題了,但是,測試發現,瀏覽器在顯示組織單元資料時就直接假死了。看來,這樣做效能太差,可以不採納。
另乙個解決方法就是利用懶載入技術。由於組織單元間存在著上下級關係,那麼組織單元的排列就可以當作一棵樹來處理。在顯示資料時只顯示父節點,點選父節點時,就能顯示父節點下的子節點。如下圖所示:
使用者要選擇某個組織單元,只需點選該組織單元的父親節點就能找到該組織單元。
可以看出,懶載入節省了系統響應時間,提公升了系統效能,非常具有利用價值。
在hibernate中,懶載入異常的解決方案就是利用spring的方案:
在web.xml中配置這個即可:同乙個請求之內的懶載入異常,通常使用過濾器來解決,不同請求不能用這個解決。
lazy屬性:
lazy表示的是該屬性是否懶惰載入,預設值是 true,當值為 true 的時候你在查詢主物件,不會立即載入該屬性值,即當使用者點選的時候才載入,如果設定為false,則會立即載入。例如:現有實體user有乙個位址屬性,
配置為:,當你在查詢user時不會立即載入它的address屬性,而是在你用到address屬性時它再自動載入,
如果你一直沒有用到address,那麼address屬性就一直不會被載入,而當lazy=false時,則是在你查詢user時就立刻載入它的address屬性
Spring中懶載入與非懶載入
在xml配置檔案中,延遲初始化將通過元素中的lazy init屬性來進行控制。例如 在容器層次中通過在元素上使用 default lazy init 屬性來控制延遲初始化也是可能的。如下面的配置 在同乙個檔案中裡面設定的優先順序大於裡設定的優先順序 immediately lazy immediat...
iOS中的懶載入
通俗一點就是用到時再載入,而且只載入一次,其實就是所謂的重寫物件的get方法,當系統或者開發者呼叫物件的get方法時,再去載入物件。實現 重寫get方法時,先判斷物件當前是否為空,為空的話再去例項化物件 使用懶載入的好處 inte ce viewcontroller property nonatom...
Vue router中的懶載入
平時路由配置如下 import vue from vue import router from vue router import details from components details import home from components home vue.use router expo...