信大家都聽過這么一句話,“臉蛋和身材決定了我是否愿意了解你的心靈,而你的心靈又決定了我是否會一票否決掉你的臉蛋和身材”。對于一個網站來說,這個道理也是同樣適用的,即使你有著豐富而有價值的內容,但是客戶卻在外面半天進不去,也會慢慢地失去耐心。
尤其在如今這個信息爆炸的時代,人們的節奏總是快速的,對于一個網站的耐心畢竟是有限的可憐的,如果網站不進行優化必定會流失相當一部分的客戶,帶來不必要的損失。那么從Web前端的性能優化上來說有哪些常見、實用的方法呢?下面千鋒武漢Web前端培訓小編就列舉6個常見且實用的Web前端性能優化方法。
1、使用CDN
CDN(內容分發網絡)部署在各大運營商機房,當用戶通過瀏覽器請求資源時可以直接反饋給用戶,極大的減輕了服務器數據中心的壓力。本質上CDN也是一種緩存,如果你的所在地距離某個CDN節點很近,那么網站響應的速度提升也是非常明顯的。另外CDN所緩存的資源主要為靜態資源,如靜態頁面、圖片、css和js文件等。CDN加速對于一些遍布范圍較大的網站來說效果最為明顯,使用的話像阿里云CDN產品,其節點多達280多個,覆蓋運營商也比較全面。
2、減少外部http協議
網頁加載的時間與http請求密不可分,而外部資源的加載的速度則與主機服務提供商服務器架構和分布地點有關。我們可以通過檢查自己的網站上多余的圖片、css、JavaScript和一些組件,然后對應的去逐個完善,就可以減少一些http請求。
3、使用預獲取
顧名思義預獲取就是在真正有需要去請求之前就獲取一些必要的數據和資源,以提升用戶的瀏覽體驗。預獲取主要有三大方式:
1.鏈接預先獲取
2.DNS預先獲取
3.預先渲染
根據你想要使用的預先獲取形式,你只需在網站 HTML 中的鏈接屬性上增加 rel="prefetch",rel="dns-prefetch",或者 rel="prerender" 標記。
4、壓縮HTML、CSS和JavaScript
在編寫代碼時候會有一些多余的空格,這會占用字節,使用一些壓縮工具可以有效解決這個問題。值得注意的是,壓縮后的文件,其可讀性就會變差,后期想維護就會變得困難了。
5、優化圖片
一張高清的圖片大概幾兆左右,而很多時候我們并不需要這樣的畫質,一般我們都會選擇將其保存為高畫質的就可以了,這樣會有效減小加載圖片帶來的壓力。像JPEG圖片那樣包含了時間、地點、相機型號的格式,更不是我們所需要的。
6、Ajax請求方式
POST的請求,是不可以在客戶端緩存的,每次請求都需要發送給服務器進行處理,每次都會返回狀態碼200。(可以在服務器端對數據進行緩存,以便提高處理速度)
GET的請求,是可以(而且默認)在客戶端進行緩存的,除非指定了不同的地址,否則同一個地址的AJAX請求,不會重復在服務器執行,而是返回304。所以在進行Ajax請求的時候,可以選擇盡量使用get方法,這樣可以使用客戶端的緩存,提高請求速度。
以上就是千鋒武漢Web前端培訓小編整理的6個常見且實用的Web前端性能優化方法。進行Web前端優化似乎需要花費很大的精力,相信這篇應用指南中的一些小技巧能幫你極大改善網站加載速度。網站加載地越快,則用戶體驗越佳。因此,對Web前端進行優化能使給你和你的用戶都帶來益處。
其實還有很多Web前端性能的優化手段,以上只是列舉了部分。如果大家有更好的建議的話,可以在下方留言。
起HTML標簽,前端工程師會非常的有發言權,因為在平時開發中一定會用到,可以說是前端的入門必備知識。但往往在意更多的是頁面的渲染效果及交互方式,也就是頁面可見的部分,比如導航欄,菜單欄,列表,圖文等。
其實還有一些頁面上沒有呈現出來卻非常重要的標簽,這些標簽大部分在頁面的頭部head標簽內,雖然在頁面上看不見摸不著,但如果在特定的場景下,會產生意想不到的效果。下面我將從交互優化,性能優化,搜索優化三個方面并結合場景來聊聊被“忽視”的HTML標簽。
交互優化
meta 標簽:自動跳轉/刷新
假設要實現一個類似自動播放的頁面,首先我們第一反應會想到用js定時器控制頁面跳轉來完成。但是其實有更加簡便的方法,通過meta標簽的refresh功能來實現。
<meta http-equiv="refresh" content="10; url=view2.html">
上面的代碼會在 10s 之后自動跳轉到同域下的 view2.html 頁面。我們要實現自動播放的功能,只需要在每個頁面的 meta 標簽內設置好下一個頁面的地址即可。
如果要實現定時刷新的功能,只要去除后面url即可:
<meta http-equiv="refresh" content="10">
注意,用meta標簽實現刷新/跳轉的過程是不可取消的,所以需要手動取消的還是得老老實實使用js的定時器,但是對于簡單的定時刷新或跳轉,還是可以去親自實踐meta的用法。
title 標簽:消息提醒
消息提醒功能實現在HTML5標準發布之前,瀏覽器還沒有開放圖標閃爍、音頻播放,彈出系統消息之類的api,只能借助其他非常規的手段,比如修改title 標簽來達到類似的效果。
下面的代碼通過定時修改title標簽的內容,實現了消息提醒的功能,可以讓用戶在瀏覽其他頁面時候,及時發現服務端返回的消息。
let messageNum=1; // 消息條數
let count=0; // 計數器
const msgInterval=setInterval(()=> {
count=(count + 1) % 2;
if(messageNum===0) {
// 通過DOM修改title
document.title +=`當前頁面`;
clearInterval(msgInterval);
return;
}
const pre=count % 2 ? `新消息(${msgNum})` : '';
document.title=`${pre}當前頁面`;
}, 1000);
當然,動態修改title標簽的用途不僅僅是消息提醒,還可以顯示一些異步進行的任務,比如下載進度,上傳進度等。
性能優化
script 標簽:調整加載順序提升渲染速度
不知道你們有沒有過這樣的體驗:當在瀏覽器打開某個頁面時,發現頁面一直在loading轉圈,或者等了好長的時間頁面才有響應。這一現象,除了網絡網速的原因外,大多數都是由于頁面結構設計不合理導致加載時間過長。因此,如果想要提升頁面的渲染速度,就需要了解瀏覽器頁面的渲染過程是怎樣的,從根本上來解決問題。
瀏覽器在加載頁面的時候會用到 GUI 渲染線程和 JavaScript 引擎線程。其中,GUI 渲染線程負責渲染瀏覽器界面 HTML 元素,JavaScript 引擎線程主要負責處理 JavaScript 腳本程序。由于 JavaScript 在執行過程中還可能會改動界面結構和樣式,因此它們之間被設計為互斥的關系。也就是說,當 JavaScript 引擎執行時,GUI 線程會被掛起,等執行完 JavaScript 的腳本程序后又會切換 GUI 線程繼續渲染頁面。
所以我們可以知道頁面渲染過程中包含了請求腳本文件以及執行腳本文件的時間,但頁面的首次渲染可能并不需要執行完全部的文件,這些請求和執行文件的動作反而延長了用戶看到頁面的時間,從而降低了用戶體驗。
為了快速將內容呈現給用戶,減少用戶等待時間,可以借助script標簽的3個屬性來實現:
async:表示立即請求腳本文件,但不阻塞 GUI 渲染引擎,而是文件加載完畢后阻塞 GUI 渲染引擎并立即執行文件內容。
defer。立即請求腳本腳本,但不阻塞 GUI 渲染引擎,等到解析完 HTML 之后再執行文件內容。
HTML5 標準 type,對應值為“module”。讓瀏覽器按照 ECMA Script 6 標準將文件當作模塊進行解析,默認阻塞效果同 defer,也可以配合 async 在請求完成后立即執行。
所以可以得知,采用defer 屬性以及 type="module" 情況下能保證渲染引擎的優先執行,從而減少執行文件內容消耗的時間,讓用戶更快地看見頁面(即使這些頁面內容可能并沒有完全地顯示)。除此外還要知道,當渲染引擎解析 HTML 遇到 script 標簽引入文件時,會立即進行一次渲染,這就是為什么會把引用JavaScript 代碼的 script 標簽放入到 body 標簽底部。
link 標簽:通過預處理提升渲染速度
在我們對中大型項目進行性能優化時,往往會對資源做減法(gzip壓縮,緩存等)或除法(按需打包,按需加載),可是如果能想到 link 標簽的 rel 屬性值來進行預加載,也能加快頁面的渲染速度。
dns-prefetch。當 link 標簽的 rel 屬性值為“dns-prefetch”時,瀏覽器會對某個域名預先進行 DNS 解析并緩存。這樣,當瀏覽器在請求同域名資源的時候,能省去從域名查詢 IP 的過程(DNS查詢),從而減少時間損耗。(注意:這個屬性還在實驗階段,部分瀏覽器的部分版本支持)
preconnect。讓瀏覽器在一個 HTTP 請求正式發給服務器前預先執行一些操作,這包括 DNS 解析、TLS 協商、TCP 握手,通過消除往返延遲來為用戶節省時間。(注意:這個屬性還在實驗階段,部分瀏覽器的部分版本支持)
prefetch/preload。兩個值都是讓瀏覽器預先下載并緩存某個資源,但不同的是,prefetch 可能會在瀏覽器忙時被忽略,而 preload 則是一定會被預先下載。
prerender。瀏覽器不僅會加載資源,還會解析執行頁面,進行預渲染。(注意:這個屬性還在實驗階段,部分瀏覽器的部分版本支持)
搜索優化
你所寫的前端代碼,除了要讓瀏覽器更好執行,有時候也要考慮更方便其他程序(如搜索引擎)理解。合理地使用 meta 標簽和 link 標簽,恰好能讓搜索引擎更好地理解和收錄我們的頁面。
meta 標簽:提取關鍵信息
通過 meta 標簽可以設置頁面的描述信息,從而讓搜索引擎更好地展示搜索結果。
例如,在百度中搜索“淘寶”,就會發現網站的描述信息,這些描述信息就是通過 meta 標簽專門為搜索引擎設置的,目的是方便用戶預覽搜索到的結果。
為了讓搜索引擎更好地識別頁面,除了描述信息description之外還可以使用關鍵字,這樣即使頁面其他地方沒有包含搜索內容,也可以被搜索到(當然搜索引擎有自己的權重和算法,如果濫用關鍵字是會被降權的,比如 Google 引擎就會對堆砌大量相同關鍵詞的網頁進行懲罰,降低它被搜索到的權重)。
當我們搜索關鍵字“安全購物”的時候搜索結果會顯示淘寶網的信息,雖然顯示的搜索內容上并沒有看到“安全購物”字樣,這就是因為淘寶網頁面中設置了這個關鍵字。
對應代碼如下:
<meta content="淘寶,掏寶,網上購物,C2C,在線交易,交易市場,網上交易,交易市場,網上買,網上賣,購物網站,團購,網上貿易,安全購物,電子商務,放心買,供應,買賣信息,網店,一口價,拍賣,網上開店,網絡購物,打折,免費開店,網購,頻道,店鋪" name="keywords">
在實際工作中,推薦使用一些關鍵字工具來挑選,比如
Google Trends
https://trends.google.com/trends
站長工具
https://data.chinaz.com/keyword/
link 標簽:減少重復
有時候為了用戶訪問方便或者出于歷史原因,對于同一個頁面會有多個網址,又或者存在某些重定向頁面,比如:
- https://baidu.com/a.html
- https://baidu.com/detail?id=abcd
那么在這些頁面中可以這樣設置:
<link href="https://baidu.com/a.html" rel="canonical">
這樣可以讓搜索引擎避免花費時間抓取重復網頁。不過需要注意的是,它還有個限制條件,那就是指向的網站不允許跨域。
當然,要合并網址還有其他的方式,比如使用站點地圖,或者在 HTTP 請求響應頭部添加 rel="canonical"。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。