有關懶加載的淺顯理解

1,懶加載是提高性能的策略
多表查詢是其中一種典型情況
2,用戶在頁面上查詢數據,只需要查主表具體數據,外鍵的數據可以只顯示一個外鍵的情況:懶加載可只查詢主表的具體數據和關聯表的id值(非id值查回去的是一個代理對象),省去了查詢關聯表的資源,處理方式爲在對多集合上加上不去查詢的註解(@JSON(serialized=false)和@JsonIgnore
(配合懶加載的第一種策略)
3,用戶需要查詢主表數據也要關聯表數據的情況:
第二種策略:查詢需要session,正常查詢在事務中在service層中,傳回action的數據爲主表的具體數據和關聯表的代理對象,當用戶查到關聯表的數據時,代理對象需要再次需要session查詢數據庫,但session在事務結束後就已經關閉了,此時就要一種延長session週期到action層的filter,可以在web中設置OpenEntityManagerInViewFilter,但需要放在Struts核心filter之之前
因爲:action是被Struts包着的,Struts走完了,action也就走完了,延長session生命週期的filter沒攔截到action,沒有延長到session的週期

第三種策略爲全部立即加載在類中對多集合上加@OneToMany(fetch=FetchType.EAGER),外表的內容也全部查詢,但犧牲了性能,一般不提倡.

4,異步加載和懶加載都是提高性能的一種技術,目的都是爲了節約資源,懶加載省去了沒必要的查詢,異步省去了沒必要的加載,異步加載 也涉及到在action中轉json的情況,如是代理對象轉,就需要導數據庫查詢,當異步加載的是多表數據時,也是會出現懶加載的問題的.

5,異步和懶加載是兩回事,異步不涉及到懶加載,只是加載時機上的問題,所以異步配合上懶加載可以爲訪問資源做出了一先一後的優化作用.



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章