web性能優化——簡介

来源:http://www.cnblogs.com/ansn001/archive/2016/07/20/5688366.html
-Advertisement-
Play Games

簡介 性能優化的第一准則: 。幾乎絕大部分優化都圍繞這個來進行的。讓用戶最快的看到結果。 性能優化的第二準則: 。絕不提供多餘的信息。比如,靜態資源(圖片、css、js)壓縮,圖片的滾動載入,非同步請求,http請求合併等。 性能優化的第三準則: 。當前,這個的前提是已經把基本優化都做完了,才考慮這個 ...


簡介

性能優化的第一准則:加緩存。幾乎絕大部分優化都圍繞這個來進行的。讓用戶最快的看到結果。

性能優化的第二準則:最小原則。絕不提供多餘的信息。比如,靜態資源(圖片、css、js)壓縮,圖片的滾動載入,非同步請求,http請求合併等。

性能優化的第三準則:分佈、集群。當前,這個的前提是已經把基本優化都做完了,才考慮這個方面。

思路

性能優化的過程是一個鏈條,任何一個節點上都要優化,否則都會出問題,優化也就失敗了。

每個節點上都包含這幾個方面

  • 定位。定位這個節點是否有存在性能問題。
  • 監控。監控這個節點的性能問題。
  • 解決問題的辦法(文檔)。減少人為解決問題的成本。

後面的文章也是根據流程,一個節點一個節點來組織

性能類型

包括但不僅限於下麵的幾種類型。下麵的這些,僅僅是基於我們團隊使用的技術而言。如果有使用更多的技術可以往裡面補充,比如說:cdn緩存加速等。

瀏覽器

瀏覽器是用戶接觸的第一道程式。往往在這裡的優化很直接、簡單,而且效果反而會很好。

  1. 資源靜態緩存
  2. 資源靜態按需載入

網路

目前網路還是比較嚴重的性能瓶頸。商用的企業帶寬也比較貴,所以優化是非常有必要的。

  1. 合併請求
  2. 壓縮傳輸(gzip)
  3. 壓縮http的response內容

伺服器

首先要確保每一個軟體本身已經是優化過的,而且對應的軟體的應用場景也是優化過。

  1. 操作系統(linux)
  2. 代理(nginx)
  3. web容器(tomcat)
  4. web應用(java)
  5. 資料庫(mysql)

架構

架構的統一解決,可以讓開發在一定的程式減少對性能的考慮。

  1. 業務規劃。比如說:動靜分離,並且使用不同功能變數名稱。
  2. 分佈。把重要的應用分佈部署,獨立提供服務。
  3. 集群。集群+負載均勻,是解決性能很直接的問題。但是最後放在所有的性能已經是最佳的情況下,再去考慮集群。這樣會減少運維成本及資金成本。
  4. 緩存化。把熱點命中的內容,又使用非常頻率的使用緩存。要考慮使用的場景和命中率。
  5. 靜態化。把常年不變的內容,都走靜態化,是一個非常棒的想法。最好是做成對業務透明,無影響。

軟體研發

很多性能問題是在研發的過程中產生的。

  1. 高性能的設計。比如:合理的資料庫欄位冗餘。比如演算法的複雜度。
  2. 高性能的規範。比如:不允許for里有io等。
  3. 高性能的標準。每個業務,要有一個標準,超過這個標準要要優化。不用每一個都必須優化,這樣也影響開發效率。有目的的優化,8/2比例。用20%的時間,解決80%有性能問題。

框架

  1. 消息隊列。解決複雜場景,不需要用戶等待。如果解決實效性沒那麼強的業務。

語言(java)

對虛擬機的優化。

流程

熟悉流程及節點,才能定位性能的問題。而且優化的順序一般也是按請求的流程逐一優化。這裡的流程只是做個概要,並不代表全面。

整個流程是以最快的方式讓用戶看到結果

重覆問題

如果有重覆的問題,交給更高層節點(流程里的前一個節點)去解決。比如說:如果能在代理級別做靜態和緩存,就不要在web容器里去實現,更不要在web應用里去實現。

文檔的統一結構

  1. 場景
  2. 解決方案
  3. 驗證方法

更高目標暢想

通過雲計算來實現這些功能。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這兩天看了重溫了下設計模式和數據結構,又補了下基礎知識,然後就失眠了一整夜,不知為啥就想到級聯及偽刪數據這個問題。由於級聯刪除是幾乎人人都會遇到的問題,但方案卻有限卻不美好,所以歡迎大伙集思文益,以下內容歡迎大伙一起討論。 ...
  • 1.意圖 在布破壞封裝性的前提下,捕獲一個對象的內部狀態,併在該對象之外保存這個狀態。這樣以後就可以將對象恢復到原先保存的狀態。 2.別名 Token 3.動機 為了允許用戶取消不確定的操作或從錯誤中恢復過來,需要實現檢查點和取消機制,而要實現這些機制,必須將狀態信息保存在某處,這樣才能將對象恢復到 ...
  • 1.意圖 用一個中介對象來封裝一系列的對象交互。中介者使各個對象不需要顯示地相互引用,從而使其耦合鬆散,而且可以獨立地改變它們之間的交互。 2.動機 通過將集體行為封裝在一個單獨的中介者對象中,中介者負責控制和協調一組對象間的交互。中介者充當一個中介以使組中的對象不再相互顯示引用。這些對象只知道中介 ...
  • 享元(Flyweight)模式是一種經典的結構型設計模式,用於優化重覆、緩慢及數據共用效率較低的代碼。它旨在通過與相關對象共用儘可能多的數據來減少應用程式中記憶體的使用。 應用場景 (1)用於數據層,處理記憶體中保存的大量相似對象的共用數據。 (2)用於DOM層,Flyweight用作中央事件管理器,來 ...
  • 1.意圖 提供一種方法順序訪問一個聚合對象中的各個元素,而又不暴露該對象的內部表示。 2.別名 Cursor-游標。 3.動機 一個聚合對象,應該提供一種方法來讓別人可以訪問它的元素,而又不需暴露它的內部結構。 4.適用性 訪問一個聚合對象的內容而無需暴露它的內部表示。 支持聚合對象的多種遍歷。 為 ...
  • 一、什麼是CS和BS結構? 1.C/S又稱Client/Server或客戶/伺服器模式。伺服器通常採用高性能的PC、工作站或小型機,並採用大型資料庫系統,如Oracle、Sybase、Informix或SQLServer。客戶端需要安裝專用的客戶端軟體。 2.B/S是Brower/Server的縮寫 ...
  • 前言 讀《大象》的這一章節感覺很有指導意義,雖然工程中不能全部實踐,但作為心法來驅動設計是綽綽有餘了。 特質 一切都是對象 在面向對象者的眼裡,一切有名字的東西都是對象,都應該使用對象的觀點來看待它、分析他。哪怕這個東西的名字叫某某業務流程,它仍然應該看作是一個對象,而不是一個過程。這意味著,無論什 ...
  • 簡介 優化是一個持續的過程。所以儘可能的不要有人為的參與。所以能自動化的或者能從架構、框架級別解決的就最更高級別解決。 這樣即能實現面對開發人員是透明的、不響應,又能確保所有資源都是被優化過的。 場景 1. 確保靜態資源是有緩存。 2. 確保靜態資源的大小最小。 3. 確保載入的資源最少。 4. 確 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...