慢半拍來初嚐 Svelte

alexianalexian
2022-05-04
Svelte

Svelte 都出來兩年多的框架現在才來玩,有夠慢半拍

Svelte 是什麼?

Svelte 官網:https://svelte.dev/

現在說起前端框架,基本離不開 Angular,React,Vue 三巨頭,而它們也不固步自封,仍不斷穩步發展。但在前端框架如雨後春筍的時代,不乏新的框架推出,其中儼然是超新星的 Svelte 自 2019 出現後,其後連續兩年排名第四的使用率和第一的滿意度,都可看出 Svelte 對前端開發者的影響力愈來愈大;MDN 的前端框架引導文件更加入了 Svelte 的教學。作為前端開發者,也該嘗試一下 Svelte 的魅力何在。

過程

基本上一開始先把 官方文件的教學 流程走了一遍,不得不說教學流程做得很好,包含即時編譯、輸出,幾乎是線上課程平台的等級,走完整個教學差不多需要一個下午(英文能力好的應該會更快)。

起初的開發體驗感覺和 Vue 非常接近,透過 two-way binding 快速實現 UI 的互動功能,並以 component 為單位進行開發。熟悉的 onMount、onUpdate 生命週期,監聽變數行為的 statements reactively;而眾多的語法糖讓開發者要寫的程式碼異常的少。

看完教學做一個基礎的 todo list,不算樣式只要 33 行完成,也沒有一堆的 this 的使用,非常好閱讀。

特色

1. 在 Compiler 的角度處理 DOM 事件

我們都知道(應該吧?)React 和 Vue 都是使用 Virtual DOM 進行判斷渲染,配合各家的 diff 演算法,可減少重新渲染原生 DOM 造成的浪費。這種方式本是美事一樁,但由於 diffing 實際上也需要耗費相當的資源,當 Virtual DOM 內容短時間有大量變動時,在效能較後落的裝置會有效能不足的情況,導致畫面卡頓的情況發生。 結果像 React 又多了 useMemo, useCallback 之類的解法;另外,框架 virtual dom runtime 的 bundle size 也是問題,以 react 為例,react-dom 的bundle 壓縮後,仍要大概 41.8 kB,對網頁的載入速度還是有一定的影響。

react-dom bundle size

為此 svelte 還有一篇文章嗆 Virtual Dom 解釋 Virtual Dom 並非絕對快, 而 Svelte 解決以上問題的方式,就是放棄使用 Virtual DOM 而直接操作 DOM,並且把要用的東西都在 compile 階段處理完,不再額外附帶一個框架的 runtime bundle,結果是讓 production 打包得有夠小。以上面的 todo list app 為例,bundle 後的大小只要 6kB。

2. 豐富的動畫處理 API

有在 React 上開開動態特效經驗的人,都知道在 React 做動態有多麻煩,先是套件選擇就夠多了,react-spring 、react-transition-group、react-motion... ,相對的 svelte 自帶了各種的動畫 API,其中我最為讚賞的是 crossfade 和 filp,可以寫很短的程式碼達到以下兩元件間的過渡效果(範例),非常適合開發看板類的 UI: https://svelte.dev/examples/animate

總結

說了這麼多,那學 Svelte 會對未來的職涯有幫助嗎?如果你的目標是要找到前端的工作,那我會建議還是找職缺開比較多的框架(React/Vue)去學吧,雖然 Svelte 在週下載量已經達 30 萬,但與三巨頭 React/Vue/Angular 相比,仍然是有一段距離。 然而在新手的學習曲線以及開發者體驗的角度來看,Svelte 可以說是最適合初學者的框架(或編譯器?),我在往後開發中小型專案時,應該會嘗試使用 Svelte,十分推薦大家試試,說不定你一試就喜歡上。

參考

  • Svelte 官網
  • MDN Svelte 教學
  • Bundlephobia react-dom@18.1.0 bundle size

上一篇

Raycast — Mac 提升工作效率的啟動工具

下一篇

