年初Django開發的網站項目初版已經上線,由於需求變更太大,因此想按照先後端分離的方式早點推重構再優化,可是時間又不容許,因此就先作初版的優化,重構的事並行,之後考慮遷移數據。css
壓縮js/css
文件。
咱們使用gulp
來壓縮js/css
文件。python
靜態文件所有遷移到七牛雲存儲裏面。
原來的靜態文件直接放在服務器裏,首頁圖片比較多,以前測試服務器加載完首頁js/css/圖片,最長的一個文件時間須要3.6秒左右,如今最長的圖片只須要170ms左右。在七牛對象存儲bucket中能夠設置文件的瀏覽器緩存Cache-Control的max-age的秒數,這樣可讓靜態文件在客戶端瀏覽器中緩存,好比static/js/index.js
,第一次請求資源時會請求服務器,若是沒有超出緩存時間,下載請求時直接加載本地資源。不過這裏可能會產生一個問題。若是你的靜態文件緩存在本地瀏覽器或者七牛的CDN中,你在更新服務器代碼的時候,就會產生髒數據。用戶請求的數據依舊是以前的緩存在本地或者CDN中的數據。解決的方法有幾種,第一種是在你的靜態文件後面加參數,好比原來請求static/js/index.js
如今改爲static/js/index.js?v=20170809
,這兩個是不一樣的URI,會促使服務器從新加載新的靜態文件,可是這樣作有個問題,只能全量更新,沒法增量更新。第二種方式是在你的靜態文件前面加前綴,好比/v1/static/js/index.js
,這個缺點也是同樣,沒法增量更新。第三種方式是在文件名後加md5值,好比static/js/index.c6d9c9fc12c1dbaee77703a4dd731a8b.js
。若是沒有改過的文件,仍是會加載到緩存中,該過的文件,因爲md5值變了,會請求新的文件,因此推薦使用第三種方式。因爲咱們項目的歷史緣由,沒辦法改爲第三種,暫時只能經過緩存的設置,我把客戶端緩存設置爲8小時,七牛的靜態文件緩存爲1個月,而後經過七牛的refresh的API,批量刷新一下網站中本身寫的js/css
的文件夾目錄,讓七牛的緩存從源中從新拉取文件。這樣在半夜更新服務器時,讓用戶在次日使用時不會加載髒數據。redis
視頻
視頻通常就直接上傳七牛,CDN加速。數據庫
圖片
圖片最先咱們是直接用python的wand庫切圖後,保存到線上服務器中。後來發現切圖的時間慢,並且很消耗CPU跟內存的資源,因此如今都是原圖直接上傳到七牛中,七牛針對圖片有圖片樣式的處理,好比頭像,咱們有三種標準4040,5050,8080,原來只切成8080的圖片,無論哪一種樣式,經過css的width跟height屬性控制其餘樣式。如今直接定義三個樣式,在圖片請求加上相關參數,直接就獲取了這三個樣式的圖片,最小化的減小圖片的加載。gulp
1.把常訪問的頁面用cache靜態化。
2.把經常使用的數據所有丟到在redis中,減小從數據庫中請求。後端
數據庫讀寫分離。提升數據庫性能。瀏覽器
代碼中減小對數據庫查詢的請求,一次查完的不要查二次,對常常查詢的字段建索引。七牛雲存儲
負載均衡。緩存
分庫分表。服務器