淺談Django優(yōu)化

一:Django的QuerySets對象是有緩存的,一旦取出來,它就會在內(nèi)存中存儲一段時(shí)間,盡量重用它。

user = UserProfile.objects.get(id=1)

user.phone #第一次取出來使用,是要對數(shù)據(jù)庫進(jìn)行訪問

user.username #第二次再用,就是緩存中的實(shí)體了,不需要再訪問數(shù)據(jù)庫

注意如果使用all函數(shù),則每一次都會請求訪問數(shù)據(jù)庫

二:能去redis等等緩存中獲取到數(shù)據(jù)就可以別連接到數(shù)據(jù)庫去處理結(jié)果

三:使用QuerySets的迭代器功能,先緩存起來,避免占用太多內(nèi)存

四:避免all,使用filter過濾篩選數(shù)據(jù)

五:單一動(dòng)作需要多次連接數(shù)據(jù)庫時(shí),最好一次性取出所有需要的數(shù)據(jù),減少連接數(shù)據(jù)庫次數(shù)。

六:Django中的查詢是惰性的。這意味著在你真正需要獲取數(shù)據(jù)之前它不會訪問數(shù)據(jù)庫。同時(shí),它只獲取你指定的數(shù)據(jù),如果需要其他附加數(shù)據(jù),則要另外發(fā)出請求。為了提取所有需要的數(shù)據(jù),可以在查詢集上使用select_related()

七:默認(rèn)情況下,Django會從數(shù)據(jù)庫中提取所有字段。defer()only()這兩個(gè)查詢方法來改進(jìn)。第一個(gè)用于指定哪些字段不要加載,第二個(gè)用于指定只加載哪些字段。

八:如果像我一樣采取的是Django-rest框架,那么我們可以自定義序列化層,這幾乎可以縮短一半的時(shí)間

九:第三方擴(kuò)展應(yīng)用可能會花費(fèi)時(shí)間,我們可以更新三方應(yīng)用,或者自己造輪子來減少response時(shí)間

十:應(yīng)用層設(shè)置緩存,數(shù)據(jù)庫用redis作為數(shù)據(jù)庫緩存的中間件

十一:在部署環(huán)境下,加載模版使用緩存,設(shè)置數(shù)據(jù)庫持久化連接

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,301評論 2 89
  • Web框架之Django: (1)簡介: Django是一個(gè)由Python寫成開源的重量級Web應(yīng)用框架,采用MT...
    老肖閱讀 3,164評論 0 18
  • 小美在這座城市出生讀書,大學(xué)也沒有例外的留在了這座城市。 在大學(xué)里,她認(rèn)識了小柏,一個(gè)高高瘦瘦話不是很多的南方大男...
    米小米_V587閱讀 190評論 0 0
  • 雪后的世界是清冷的 盡管帶了手套,帽子,口罩,將自己嚴(yán)嚴(yán)實(shí)實(shí),包裹起來 依然擋不住寒氣逼人 和往常一樣去上班 穿過...
    利君理療閱讀 78評論 0 0
  • 不知道所謂重慶山城是不是像貴州一樣,山和城市,山和莊家,或者所有都是混雜在一起的,山也許對這邊的居民來說就像家...
    n你愛我像誰閱讀 264評論 5 2

友情鏈接更多精彩內(nèi)容