自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

僅需 5 分鐘,快速優(yōu)化 Web 性能的10 個手段

開發(fā) 前端
在這篇文章中,主要介紹10種快速提高網(wǎng)站性能的方法,你只需5分鐘內(nèi)就可以將它應用到你的網(wǎng)站上,廢話不多說,讓我們進入正題吧 。

[[347253]]

本人已經(jīng)過原作者制授權翻譯。

在這篇文章中,主要介紹10種快速提高網(wǎng)站性能的方法,你只需5分鐘內(nèi)就可以將它應用到你的網(wǎng)站上,廢話不多說,讓我們進入正題吧 。

1. 文件壓縮

文件壓縮,可以減少網(wǎng)絡傳輸?shù)淖止?jié)數(shù)。有幾種壓縮算法。Gzip是最流行的,但是對于Brotli,你可以使用一種更新的、甚至更好的壓縮算法。如果想檢查您的服務器是否支持Brotli,可以使用 Brotli.pro。

如果你的服務器不支持Brotli,則可以按照以下簡單指南進行安裝 👍:

  • Nginx on Linux
  • Apache
  • NodeJs - Express

2. 圖像壓縮

未壓縮的圖像是一個巨大的潛在性能瓶頸。如果在將圖像提供給用戶之前沒有壓縮它們,那么就會傳輸不必要的字節(jié)。有幾個有用的工具可以用于快速壓縮圖像且不損失可見質(zhì)量。我主要使用Imagemin。它支持許多圖像格式,您w你以將其用作命令行界面或npm模塊。

  1. imagemin img/* --out-dir=dist/images 

你還可以 將npm 引入到項目里,使用imagemin-mozjpeg,可以將JPEG圖像壓縮到原有的60%:

  1. const imagemin = require('imagemin'); 
  2. const imageminMozjpeg = require('imagemin-mozjpeg'); 
  3.  
  4. (async() => { 
  5.   const files = await imagemin( 
  6.       ['img/*.jpg'], 
  7.       { 
  8.         destination: 'dist/img'
  9.         plugins: [ 
  10.           imageminMozjpeg({quality: 60}), 
  11.         ] 
  12.       } 
  13.   ); 
  14.   console.log(files); 
  15. })(); 

就我而言,它將文件大小從4MB減小到100kB:

 

3.圖像格式

使用現(xiàn)代圖像格式可以真正提高性能。WebP 圖像比 JPEG 和 PNG 小,通常小25%-35%。WebP 也被瀏覽器廣泛支持。

我們使用imagemin npm 包并為其添加WebP插件。以下代碼將我的圖像的WebP版本輸出到dist文件夾中。

  1. const imagemin = require('imagemin'); 
  2. const imageminWebp = require('imagemin-webp'); 
  3.  
  4. (async() => { 
  5.   const files = await imagemin( 
  6.       ['img/*.jpg'], 
  7.       { 
  8.         destination: 'dist/img'
  9.         plugins: [ 
  10.           imageminWebp({quality: 50}) 
  11.         ] 
  12.       } 
  13.   ); 
  14.   console.log(files); 
  15. })(); 

我們再次看一下文件大?。?/p>

 

結果表明,與原始圖像相比,文件大小減少了98%,與壓縮的 JPG 文件相比,WebP 對圖像的壓縮效果更加明顯,WebP版本比壓縮的JPEG版本小43%。

4.圖像延遲加載

延遲加載圖像是一種稍后而不是提前加載屏幕外圖像的技術。當解析器遇到正確加載的圖像時,會減慢初始頁面加載速度。通過延遲加載,可以加快這個過程并在以后加載圖像。使用lazysize很容易做到這一點。使用lazysize腳本和瀏覽器對loading屬性的支持,你可以這樣優(yōu)化:

  1. <img src="https://s6.51cto.com/oss/202010/20/dd7f123d7a9b62d1a239a064cce7193c.jpg" alt=""

改成:

  1. <img data-src="https://s6.51cto.com/oss/202010/20/dd7f123d7a9b62d1a239a064cce7193c.jpg" class="lazyload" alt=""

該庫會處理其余的工作,你可以使用瀏覽器驗證這一點。打開你的網(wǎng)站,找到你的圖像標簽。如果類從lazyload更改為lazyloaded,它就可以工作。

5.緩存 http 頭

緩存是一種快速提高站點速度的方法。它減少了訪問者的頁面加載時間。我們可以告訴瀏覽器在特定的時間緩存文件,如果你對后臺的知識有些了解,那么配置緩存方不是很難的事情。

我們可以使用以下 API 進行緩存:

  • Cache-Control
  • ETag
  • Last-Modified

6. 內(nèi)聯(lián)關鍵的 CSS

CSS 是阻塞渲染的,這意味著瀏覽器必須先下載并處理所有CSS文件,然后才能繪制像素。通過內(nèi)聯(lián)關鍵的 CSS,可以大大加快此過程。我們可以通過以下步驟完成此操作:

識別關鍵的 CSS

如果你不知道你的關鍵CSS是什么,你可以使用Critcal, CriticalCSS或Penthouse。所有這些庫都從給定視口可見的HTML文件中提取CSS。

criticalCSS 事例如下:

  1. var criticalcss = require("criticalcss"); 
  2.  
  3. var request = require('request'); 
  4. var path = require( 'path' ); 
  5. var criticalcss = require("criticalcss"); 
  6. var fs = require('fs'); 
  7. var tmpDir = require('os').tmpdir(); 
  8.  
  9. var cssUrl = 'https://web.dev/app.css'
  10. var cssPath = path.join( tmpDir, 'app.css' ); 
  11. request(cssUrl).pipe(fs.createWriteStream(cssPath)).on('close'function() { 
  12.   criticalcss.getRules(cssPath, function(err, output) { 
  13.     if (err) { 
  14.       throw new Error(err); 
  15.     } else { 
  16.       criticalcss.findCritical("https://web.dev/", { rules: JSON.parse(output) }, function(err, output) { 
  17.         if (err) { 
  18.           throw new Error(err); 
  19.         } else { 
  20.           console.log(output); 
  21.           // save this to a file for step 2 
  22.         } 
  23.       }); 
  24.     } 
  25.   }); 
  26. }); 

內(nèi)聯(lián)關鍵 CSS

HTML解析器遇到樣式標簽,并立即處理關鍵的CSS。

  1. <head> 
  2.   <style> 
  3.   body {...} 
  4.   /* ... rest of the critical CSS */ 
  5.   </style> 
  6. </head> 

滯后非關鍵CSS

非關鍵的CSS不需要立即進行處理。瀏覽器可以在onload事件之后加載它,因此用戶不必等待。

  1. <link rel="preload" href="/assets/styles.css" as="style" onload="this.onload=null;this.rel='stylesheet'"
  2. <noscript><link rel="stylesheet" href="/assets/styles.css"></noscript> 

7. JavaScript 異步/延遲加載/延遲加載

HTML 也是阻塞渲染,瀏覽器必須等待 JS 執(zhí)行后才能完成對HTML的解析。但是我們可以告訴瀏覽器等待JavaScript執(zhí)行。

異步加載JavaScript

使用屬性async,可以告訴瀏覽器異步加載腳本。

  1. <script src="app.js" async></script> 

 

延遲JavaScript

defer屬性告訴瀏覽器在 HTML 解析器解析完文檔之后運行腳本,但在事件發(fā)生之前,DOMContentLoaded會被觸發(fā)。

  1. <script src="app.js" defer></script> 

 

重復排序內(nèi)聯(lián)的腳本

內(nèi)聯(lián)腳本立即執(zhí)行,瀏覽器對其進行解析。因此,您可以將它們放在HTML的末尾,緊接在body標記之前。

8.使用資源提示優(yōu)化性能

HTML5的資源提示(Resource Hints)可以簡單地理解為預加載,瀏覽器根據(jù)開發(fā)者提供的后續(xù)資源的提示進行有選擇性的加載和優(yōu)化。“有選擇性”這一項是必須的且極其重要的,也是有別早先替代方案的重點,因為很多情況下,預加載會受到所分配到的計算資源以及帶寬資源的限制,瀏覽器有權放棄那些成本較高的加載項。

