前端效能優化、React 與 JavaScript 深入淺出

更新於 發佈於 閱讀時間約 7 分鐘

🎯 1. throttle vs debounce

這是前端開發中常見的效能優化問題,特別在處理 scrollresizeinput 事件時。
📌 throttle(節流)

當事件頻繁觸發時,throttle 讓函式在固定時間內執行一次,防止執行頻率過高。適合用於 監聽滾動、滑鼠移動、視窗調整大小 等場景。

🔹 例子:滾動時顯示「返回頂部」按鈕

javascript
複製編輯function throttle(func, delay) {
let lastTime = 0;
return function (...args) {
const now = Date.now();
if (now - lastTime >= delay) {
func.apply(this, args);
lastTime = now;
}
};
}

window.addEventListener("scroll", throttle(() => {
console.log("滾動中...");
}, 300));

📌 debounce(防抖)

當事件觸發後,等待一段時間後才執行函式,如果期間再次觸發,計時器會重置。適合用於 搜尋框輸入、表單驗證、API 查詢 等場景。

🔹 例子:搜尋框即時建議

javascript
複製編輯function debounce(func, delay) {
let timer;
return function (...args) {
clearTimeout(timer);
timer = setTimeout(() => {
func.apply(this, args);
}, delay);
};
}

document.getElementById("search").addEventListener("input", debounce((e) => {
console.log("搜尋內容:" + e.target.value);
}, 500));

🚀 應用場景

  • throttle:監聽滾動事件、監聽視窗大小變化
  • debounce:搜尋框即時建議、表單驗證、API 查詢



⚡ 2. 網頁效能優化技巧(實戰案例分享)

如何讓你的網站載入更快?這些技術幫助你提升至少 30% 的效能!

  • 圖片壓縮(WebP / AVIF)
  • Lazy Loading(延遲載入)
  • 資源優化(Tree Shaking、Code Splitting)
  • CDN 加速
  • 減少 Reflow 及 Repaint(後續詳解)


🎨 3. Reflow & Repaint

這是影響瀏覽器效能的關鍵機制:

  • Reflow(回流):當 DOM 結構、大小、位置變化時,瀏覽器重新計算佈局。
  • Repaint(重繪):當樣式(如顏色、陰影)改變時,瀏覽器更新 UI。

如何降低影響? ✅ 避免逐步改變樣式(一次性修改) ✅ 使用 transform 取代 top/left ✅ 使用 will-change 提示瀏覽器預先優化


🔥 4. Redux Toolkit 快速上手

Redux Toolkit 是官方推薦的 Redux 開發工具,提供簡化流程的 API:

  • createSlice:簡化 reducer 撰寫
  • createAsyncThunk:內建異步處理
  • 內建 DevTools & Immer:提升開發體驗

📖 官方 Redux 中文文件


⚛ 5. React Fiber:提升 React 效能的關鍵

React Fiber 讓 React 更高效,並帶來 Concurrent Mode、Suspense 等特性。

  • 可中斷渲染(提高響應速度)
  • 優先級調度(重要內容先渲染)
  • 更流暢的動畫與過渡效果


🔄 6. JavaScript 事件機制:深入理解 Event Loop

JavaScript 是單執行緒的,透過 Event Loop 處理非同步操作。

  • Call Stack:執行同步任務
  • Event Queue:存放非同步回調函

    📌 簡單示例
javascript
複製編輯console.log("A");

setTimeout(() => {
console.log("B");
}, 0);

console.log("C");

執行結果:

css
複製編輯A
C
B

🔹 原因

  1. console.log("A") 立即執行
  2. setTimeout 被放入 Web API,等待回調
  3. console.log("C") 立即執行
  4. Call Stack 清空後B 才進入 Event Queue,最後被執行

面試考點:

📌 setTimeout(fn, 0) 何時執行? 📌 Promise.then()setTimeout() 誰先執行?


🏗 7. Higher Order Component(HOC)

HOC 是 React 組件的設計模式,透過函式回傳新組件來共用邏輯。

範例:

const withAuth = (Component) => (props) => {
return isAuthenticated ? <Component {...props} /> : <Login />;
};


🎣 8. React Hooks:useState vs useReducer

📌 useState

  • 適用於 簡單狀態(如表單輸入、UI 狀態)
  • 例子:
javascript
複製編輯const [count, setCount] = useState(0);
setCount(count + 1);

📌 useReducer

  • 適用於 複雜邏輯(如 Redux)
  • 例子:
javascript
複製編輯const reducer = (state, action) => {
switch (action.type) {
case "increment":
return { count: state.count + 1 };
default:
return state;
}
};

const [state, dispatch] = useReducer(reducer, { count: 0 });
dispatch({ type: "increment" });

面試考點:

📌 何時該用 useReducer? 📌 useReducer 與 Redux 的區別?


留言分享你的解答,或看看其他開發者的面試經驗吧! 🎤


