Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
選擇 Svelte 的三個理由 - JSDC
Search
Kalan
October 30, 2021
Technology
470
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
選擇 Svelte 的三個理由 - JSDC
Kalan
October 30, 2021
More Decks by Kalan
See All by Kalan
單頁式應用中的無障礙設計
kjj6198
0
870
Svelte - 如何在前端框架中脫穎而出 | ModernWeb'21
kjj6198
0
270
状態管理を楽にする道
kjj6198
1
490
Day25. 如何解析 HTML 語法
kjj6198
0
230
Day24. Svelte 如何編譯程式碼(2)
kjj6198
0
260
Svelte 如何編譯程式碼(1)
kjj6198
0
300
Day22. Svelte 經驗談
kjj6198
0
270
Day18. UI 實戰篇 - 圖片檢視器
kjj6198
0
250
Day17. UI 實戰篇 - 音樂播放器
kjj6198
0
160
Other Decks in Technology
See All in Technology
AX時代の自治体支援リソース再配分と役割分担の再構成:戦略とロードマップ(概要)
sishi2026
0
190
eBPF 簡介 2026 版
shunghsiyu
0
170
(swiftc) NonCopyableとライフタイム修飾子
teamhimeh
0
170
AIエージェント統制はAPIから——押さえるべき5つの要素
nagix
0
120
クラウドエージェントの先駆け Devin。今も最先端を走る、他との違い
kinopeee
2
560
The future of architectural work
ufried
0
140
SLOを阻む不安
sraku2159
0
220
Oracle Database Security 詳細解説
oracle4engineer
PRO
1
250
素人でもできた!AIを使った短編小説創作入門
delhi09
PRO
0
300
Don't write the architecture only in the prompt.
neohsu
0
310
Agent Loopを組み込んだ アンビエントなAI機能を実現する / Ambient AI fetures with Agent Loop
nekorush14
0
150
re:Invent2026 事前勉強会 歴史と愉しみ方10分LT編
toshi_atsumi
0
110
Featured
See All Featured
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.2k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
510
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
121
120k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Ruling the World: When Life Gets Gamed
codingconduct
0
430
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
ラッコキーワード サービス紹介資料
rakko
5
5.7M
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.9k
Google's AI Overviews - The New Search
badams
0
1.7k
New Earth Scene 8
popppiees
4
2.8k
Context Engineering - Making Every Token Count
addyosmani
9
1.3k
Transcript
選擇 Svelte 的三個理由 Kalan JSDC 2021 1
⾃我介紹 2 • Kalan (愷開) • Frontend Engineer@LINE Fukuoka •
blog.kalan.dev • @kjj6198 • @kalanyei
Svelte 是什麼 • ⼀⾨前端框架 • 由 Rich Harris 在 2016
年開始開發 • 透過事先編譯的⽅式減少 runtime 體積 • 400 多位貢獻者 3
當然,你也可以來貢獻 https://github.com/sveltejs/svelte/pull/4733 4
Agenda • 簡介 Svelte • 現代前端框架的基本要素 • 選擇 Svelte 的三個理由
• 語法簡單、容易上⼿ • bundle size 體積⼩ • 關注度持續提升
框架好多,我快學不動了 • 框架的出現代表開發者對現況的不滿 • ⼈們對於最佳實踐的探索 6
「現代」前端框架的基本要素 • 元件化的中⼼思想 7 / / js function as component
export const Profile = ({ user }) = > { return <div>{user.name} < / div>; }; < ! - - SFC - - > <template> <div>{{ user.name }} < / div> < / templte>
「現代」前端框架的基本要素 • 元件化的中⼼思想 • 響應機制(Reactivity) 8 <script setup> import {
ref } from 'vue' const count = ref(0) < / script> <template> <button @click="count + + ">{{ count }} < / button> < / template> export const Profile = () = > { const [user, setUser] = useState({ name: "kalan" }); return <button onClick={() = > setUser({ name: 'hoge' })}> {user.name} < / button>; };
「現代」前端框架的基本要素 • 元件化的中⼼思想 • 響應機制(Reactivity) • ⽣命週期 9 <script> export
default { mounted() { . . . } } < / script> <template> <div> < / div> < / template> export const Profile = () = > { useEffect(() = > { . . . }, []); useEffect(() = > { . . . }, [deps]); return <div> . . . < / div>; };
問題點 • 需要在 runtime 做 di ff 演算 → 增加
bundle size • 需要實作⼀套響應機制 → 犧牲⼀部分的效能 10
理由⼀:語法簡單、容易上⼿ 會寫 HTML、JavaScript、CSS 就可以寫 Svelte
Svelte 如何簡化 事先編譯並⽣成 JavaScript 程式碼 12 / / Countdown.svelte <script>
let countdown = 10; onMount(() = > { setInterval(() = > countdown -= 1, 1000); }) < / script> <span>{countdown} < / span>
Svelte 如何簡化 事先編譯並⽣成 JavaScript 程式碼 13 <script> let countdown =
10; onMount(() = > { setInterval(() = > countdown -= 1, 1000); }) < / script> <span>{countdown} < / span>
Tweet: twitter.com/AdamRackis/status/1438221959029039108 14
響應式語法 15 <script> import { onMount } from 'svelte'; let
countdown = 80; $: formatted = `${format(countdown, 'xx:xx')}`; onMount(() = > { setInterval(() = > countdown -= 1, 1000) }); < / script> <span>{formatted} < / span>
樣板語法 16 <script> export let age = 16; const handleClick
= () = > age + + ; < / script> <button on:click={handleClick}>長⼀歲 < / button> {#if age > = 18} <span>已成年 < / span> {:else} <span>未成年 < / span> {/if}
線上 REPL 與互動式教學 可以直接在網⾴上寫程式碼看效果 17
理由⼆:Bundle size 體積⼩ 善⽤編譯機制
編譯器的好處 • 不會影響 runtime 體積 • 可以進⾏靜態分析(變數追蹤、優化) • 優化⽣成程式碼 •
去除未使⽤的程式碼片段 Bundle size 變得更⼩!
None
• 只會引入必要的依賴 • 編譯後會變為 DOM API 呼叫 • 在 runtime
沒有 virtual DOM 和 di ff 機制 注意:Svelte 不是 zero-runtime
• name2 在畫⾯中未使⽤ • 因此不安排元件更新
分享:動物森友會情報表 JS bundle size: 10.6KB (gzip)
分享:台灣性侵害事件統計 JS bundle size: 49.6KB (gzip)
專案分享:⽇語八百屋 JS bundle size: 20.2KB (gzip)
關於 Bundle size • bundle size 是⼀種預算 • 不是每個專案都要變成獨⾓獸
理由三:關注度持續上升 開發者與社群的反應可當作指標參考
State of JS 2020 滿意度第⼀名 28
State of JS 2020 使⽤情形 29
Stack Overflow Survey 2021 最受喜愛的網⾴框架 30
有使⽤ Svelte 的公司 https://svelte.dev 31
分享:美國總統⼤選開票 • 關鍵評論網:Svelte • 天下雜誌:Svelte • Bloomberg:Svelte 32 截圖為 bloomberg
台灣 • 相比國外社群比較不熱絡 • 網路上的資源相對較少 33
缺點 • ⼤多數的處理都在編譯時期 • 相對其他框架資源較少 • 使⽤率仍然偏低 34
寫在最後 加入 Facebook 社團 Svelte.js Taiwan!