提升 Web開發效能的 10 個技巧
隨著網路的高速發展,網路效能的持續提高成為能否在芸芸App中脫穎而出的關鍵。高度聯結的世界意味著使用者對網路體驗提出了更嚴苛的要求。假如你的網站不能做到快速響應,又或你的App存在延遲,使用者很快就會移情你的競爭對手。以下為大家總結10條有關效能提升的經驗,以供參考:
1. 採用反向代理伺服器(Reverse Proxy Server)來對應用進行加速和保護
其作用主要在以下三方面:
- 負載平衡 – 執行在反向代理伺服器上的負載平衡器會在不同的不伺服器 間進行傳輸平衡。透過它,你可以進行無差別的伺服器增添。
- 存靜態檔案 – 對於直接的檔案請求,例如圖片檔案或程式碼檔案,可以直接儲存在反向代理伺服器然後直接傳送給使用者,從而可以進行快速訪問併為應用伺服器進行減負使得程式效能得到提升。
- 安全保護 – 反向代理伺服器可以進行高安全度配置和對威脅進行識別和監測。
2. 增添一個負載平衡器
為網站增添一個負載平衡器是一個相對簡單的變更,但是它可以帶來不錯的效能和安全性提升。負載平衡器的作用在於在不同伺服器間進行傳輸分發。
負載平衡器的實施前提是有一個反向代理伺服器,它在接收到Internet通訊後把相關請求傳送到其它伺服器。平衡器的妙處在於它支援兩個或以上的應用伺服器,使用選擇演算法來分割伺服器間的請求。
3. 快取靜態和動態內容
快取技術的使用可使內容更快地展示給使用者,其處理策略有:在需求發出時更快地處理內容,把內容存放在更快的裝置上,或是使內容離使用者更近。
4. 資料壓縮
壓縮技術是一個巨大的潛在效能加速器。其主要作用體現在對圖片,視訊或音訊等檔案,能夠進行高效的壓縮處理。
5. 優化SSL/TLS訪問
儘管SSL/TLS變得越來越流行,但是它對於效能的影響也應得到重視。其對效能的影響主要體現在兩個方面:
- 每當新的連線開啟,初始化握手都是無法避免的,即瀏覽器每次都需要使用HTTP/1.X建立伺服器連線。
- 存放於伺服器上的加密資料會越來越大,加密後使用者讀取時也需要進行解碼。
那麼該如何進行處理呢?
- 會話快取—使用ssl_session_cache來直接快取建立新SSL/TLS連線的引數
- 會話ID化—把指定SSL/TLS的標識/ID存放起來,但要建立新連線時,就可以直接取用,從而免去重新建立通訊的繁瑣。
- OCSP stapling優化—通過抓取SSL/TLS認證資訊來減免建立通訊的時間。
6. 部署HTTP/2或SPDY
對於已經啟用SSL/TLS的網站,一旦結合HTTP/2和SPDY將能實現效能上的強強聯合;因為其結果是會讓單一連線的建立僅需一次通訊握手。SPDY和HTTP/2的主要特性是它們使用的是單一連線而不是多方連線。
7. 定期更新軟體版本
8. 優化Linux效能
例如對Linux進行以下配置或處理:
Backlog佇列
如果你有一些將要停用的連線,可以考慮增加net.core.somaxconn。
檔案描述符
NGINX允許每個連線最多使用兩個檔案描述符。如果你的系統服務的是多個連線,你可能需要考慮增大sys.fs.file_max的值。
瞬時埠
當作為一個代理使用時,NGINX會為每個upstream伺服器建立臨時的瞬時(ephemeral)埠。因此可以嘗試加大net.ipv4.ip_local_port_range的值來增加可用埠數。
9. 優化Web伺服器效能
訪問日誌優化
在NGINX中,在access_log中加入buffer=size引數來實現日誌的快取寫入;加入flush=time則可實現在某個時間間隔後進行快取內容寫入。
快取
啟用快取可使連線響應更快。
客戶端活動連線
活動連線可減少重連的次數,特別是啟用SSL/TLS的情況下。
Upstream活動連線
Upstream連線指的是連線到程式伺服器,資料庫伺服器等的連線。
限制資源的訪問
採取合適的策略來限制資源訪問可以提高效能和安全性。
進行worker處理
Worker處理模式就是請求驅動處理模式。NGINX使用了一個基於事件的模型和OS依賴機制來有效地對請求進行分發。
進行socket分表
Socket分表可以為每個worker處理建立一個socket監聽器,當核心委派連線分到給監聽器時,可以馬上知道哪個處理是即將執行的,從而使處理流程變得簡潔。
執行緒池處理
任何計算機執行緒都有可能由於單個緩慢的操作而掛起。對於web伺服器軟體來說,磁碟訪問是一個效能瓶頸,例如進行資料複製等操作。當使用執行緒池來處理時,可以把一些響應慢的操作單獨地放入某個任務組裡面,從而不會對其它操作造成影響。
10.進行實時監控以快速解決問題和瓶頸
實施實時監控,可以全面掌握系統的執行情況,發現問題解決問題,甚至是找出造成效能瓶頸或執行緩慢的原因。
例如可對如下的問題進行監控:
- 伺服器當機
- 連線訪問丟失
- 伺服器快取丟失嚴重
- 伺服器傳送了錯誤的資料
相關文章
- Web效能優化系列:10個JavaScript效能提升的技巧Web優化JavaScript
- 提升Web效能的8個技巧總結Web
- 10個提升MySQL效能的小技巧MySql
- 提升開發技能:10個高階的JavaScript技巧JavaScript
- Web 應用效能提升 10 倍的 10 個建議Web
- 6個提升PostgreSQL效能的小技巧SQL
- 5個介面效能提升的通用技巧
- Java 中的5個程式碼效能提升技巧,最高提升近10倍Java
- 提升 Python 程式效能的 6 個技巧Python
- 十大技巧快速提升原生APP開發效能APP
- 新知同享 | Web 開發效能提升,最佳化體驗Web
- 提升 Node.js 應用效能的 5 個技巧Node.js
- 提高Web應用程式開發的7個技巧Web
- Web開發中9個有用的提示和技巧Web
- CSS開發過程中的20個快速提升技巧CSS
- 10個提升WordPress效能的外掛
- 10個大大提升MySQL效率的使用技巧MySql
- 前端優化:9 個技巧,提高 Web 效能前端優化Web
- 前端優化 9 個技巧,提高 Web 效能前端優化Web
- 如何提升Web前端效能?Web前端
- 好的web開發者應該10個技巧Web
- 提高python開發效率的10個小技巧Python
- Web開發者必知的25個Apache效能優化技巧WebApache優化
- web前端CSS開發中的10個不要Web前端CSS
- 找到最完美Web開發程式設計師的5個技巧Web程式設計師
- 提升 iOS 開發效率! Xcode 9 內建模擬器的9個技巧iOSXCode
- Web APP開發技巧總結WebAPP
- 軟體開發中的10個最佳實踐技巧!
- 高效Web開發的10個jQuery程式碼片段WebjQuery
- 為 Web 開發提供的 10 個 Ruby on Rails GemsWebAI
- 移動 Web 開發的10個最佳 JavaScript 框架WebJavaScript框架
- Web開發人員常犯的10個錯誤Web
- 10個Web移動開發JavaScript框架Web移動開發JavaScript框架
- 提升Android平板效能的十大技巧Android
- 提升開發效率的十個工具
- Web開發者的10個最好的雲開發環境Web開發環境
- Web 的現狀:網頁效能提升指南Web網頁
- Java開發規範(效能提升)更新中Java