自學程式,現為網頁開發工程師,同時擔任線上課程講師,專注於幫助自學程式的開發者找到理想工作。熱愛技術與分享,致力於將複雜的概念轉化為實用知識,讓更多人踏入軟體開發的世界。
留言
avatar-img
留言分享你的想法!
本篇參與的主題活動
大家好!今天要和大家分享 PTCG Pocket 級別對戰的完整攻略。不論你是剛開始玩的新手,還是想衝排名的老手,這篇攻略都能幫你更了解遊戲機制! 目錄: 開放時間與參加條件 段位制度詳解 積分機制說明 賽季獎勵制度 實用打牌技巧 新手常見問題 ————————— 📅 一、開
「送禮」是電商業界的月經文,是不是就要拿出來討論,但總會有一種聲音:「送貨地址填朋友家就可以了吧?」所以電商做送禮業務一直讓人覺得有點多此一舉。 令人意外的是,在電商環境時移勢易的今天,送禮卻成了淘寶解決當前電商難題的一劑良藥。
全新 vocus 挑戰活動「方格人氣王」來啦~四大挑戰任你選,留言 / 愛心 / 瀏覽數大 PK,還有新手專屬挑戰!無論你是 vocus 上活躍創作者或剛加入的新手,都有機會被更多人看見,獲得站上版位曝光&豐富獎勵!🏆
流浪者,不是在流浪就是在準備流浪的路上。 平常肉身被困在辦公室的時候,只能用Google map靈魂旅行,於是知道許許多多的冷門國家,總是好奇在世界另一個角落的人是怎麼生活的。 某次看到一則新聞:一天之內跨年兩次。狂男在雪梨跨年完後直接飛到庫克群島再跨年一次,才知道世界上有一個這樣的國家(狂
有位學生曾問我:該怎麼創作內容? ​ 這問題,讓我想起 村上春樹 的「寫作秘密」 ;村上春樹,早期開始寫小說,一直有個困擾,他腦中畫面太多,情緒也太滿,結果一寫下去——卻是密密麻麻的形容詞、冗長的對白、複雜的句子...
大家好!今天要和大家分享 PTCG Pocket 級別對戰的完整攻略。不論你是剛開始玩的新手,還是想衝排名的老手,這篇攻略都能幫你更了解遊戲機制! 目錄: 開放時間與參加條件 段位制度詳解 積分機制說明 賽季獎勵制度 實用打牌技巧 新手常見問題 ————————— 📅 一、開
「送禮」是電商業界的月經文,是不是就要拿出來討論,但總會有一種聲音:「送貨地址填朋友家就可以了吧?」所以電商做送禮業務一直讓人覺得有點多此一舉。 令人意外的是,在電商環境時移勢易的今天,送禮卻成了淘寶解決當前電商難題的一劑良藥。
全新 vocus 挑戰活動「方格人氣王」來啦~四大挑戰任你選,留言 / 愛心 / 瀏覽數大 PK,還有新手專屬挑戰!無論你是 vocus 上活躍創作者或剛加入的新手,都有機會被更多人看見,獲得站上版位曝光&豐富獎勵!🏆
流浪者,不是在流浪就是在準備流浪的路上。 平常肉身被困在辦公室的時候,只能用Google map靈魂旅行,於是知道許許多多的冷門國家,總是好奇在世界另一個角落的人是怎麼生活的。 某次看到一則新聞:一天之內跨年兩次。狂男在雪梨跨年完後直接飛到庫克群島再跨年一次,才知道世界上有一個這樣的國家(狂
有位學生曾問我:該怎麼創作內容? ​ 這問題,讓我想起 村上春樹 的「寫作秘密」 ;村上春樹,早期開始寫小說,一直有個困擾,他腦中畫面太多,情緒也太滿,結果一寫下去——卻是密密麻麻的形容詞、冗長的對白、複雜的句子...
你可能也想看
Google News 追蹤
Thumbnail
靈感用盡、鍵盤不再響,盯著喜歡、分享、留言的數字,心跳跟著小鈴鐺七上八下⋯⋯vocus 2025 年 4 月限定新商品,要為創作者打氣! 🚨「創作者打氣包」 最懂創作者的vocus,為創作者打造 ✨ 打氣包,包什麼?!四件道具挺創作者 一、【打氣復活卷】 專屬你的打氣小語,成功登記免費
Thumbnail
全新 vocus 挑戰活動「方格人氣王」來啦~四大挑戰任你選,留言 / 愛心 / 瀏覽數大 PK,還有新手專屬挑戰!無論你是 vocus 上活躍創作者或剛加入的新手,都有機會被更多人看見,獲得站上版位曝光&豐富獎勵!🏆
Thumbnail
這篇文章介紹了網站的整體架構以及開發時所使用的工具和套件,包括 Next.js、Tailwind CSS 和 socket.io 等。文章回顧了程式碼的重構與優化,幫助開發者提高工作效率,適合希望深入瞭解前端開發和網站架構的讀者。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
在程式任何地方都能修改各種react組件狀態的做法分享
Thumbnail
可能包含敏感內容
先說一下我的背景,非本科系從 2022/3 開始接觸到前端領域,在摸索過程中遇到六角學院,買了 HTML 和 CSS 課程從基礎學起。
Thumbnail
CSS 的繼承性是開發網頁樣式時的一個重要概念,它使得樣式設計更加靈活和高效,有助於提高程式碼的可讀性、一致性和可重用性,並加快開發速度,從而提供更好的開發體驗。
Thumbnail
JavaScript 套件,頁碼 Pagination.js 搭配 axios API 請求範例
Thumbnail
前言 現在的前端需求已經越來越高,要考慮HTML及CSS的切版美觀程度,以及React以及Flutter所提出的元件(Componet、widget)觀念,也就是將元件模組化,使元件可以更動態的被程式運行,而不用靜態的客製化每一個介面。開發一個好的元件可以提升整體的開發速度,讓任何使用元件的開發者
Thumbnail
前端開發者常會遇到需要網頁素材的情況,雖然在公司中都可能有可以配合的平面設計師或是UIUX設計師,但在這個多工高效的時代不免也需要前端開發者也可以處理簡單的設計,也可提升設計審美或與設計師溝通的能力。 然而前端開發者也算是擁有設計師的天賦,透過程式碼來完成平面設計,將網頁的每個介面都視為平面設計,
Thumbnail
這是一個介紹React Text Wrap Balancer套件的文章,主要內容包括套件的使用方式,常見的實作方式和一些注意事項。文章內容較長,內容大概是在介紹套件的使用方法、使用技巧和注意事項。
Thumbnail
React Props - React 白話文運動。這一篇則會針對 React 語法進一步做講解, 前幾篇也學會了如何建立一個 React 元件,並且學會了元件之間有父子元件的關係。這篇會介紹 React Props 的概念,包含了:React 元件宣告、React Props。
Thumbnail
靈感用盡、鍵盤不再響,盯著喜歡、分享、留言的數字,心跳跟著小鈴鐺七上八下⋯⋯vocus 2025 年 4 月限定新商品,要為創作者打氣! 🚨「創作者打氣包」 最懂創作者的vocus,為創作者打造 ✨ 打氣包,包什麼?!四件道具挺創作者 一、【打氣復活卷】 專屬你的打氣小語,成功登記免費
Thumbnail
全新 vocus 挑戰活動「方格人氣王」來啦~四大挑戰任你選,留言 / 愛心 / 瀏覽數大 PK,還有新手專屬挑戰!無論你是 vocus 上活躍創作者或剛加入的新手,都有機會被更多人看見,獲得站上版位曝光&豐富獎勵!🏆
Thumbnail
這篇文章介紹了網站的整體架構以及開發時所使用的工具和套件,包括 Next.js、Tailwind CSS 和 socket.io 等。文章回顧了程式碼的重構與優化,幫助開發者提高工作效率,適合希望深入瞭解前端開發和網站架構的讀者。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
在程式任何地方都能修改各種react組件狀態的做法分享
Thumbnail
可能包含敏感內容
先說一下我的背景,非本科系從 2022/3 開始接觸到前端領域,在摸索過程中遇到六角學院,買了 HTML 和 CSS 課程從基礎學起。
Thumbnail
CSS 的繼承性是開發網頁樣式時的一個重要概念,它使得樣式設計更加靈活和高效,有助於提高程式碼的可讀性、一致性和可重用性,並加快開發速度,從而提供更好的開發體驗。
Thumbnail
JavaScript 套件,頁碼 Pagination.js 搭配 axios API 請求範例
Thumbnail
前言 現在的前端需求已經越來越高,要考慮HTML及CSS的切版美觀程度,以及React以及Flutter所提出的元件(Componet、widget)觀念,也就是將元件模組化,使元件可以更動態的被程式運行,而不用靜態的客製化每一個介面。開發一個好的元件可以提升整體的開發速度,讓任何使用元件的開發者
Thumbnail
前端開發者常會遇到需要網頁素材的情況,雖然在公司中都可能有可以配合的平面設計師或是UIUX設計師,但在這個多工高效的時代不免也需要前端開發者也可以處理簡單的設計,也可提升設計審美或與設計師溝通的能力。 然而前端開發者也算是擁有設計師的天賦,透過程式碼來完成平面設計,將網頁的每個介面都視為平面設計,
Thumbnail
這是一個介紹React Text Wrap Balancer套件的文章,主要內容包括套件的使用方式,常見的實作方式和一些注意事項。文章內容較長,內容大概是在介紹套件的使用方法、使用技巧和注意事項。
Thumbnail
React Props - React 白話文運動。這一篇則會針對 React 語法進一步做講解, 前幾篇也學會了如何建立一個 React 元件,並且學會了元件之間有父子元件的關係。這篇會介紹 React Props 的概念,包含了:React 元件宣告、React Props。