跳至主要內容
Mark Ku's Blog

前言

用了兩年多 Next.JS 框架,本身針對JS建構或圖像本身就做了最佳化,就順手整理了一下,我們做過了那些優化。

1.圖片最佳化

  • Next.JS 本身就做了很多的圖片優化,如: 懶加載、透過 Image loader 最佳化圖片(縮圖、格式轉換、品質壓縮)、並依據使用者的解析度給予不同的圖片尺寸,正確的使用 next/image 元件載入圖片,就可以輕易達到圖片的最佳化。
  • 把圖片放在 CDN,並將Next js loader 移到第三方圖片的Loader

2.減少 JS 大小,讓其 bundle size 更小

  • Next.JS 本身就會做程式碼拆包(Code spliting),在共用_app.tsx元件或 layout 用到的JS 都會被包到主要的 JS 裡,將其拆到子頁面去,這樣就不會包在主要 JS 裡。
  • 頁面只顯示頁面需要的元件,頁面用不到的元件,採用動態載入元件 ( Dynamic import ),這樣元件就不會打包到主要 JS 裡。
import dynamic from 'next/dynamic';
const CartView = dynamic(() => import('./cartView'));
  • 伺服器渲染時只拿回需要的資料,不需要的資料就不要吐到用戶端。
  • 透過 next/bundle-analyzer 分析工具得知道,那些套件過大,並找到替代的替換 如: Moment.js to Days.js 。
  • 改變套件的引入方式,也會影響JS的打包的大小。 如:lodash
import  throttle from 'lodash/throttle'; // good
import { throttle } from 'lodash'; // bad

  • 畫面不需要載入的JS 或 CSS,按需求載入,避免首次渲染阻塞。如: 購物車的側邊欄。

3. 減少 CSS 大小 。

  • 不是每頁需要的共用 CSS,拆到各別頁面或元件去,並移除沒用到的 CSS 。
  • 替換肥大的css 框架,如:Bootstrap 。

4. 透過 Jenkins 將把一些靜態檔案搬到 CDN ,CDN 可減少對主伺服器的IO負載,並在CDN 開啟 Clinet side cache。

5. 減少在頁面渲染時網站偏移或抖動,這會被Google 扣分。

6. 字體套用swap ,字體在在沒載入前,會先顯示預設字體。

7. 盤點及移除用不到的第三方JS,可以在網頁互動載入的JS,就延後載入,可避免在第一次渲染時載入過多的JS,而造主線程阻塞。

  <Script
   src="https://applepay.cdn-apple.com/jsapi/v1/apple-pay-sdk.js"
   strategy="afterInteractive"
  ></Script>

(其實改成捲動後載入JS,效能應該會更好,但得視需求而調整)

8. 調整網站傳輸傳輸及編碼協定 (boti)、並開啟 Http/2 及 Http/3 通訊協定效率,網站在傳輸可以更快及壓縮效率更高。

9. 減少 Request 及 API Request 縮減回傳到用戶端的資料內容,把後端不常變動的資料,又常查詢的資料 Cache 起來。

10. 伺服器渲染,會需要很多的效能,可以針對頁面渲染部份,能採用 SSG 或 ISR 就用 SSG 或 ISR,不需要預渲染的頁面的,可以走用戶端 CSR 渲染,並減少在渲染時,資料改向Redis 要,讀取Redis 決對會比 API 來的快。

11. 使用LTM 及多幾台機器及應用程式分散負載。

12. 網站昇級App routing ,並使用 server side component ,可以讓不需要和使用者互動的元件,在打包時 JS 更小。

13. 定期將 Next.JS 框架昇級,每次的官方都宣稱昇級都有對效能的改善,每次昇級雖然有一些小痛,但如果長時間不昇級,就會變得很難昇級。

作者

Mark Ku

10 年以上的軟體工程師,做過北美電商與 AI SaaS 訂閱收費系統。現在經營貳陸資訊有限公司(www.226network.com),幫小公司做系統、網站、LINE BOT 與 AI 自動化,也在這裡分享開發筆記與開源工具。閱讀更多

覺得這篇有幫助?

作者做的免費工具、每日 Podcast 與電子報,都在這裡。

Mark Ku · 本文採用 CC BY 4.0 授權,轉載請註明作者並附上原文連結。

留言

訂閱電子報

訂閱後即時收到新文章通知,不錯過任何技術分享。

提交即表示同意接收電子報,隨時可。

熱門文章

View all
Mark Ku
··636

Oracle Cloud 永久免費方案 Linux 主機及固定 IP :0 元打造雲端解決方案

Oracle Cloud 永久免費方案 Linux 主機及固定 IP :0 元打造雲端解決方案
Mark Ku
··487

告別 Postman 收費陷阱!開源 Git 原生 API 測試神器 Bruno 實戰指南

告別 Postman 收費陷阱!開源 Git 原生 API 測試神器 Bruno 實戰指南
Mark Ku
··307

一款免費開源類似於 Notion 類知識庫系統 — Outline Wiki 佈署與備份全攻略

一款免費開源類似於 Notion 類知識庫系統 — Outline Wiki 佈署與備份全攻略
Mark Ku
··230

在 Ubuntu 上設置 Samba 來共享資料夾,讓 Windows 11 用戶可以存取

在 Ubuntu 上設置 Samba 來共享資料夾,讓 Windows 11 用戶可以存取
Mark Ku
··229

打造高效 API 管理平台:從 0 開始部署 Kong Gateway - Part 1

打造高效 API 管理平台:從 0 開始部署 Kong Gateway - Part 1
Mark Ku
··224

訓練自己的 AI 語音:硬體門檻、開源模型比較與 LoRA 微調

訓練自己的 AI 語音:硬體門檻、開源模型比較與 LoRA 微調

讀者也在看

Custom NextJS image loader with cloudflare

Mark Ku

·2 min read

使用 Next js 打造自己的 Low code CMS

Mark Ku

·4 min read·9

NEXTJS 13 昇級筆記

Mark Ku

·2 min read·9