web性能優化——瀏覽器相關

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

簡介 優化是一個持續的過程。所以儘可能的不要有人為的參與。所以能自動化的或者能從架構、框架級別解決的就最更高級別解決。 這樣即能實現面對開發人員是透明的、不響應,又能確保所有資源都是被優化過的。 場景 1. 確保靜態資源是有緩存。 2. 確保靜態資源的大小最小。 3. 確保載入的資源最少。 4. 確 ...


簡介

優化是一個持續的過程。所以儘可能的不要有人為的參與。所以能自動化的或者能從架構、框架級別解決的就最更高級別解決。

這樣即能實現面對開發人員是透明的、不響應,又能確保所有資源都是被優化過的。

場景

  1. 確保靜態資源是有緩存。
  2. 確保靜態資源的大小最小。
  3. 確保載入的資源最少。
  4. 確保用戶以最短的時間看到頁面
  5. 減少人為因素的性能瓶頸。

解決方案

緩存

讓資源更可能快的讓用戶看到。

結合代理(nginx)來實現。給http添加緩存的時長。

# 需要緩存的靜態資源類型
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css|ico)$ {
    ....
    if (-f $request_filename) {
        expires 1d;
        break;
    }
}

說明:

html文件的緩存,要根據具體業務來判斷。因為有些是真實的Html文件。有些是偽靜態,並沒有真的html文件
也可以通過cdn來緩存。

壓縮

通過自動化壓縮的工具來實現,儘量不要有人為的參與。這樣即能對開發是透明的,不增加複雜度,也能防止因為人為的因素的遺忘。

建議:glup的插件(jsmin,cssmin,imgmin)

按需載入

圖片載入延遲

所謂圖片延遲載入,就是每次只載入當前屏幕可見區域的圖片,其餘的圖片在用戶滾動頁面到該位置後才開始載入。這是一項非常實用的技術,減少了併發數,不但減少了伺服器的壓力,也降低了頁面的載入時間,目前很多門戶網站都使用了該技術,如騰訊微博的“看看推薦的人”頁面,在該頁面上有幾千個頭像,如果一次性載入全部的圖片,就要耗費比較多的客戶端和伺服器端的資源。該功能的實現原理很簡單,就是將頁面上的src替換成其他標記(如original),在頁面滾動到相應位置後,再將original更改為src。目前有個Jquery插件Jquery.LazyLoad.js可以實現圖片的延遲載入,而且這個方法也能減少請求數

非同步載入

首屏為行,重要信息為先,次要信息非同步載入。

減少不必要的傳輸

動靜功能變數名稱分離。不傳輸cookie。有很多業務相關的cookie會通過http傳輸。比如登錄後的token等。

減少請求數

網路請求是很費時。即增加了伺服器壓力,也影響用戶使用的性能。

一般思路是通過合併來實現。

  1. 合併請求。結合代理(nginx)的模塊(concat)來實現。
  2. 合併資源。雪碧圖。這個也可以通過glup插件來實現。

加快渲染

image屬性設置

有時需要在頁面載入完之前,就對頁面佈局進行定位。
若頁面中的圖片沒指定尺寸,或尺寸與實際圖片大小不符,瀏覽器會在圖片下載完成後再"回溯"該圖片並重新顯示,從而浪費時間。

# 頁面的請求過程
...

12. 渲染樹一旦有結構模型了,接著就會同步去計算渲染樹節點的佈局位置
13. 一旦計算出來渲染的坐標後,又同步去開始渲染
14. 10-13步進行過程中如果遇到圖片則跳過去渲染下麵內容,等待圖片下載成功後會返回來在渲染

...

所以,如果image如果沒有widthheight的話,會影響性能。

js位置

js的載入方式是阻塞式的。放在最後,等頁面都渲染完了再載入。

減少嵌套層級

嵌套越深,document的構建越慢。

高性能的規範

比如說:

  1. 避免CSS表達式
  2. 避免過大的cssName
  3. 避免頻繁的DOM操作等。
    ...

也可以把上面的一些對性能有響應加到規範里,比如img標簽必須有width和height,不允許css import,嵌套不允許超過3級等等。具體還是要看前端的規範。最好能有一些自動檢驗規範的工具。比如csshint,或者自己寫一些小工具等。

驗證方法

  1. 谷歌瀏覽器的開發者工具(控制台)
  2. pagespeed
  3. yslow
  4. https://varvy.com/tools/css-delivery/
  5. Chrome Task Manager。能查看記憶體泄漏

參考資源

  1. 網站性能優化工具大全
  2. web前端性能分析--原理篇
  3. Web性能優化分析
  4. Web前端,高性能優化
  5. Web前端優化最佳實踐及工具集錦

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

-Advertisement-
Play Games
更多相關文章
  • 簡介 一個很好的原則是調優時每次只個性一個配置。如果對配置的個性不能提高性能的話,改回預設值 優化必須要通過性能測試。不能意淫,需要前後對比,真實說明問題。 場景 1. 優化nginx。 2. 確保每次請求控制一定資源。 3. 減少訪問web容器 解決方案 nginx優化 全局優化 日誌 日誌是要讀 ...
  • 這兩天看了重溫了下設計模式和數據結構,又補了下基礎知識,然後就失眠了一整夜,不知為啥就想到級聯及偽刪數據這個問題。由於級聯刪除是幾乎人人都會遇到的問題,但方案卻有限卻不美好,所以歡迎大伙集思文益,以下內容歡迎大伙一起討論。 ...
  • 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的縮寫 ...
  • 前言 讀《大象》的這一章節感覺很有指導意義,雖然工程中不能全部實踐,但作為心法來驅動設計是綽綽有餘了。 特質 一切都是對象 在面向對象者的眼裡,一切有名字的東西都是對象,都應該使用對象的觀點來看待它、分析他。哪怕這個東西的名字叫某某業務流程,它仍然應該看作是一個對象,而不是一個過程。這意味著,無論什 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...