相等比較 - 那些前端開發應該要知道的小事(四)


Alex Ian
Alex Ian

ReactJS, VueJS 畫畫/寫作/前端開發

Alex Ian
Alex Ian

ReactJS, VueJS 畫畫/寫作/前端開發


共29篇文章
文章分類
  • 前端開發14
  • JavaScript7
  • 那些前端開發應該要知道的小事5
  • Gatsby.js3
  • ChromeExtension2
  • NetlifyCMS2
  • 生產力工具2
  • 關於我1
  • 非Coding1
  • Svelte1
  • raycast1
  • toolRecommend1
  • productivity1
  • MutationObserver1
  • observer pattern1
  • 開發效率1
  • will-change1
  • GitHubCopilot1
  • 生產力1
  • ChatGPT1
  • AI1
  • Copilot1
  • WebAssembly1
  • SEO1
  • GoogleSearchConsole1
  • react1
  • applescript1
  • 閱讀1
  • css1
  • grid1
  • micro-frontend1

Build with GatsbyJS and React 18.2.0. Hosted on Netlify.

The original code is open source and available at calpa/gatsby-starter-calpa-blog

Copyright ©AlexIan's blog 2025.

  1. 從頭開始上架 Chrome extension

    上回提到我們在本地端建好一個開發版本的 Chrome …
  2. Gatsby 部落格更新記錄 1.0

    首先把 Blog 連結貼在最前面:https://alex-ian.me/ 許多工程師 …
  3. Debounce & Throttle - 那些前端開發應該要知道的小事(一)

    前言 也許一開始接觸前端開發的新手們,都有使 …
  4. 使用 GitHub Copilot 一個月心得

    後悔自己為何沒有早點課金 在 Modern Web Conference 2023 觀後感 …
  5. 什麼是 Headless CMS?以探索 Netlify CMS 為例

    小弟的部落格使用 Gatsby.js 框架來架設,作為一個靜 …
  6. Modern Web Conference 2023 觀後感

    https://modernweb.tw/ 前言 Modern Web Conference (MWC) 作為每年度經典的網頁開 …
  7. 什麼是語法糖(Syntactic sugar)? - 2024 你要知道的 JS 語法糖 🍭

    語法糖能吃嗎? 在算數學時,不知道你什麼時候開 …
  8. 閉包 - 那些前端開發應該要知道的小事(三)

    前言 開始這個系列的原因,是因為雖然在程式中 …
  9. Raycast — Mac 提升工作效率的啟動工具

    Mac 的使用者,應該對 Spotlight 這個系統預設的啟動工具 …
  10. 使用 Notion 管理我的年度目標 暨 2023 回顧 & 2024 展望

    都進入 2024 才來展望 想要成為流量的奴隸,自然要 …
  11. 慢半拍來初嚐 Svelte

    Svelte 都出來兩年多的框架現在才來玩,有夠慢半拍 …
  12. 從頭開始學習開發 Chrome extension (v3 版本)

    Chrome extension 經歷過 v1, v2 後,來到了 v3,雖然曾小量接觸 v2 …
  13. 留言簿

    歡迎留言
  14. addEventListener的第三個參數 - 那些前端開發應該要知道的小事(二)

    前言 開始這個系列的原因,是因為雖然在程式中 …
  15. 在中大型企業下微前端的實現與挑戰

    我們先聊工程面,人的部分先不要 小弟任職前端 …
  16. will-change — 那些前端開發應該要知道的小事(七)

    你要做動畫你要先說啊 前端開發少不免會需要 …
  17. 關於我

    關於我 我是Alex Ian,是個小小的前端工程師,出來工 …
  18. 開發效率提升 - 操作鍵盤 & 快捷鍵篇

    我國中的電腦課,會教導學生倉頡和速成輸入法 …
  19. macbook-pro(retina) late2012 換電池記錄

    這篇文章其實與Coding無關,主要是記錄mbp換電池的 …
  20. polyfill是什麼?

    人在江湖,身不由己,在接案的過程中,總有一些你 …
所有結果