資源提示幫助開發(fā)人員告訴瀏覽器稍后可能加載的頁面。該規(guī)范定義了四種原語

  • preconnect
  • dns-prefetch
  • prefetch
  • prerender

此外,對于資源提示,我們使用了鏈接屬性的preload關鍵字。

preconnect

預鏈接, 使用方法如下:

  1. <link rel="preconnect" href="https://example.com"

 

我們訪問一個站點時,簡單來說,都會經(jīng)過以下的步驟:

  • DNS 解析
  • TCP 握手
  • 如果為 Https 站點,會進行TLS握手

使用preconnect后,瀏覽器會針對特定的域名,提前初始化鏈接(執(zhí)行上述三個步驟),節(jié)省了我們訪問第三方資源的耗時。需要注意的是,我們一定要確保preconnect的站點是網(wǎng)頁必需的,否則會浪費瀏覽器、網(wǎng)絡資源。

DNS Prefetch

DNS 預解析, 這個大多數(shù)人都知道,用法也很簡單:

  1. <link rel="dns-prefetch" href="http://example.com"

 

DN S解析,簡單來說就是把域名轉(zhuǎn)化為ip地址。我們在網(wǎng)頁里使用域名請求其他資源的時候,都會先被轉(zhuǎn)化為ip地址,再發(fā)起鏈接。dns-prefeth使得轉(zhuǎn)化工作提前進行了,縮短了請求資源的耗時。

什么時候使用呢?當我們頁面中使用了其他域名的資源時,比如我們的靜態(tài)資源都放在cdn上,那么我們可以對cdn的域名進行預解析。瀏覽器的支持情況也不錯。

prefetch

預拉取, 使用方法如下:

  1. <link rel="prefetch" href="index.html" as="document"
  2. <link rel="prefetch" href="main.js" as="script"
  3. <link rel="prefetch" href="main.css" as="style"
  4. <link rel="prefetch" href="font.woff" as="font"
  5. <link rel="prefetch" href="image.webp" as="image"

 

link標簽里的as參數(shù)可以有以下取值:

  1. audio: 音頻文件 
  2. video: 視頻文件   
  3. Track: 網(wǎng)絡視頻文本軌道  
  4. script: javascript文件 
  5. style: css樣式文件 
  6. font: 字體文件    
  7. image: 圖片    
  8. fetch: XHR、Fetch請求 
  9. worker: Web workers 
  10. embed: 多媒體<embed>請求  
  11. object:  多媒體<object>請求 
  12. document: 網(wǎng)頁 

audio: 音頻文件video: 視頻文件 Track: 網(wǎng)絡視頻文本軌道 script: javascript文件style: css樣式文件font: 字體文件 image: 圖片 fetch: XHR、Fetch請求worker: Web workersembed: 多媒體請求 object: 多媒體 請求document: 網(wǎng)頁

預拉取用于標識從當前網(wǎng)站跳轉(zhuǎn)到下一個網(wǎng)站可能需要的資源,以及本網(wǎng)站應該獲取的資源。這樣可以在將來瀏覽器請求資源時提供更快的響應。

如果正確使用了預拉取,那么用戶在從當前頁面前往下一個頁面時,可以很快得到響應。但是如果錯誤地使用了預拉取,那么瀏覽器就會下載額外不需要的資源,影響頁面性能,并且造成網(wǎng)絡資源浪費。

這里需要注意的是,使用了prefetch,資源僅僅被提前下載,下載后不會有任何操作,比如解析資源。

prerender

預渲染,使用方法如下:

  1. <link rel="prerender" href="//example.com/next-page.html"

 

prerender比prefetch更進一步。不僅僅會下載對應的資源,還會對資源進行解析。解析過程中,如果需要其他的資源,可能會直接下載這些資源。這樣,用戶在從當前頁面跳轉(zhuǎn)到目標頁面時,瀏覽器可以更快的響應。

preload

  1. <link rel="preload" href="..." as="..."
  2. <link rel="prefetch" href="..."

 

注意preload需要寫上正確的as屬性,才能正常工作喔(prefetch不需要)。但是它們有什么區(qū)別呢?

  • preload 是用于預加載當前頁的資源,瀏覽器會優(yōu)先加載它們
  • prefetch 是用于預加載后續(xù)導航使用的資源,瀏覽器也會加載它們,但優(yōu)先級不高

9. 固定好你的谷歌字體

Google字體很棒,它們提供優(yōu)質(zhì)的服務,并被廣泛使用。如果你不想自己托管字體,那么Google字體是一個不錯的選擇。你需要的是學習如何引用它們,哈里·羅伯茨(Harry Roberts)寫了一篇有關《The Fastest Google Fonts》的出色深度文章。強烈建議你閱讀它。

如果你快速取用,那么可以使用下面集成片段的谷歌字體:

  1. <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/> 
  2. <link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=...&display=swap"/> 
  3. <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=...&display=swap" media="print" onload="this.media='all'"/> 
  4. <noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=...&display=swap"/></noscript> 

10. 使用 service worker 緩存資源

service worker是瀏覽器在后臺運行的腳本。緩存可能是最常用的特性,也是你應該使用的特性。我認為這不是一個選擇的問題。通過使用 service worker實現(xiàn)緩存,可以使 用戶 與站點的交互更快,并且即使用戶不在線也可以訪問站點。

總結

在這篇文章中,展示了 10 種快速的網(wǎng)絡性能,你可以在5分鐘內(nèi)應用到你的網(wǎng)站,以提高你的網(wǎng)站速度。

 

 

 

作者:Marc 譯者:前端小智 來源:dev原文:https://dev.to/marcradziwill/10-web-performance-quick-wins-you-can-and-should-apply-in-under-5-minutes-1dj2

本文轉(zhuǎn)載自微信公眾號「 大遷世界」,可以通過以下二維碼關注。轉(zhuǎn)載本文請聯(lián)系 大遷世界公眾號。

 

責任編輯:武曉燕 來源: 大遷世界
相關推薦

2023-10-06 19:21:49

Initializr應用Spring

2021-03-23 15:35:36

Adam優(yōu)化語言

2009-03-23 09:07:04

2009-04-16 16:57:58

DotNetNuke優(yōu)化網(wǎng)站開發(fā)

2013-09-11 13:50:47

Web性能

2014-12-10 10:12:02

Web

2019-06-05 09:42:53

Kafka App 消息隊列

2021-05-21 06:44:43

AI人工智能GPU

2025-04-01 08:15:00

漏洞安全報告企業(yè)安全

2017-02-05 17:33:59

前端優(yōu)化Web性能

2020-04-30 21:46:46

機器學習病毒數(shù)據(jù)

2018-08-23 17:45:52

2013-08-09 14:18:33

2017-04-24 07:48:32

2017-11-06 14:33:54

Web開發(fā)服務器網(wǎng)絡

2022-11-11 08:16:02

java性能技術

2024-11-21 14:30:00

模型訓練

2014-09-19 10:46:14

Win9Win7

2017-05-19 22:46:36

多維后臺性能優(yōu)化手段

2021-08-02 08:34:20

React性能優(yōu)化
點贊
收藏

51CTO技術棧公眾號