django中的懶加載機制


懶加載在前端中的意義:

懶加載的主要目的就是作為服務器前端的優化,減少請求次數或者延遲請求數。

實現原理: 先加載一部分數據,當觸發某個條件時利用異步加載剩余的數據,新得到的數據不會影響原有數據的顯示,同時最大幅度的減少服務器端資源耗用。

實現方式:1. 第一種時純粹的延遲加載,使用setTimeOut和setinterval進行加載延遲。

     2. 第二種是條件加載,符合某種條件,或是觸發某些事件才開始異步加載。

        3. 第三種是可視區加載,僅記載用戶的可視區域,這個主要監控滾動條來實現,一般會根據用戶看到某些圖片前的一段距離時開始進行加載,這樣就可保證用戶下拉時正好可以看到加載完畢后的圖片或是內容。

django中的懶加載的方法:

1.settings懶加載

配置文件上可能會用到其他模塊,那么就有可能導致循環引用。django的配置采用了懶加載機制,或者說是延遲加載。根據from django.conf import settings查看得知:

所謂的延遲加載,就是在需要用到的時候在加載。一般手段有代理類,線程。計時器。Django中的lazyObject代理類。加載函數是_setup函數,當獲取屬性時才會去加載。

settings = LazySettings()

class LazySettings(LazyObject):
    def _setup(self, name=None):
        settings_module = os.environ.get(ENVIRONMENT_VARIABLE)
        self._wrapped = Settings(settings_module)

    def __getattr__(self, name):
        if self._wrapped is empty:
            self._setup(name)
        return getattr(self._wrapped, name)

LazySettings繼承自LazyObjects類,他重寫了__getattr__和__setattr__方法,那么在調用settings.INSTALLED_APPS時,會通過自定義的__getattr__方法實現。從中可以看出所有屬性都是從self._wrapped也就是Setting(setting_module)這個實例中取得的。

2. django ORM默認懶加載

django orm 默認使用的懶加載,即使用的時候采取訪問數據庫,且每次默認取最少的數據,當然這樣有好處也有壞處。

好處: 當你查詢是,會一次全部查詢把所有數據給你返回。

壞處: 會導致頻繁的查詢數據庫。如:涉及到外鍵的時候,會先去取需要的數據集,再取外鍵的數據集,等於訪問了兩次數據庫,那取n條數據就訪問了n*n次數據庫。

天王蓋地虎,全考985。

萬丈高樓平地起,成功只能靠自己。

星宿老仙,法力無邊,祝我高考,橫掃萬千。

不學習,如何養活你的眾多女人。

不會吧,不會吧,真的有人考不上本科。

今天是2020年高考的日子,祝莘莘學子,高考必勝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM