目錄
1. 檔案壓縮
CSS 是
如果你不知道你的關鍵CSS是什麼,你可以使用Critcal, CriticalCSS或Penthouse。所有這些庫都從給定視口可見的HTML檔案中提取CSS。
HTML解析器遇到樣式標籤,並立即處理關鍵的CSS。
非關鍵的CSS不需要立即進行處理。瀏覽器可以在onload事件之後載入它,因此用戶不必等待。
7. JavaScript 异步/延迟加载/延迟加载
异步加载JavaScript
延迟JavaScript
重复排序内联的脚本
8.使用资源提示优化性能
preconnect
DNS Prefetch
prefetch
prerender
preload
9. 固定好你的谷歌字体
10. 使用 service worker  缓存资源
总结
首頁 web前端 前端問答 10 種快速優化 Web 效能的手段(分享)

10 種快速優化 Web 效能的手段(分享)

Oct 26, 2020 pm 05:47 PM
html javascript 前端

10 種快速優化 Web 效能的手段(分享)

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

1. 檔案壓縮

檔案壓縮,可以減少網路傳輸的位元組數。有幾種壓縮演算法。 Gzip是最受歡迎的,但是對於Brotli,你可以使用一種更新的、甚至更好的壓縮演算法。如果想要檢查您的伺服器是否支援Brotli,可以使用 Brotli.pro。

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

#2. 映像壓縮

未壓縮的映像是一個巨大的潛在效能瓶頸。如果在將圖像提供給使用者之前沒有壓縮它們,那麼就會傳輸不必要的位元組。有幾個有用的工具可以用於快速壓縮影像且不損失可見品質。我主要使用Imagemin。它支援許多圖像格式,您w你以將其用作命令行介面或npm模組。

imagemin img/* --out-dir=dist/images
登入後複製
你也可以將npm 引入到專案裡,使用

imagemin-mozjpeg,可以將JPEG影像壓縮到原有的60%

const imagemin = require('imagemin');
const imageminMozjpeg = require('imagemin-mozjpeg');

(async() => {
  const files = await imagemin(
      ['img/*.jpg'],
      {
        destination: 'dist/img',
        plugins: [
          imageminMozjpeg({quality: 60}),
        ]
      }
  );
  console.log(files);
})();
登入後複製
就我而言,它將檔案大小從

4MB減少到100kB:

10 種快速優化 Web 效能的手段(分享)

3.映像格式

使用現代影像格式可以真正提高效能。 WebP 影像比 JPEG 和 PNG 小,通常小

25%-35%WebP 也被瀏覽器廣泛支援。

我們使用imagemin npm 套件並為其添加WebP插件。以下程式碼將我的圖像的WebP版本輸出到

dist資料夾中。

const imagemin = require('imagemin');
const imageminWebp = require('imagemin-webp');

(async() => {
  const files = await imagemin(
      ['img/*.jpg'],
      {
        destination: 'dist/img',
        plugins: [
          imageminWebp({quality: 50})
        ]
      }
  );
  console.log(files);
})();
登入後複製
我們再次看一下檔案大小:

10 種快速優化 Web 效能的手段(分享)

#結果表明,與原始圖像相比,檔案大小減少了

98% ,與壓縮的JPG 檔案相比,WebP 對影像的壓縮效果更加明顯,WebP版本比壓縮的JPEG版本小43%

4.映像延遲載入

延遲載入映像是一種稍後而不是提前載入螢幕外映像的技術。當解析器遇到正確載入的圖像時,會減慢初始頁面載入速度。透過延遲加載,可以加快這個過程並在以後加載圖像。使用lazysize很容易做到這一點。使用

lazysize腳本和瀏覽器對loading屬性的支持,你可以這樣優化:

<img  src="/static/imghw/default1.png" data-src="image.jpg" class="lazy" alt="10 種快速優化 Web 效能的手段(分享)" >
登入後複製
改成:

<img  class="lazyload lazy" src="/static/imghw/default1.png" data-src="image.jpg" alt="10 種快速優化 Web 效能的手段(分享)" >
登入後複製
該函式庫會處理其餘的工作,你可以使用瀏覽器驗證這一點。打開你的網站,找到你的圖像標籤。如果類別從

lazyload更改為lazyloaded,它就可以運作。

5.快取 http 頭

快取是一種快速提高網站速度的方法。它減少了訪客的頁面載入時間。我們可以告訴瀏覽器在特定的時間快取文件,如果你對後台的知識有些了解,那麼配置快取方不是很難的事情。

我們可以使用以下API 進行快取:

  • Cache-Control
  • ##ETag
  • Last-Modified
  • 6. 內嵌關鍵的CSS

CSS 是

阻塞渲染

的,這表示瀏覽器必須先下載並處理所有CSS文件,然後才能繪製像素。透過內聯關鍵的 CSS,可以大大加快這個過程。我們可以透過以下步驟完成此動作:識別關鍵的 CSS

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

criticalCSS 事例如下:

var criticalcss = require("criticalcss");

var request = require('request');
var path = require( 'path' );
var criticalcss = require("criticalcss");
var fs = require('fs');
var tmpDir = require('os').tmpdir();

var cssUrl = 'https://web.dev/app.css';
var cssPath = path.join( tmpDir, 'app.css' );
request(cssUrl).pipe(fs.createWriteStream(cssPath)).on('close', function() {
  criticalcss.getRules(cssPath, function(err, output) {
    if (err) {
      throw new Error(err);
    } else {
      criticalcss.findCritical("https://web.dev/", { rules: JSON.parse(output) }, function(err, output) {
        if (err) {
          throw new Error(err);
        } else {
          console.log(output);
          // save this to a file for step 2
        }
      });
    }
  });
});
登入後複製

內聯關鍵 CSS

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

  <style>
  body {...}
  /* ... rest of the critical CSS */
  </style>
登入後複製

滯後非關鍵CSS

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

<link>
<noscript><link></noscript>
登入後複製

7. JavaScript 异步/延迟加载/延迟加载

HTML 也是阻塞渲染,浏览器必须等待 JS 执行后才能完成对HTML的解析。但是我们可以告诉浏览器等待JavaScript执行。

异步加载JavaScript

使用属性async,可以告诉浏览器异步加载脚本。

<script></script>
登入後複製
登入後複製

延迟JavaScript

defer属性告诉浏览器在 HTML 解析器解析完文档之后运行脚本,但在事件发生之前,DOMContentLoaded会被触发。

<script></script>
登入後複製
登入後複製

重复排序内联的脚本

内联脚本立即执行,浏览器对其进行解析。 因此,您可以将它们放在HTML的末尾,紧接在body标记之前。

8.使用资源提示优化性能

HTML5的资源提示(Resource Hints)可以简单地理解为预加载,浏览器根据开发者提供的后续资源的提示进行有选择性的加载和优化。“有选择性”这一项是必须的且极其重要的,也是有别早先替代方案的重点,因为很多情况下,预加载会受到所分配到的计算资源以及带宽资源的限制,浏览器有权放弃那些成本较高的加载项。

资源提示帮助开发人员告诉浏览器稍后可能加载的页面。该规范定义了四种原语

  • preconnect
  • dns-prefetch
  • prefetch
  • prerender

此外,对于资源提示,我们使用了链接属性的preload关键字。

preconnect

预链接, 使用方法如下:

 <link>
登入後複製
登入後複製

我们访问一个站点时,简单来说,都会经过以下的步骤:

  1. DNS 解析
  2. TCP 握手
  3. 如果为 Https 站点,会进行TLS握手

使用preconnect后,浏览器会针对特定的域名,提前初始化链接(执行上述三个步骤),节省了我们访问第三方资源的耗时。需要注意的是,我们一定要确保preconnect的站点是网页必需的,否则会浪费浏览器、网络资源。

DNS Prefetch

DNS 预解析, 这个大多数人都知道,用法也很简单:

 <link>
登入後複製
登入後複製

DN S解析,简单来说就是把域名转化为ip地址。我们在网页里使用域名请求其他资源的时候,都会先被转化为ip地址,再发起链接。dns-prefeth使得转化工作提前进行了,缩短了请求资源的耗时。

什么时候使用呢?当我们页面中使用了其他域名的资源时,比如我们的静态资源都放在cdn上,那么我们可以对cdn的域名进行预解析。浏览器的支持情况也不错。

prefetch

预拉取, 使用方法如下:

<link>
<link>
<link>
<link>
<link>
登入後複製

link标签里的as参数可以有以下取值:

audio: 音频文件
video: 视频文件  
Track: 网络视频文本轨道 
script: javascript文件
style: css样式文件
font: 字体文件   
image: 图片   
fetch: XHR、Fetch请求
worker: Web workers
embed: 多媒体<embed>请求 
object:  多媒体<object>请求
document: 网页</object></embed>
登入後複製

预拉取用于标识从当前网站跳转到下一个网站可能需要的资源,以及本网站应该获取的资源。这样可以在将来浏览器请求资源时提供更快的响应。

如果正确使用了预拉取,那么用户在从当前页面前往下一个页面时,可以很快得到响应。但是如果错误地使用了预拉取,那么浏览器就会下载额外不需要的资源,影响页面性能,并且造成网络资源浪费。

这里需要注意的是,使用了prefetch,资源仅仅被提前下载,下载后不会有任何操作,比如解析资源。

prerender

预渲染,使用方法如下:

<link>
登入後複製

prerender比prefetch更进一步。不仅仅会下载对应的资源,还会对资源进行解析。解析过程中,如果需要其他的资源,可能会直接下载这些资源。这样,用户在从当前页面跳转到目标页面时,浏览器可以更快的响应。

preload

<link>
<link>
登入後複製

注意preload需要写上正确的as属性,才能正常工作喔(prefetch不需要)。但是它们有什么区别呢?

  • preload 是用于预加载当前页的资源,浏览器会优先加载它们
  • prefetch 是用于预加载后续导航使用的资源,浏览器也会加载它们,但优先级不高

9. 固定好你的谷歌字体

Google字体很棒,它们提供优质的服务,并被广泛使用。 如果你不想自己托管字体,那么Google字体是一个不错的选择。 你需要的是学习如何引用它们,哈里·罗伯茨(Harry Roberts)写了一篇有关《The Fastest Google Fonts》的出色深度文章。 强烈建议你阅读它。

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

<link>
<link>
<link>
<noscript><link></noscript>
登入後複製

10. 使用 service worker  缓存资源

service worker是浏览器在后台运行的脚本。缓存可能是最常用的特性,也是你应该使用的特性。我认为这不是一个选择的问题。通过使用 service worker实现缓存,可以使 用户 与站点的交互更快,并且即使用户不在线也可以访问站点。

总结

在这篇文章中,展示了 10 种快速的网络性能,你可以在5分钟内应用到你的网站,以提高你的网站速度。

感谢大家的观看与支持,我们下期再见,不要忘了三连哦。

原文:https://dev.to/marcradziwill/10-web-performance-quick-wins-you-can-and-should-apply-in-under-5-minutes-1dj2

作者:Marc

更多编程相关知识,请访问:编程入门!!

以上是10 種快速優化 Web 效能的手段(分享)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

HTML 中的表格邊框 HTML 中的表格邊框 Sep 04, 2024 pm 04:49 PM

HTML 表格邊框指南。在這裡,我們以 HTML 中的表格邊框為例,討論定義表格邊框的多種方法。

HTML 中的巢狀表 HTML 中的巢狀表 Sep 04, 2024 pm 04:49 PM

這是 HTML 中巢狀表的指南。這裡我們討論如何在表中建立表格以及對應的範例。

HTML 左邊距 HTML 左邊距 Sep 04, 2024 pm 04:48 PM

HTML 左邊距指南。在這裡,我們討論 HTML margin-left 的簡要概述及其範例及其程式碼實作。

HTML 表格佈局 HTML 表格佈局 Sep 04, 2024 pm 04:54 PM

HTML 表格佈局指南。在這裡,我們詳細討論 HTML 表格佈局的值以及範例和輸出。

HTML 輸入佔位符 HTML 輸入佔位符 Sep 04, 2024 pm 04:54 PM

HTML 輸入佔位符指南。在這裡,我們討論 HTML 輸入佔位符的範例以及程式碼和輸出。

HTML 有序列表 HTML 有序列表 Sep 04, 2024 pm 04:43 PM

HTML 有序列表指南。在這裡我們也分別討論了 HTML 有序列表和類型的介紹以及它們的範例

在 HTML 中移動文字 在 HTML 中移動文字 Sep 04, 2024 pm 04:45 PM

HTML 中的文字移動指南。在這裡我們討論一下marquee標籤如何使用語法和實作範例。

HTML onclick 按鈕 HTML onclick 按鈕 Sep 04, 2024 pm 04:49 PM

HTML onclick 按鈕指南。這裡我們分別討論它們的介紹、工作原理、範例以及各個事件中的onclick事件。

See all articles