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
460
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
860
Svelte - 如何在前端框架中脫穎而出 | ModernWeb'21
kjj6198
0
260
状態管理を楽にする道
kjj6198
1
470
Day25. 如何解析 HTML 語法
kjj6198
0
220
Day24. Svelte 如何編譯程式碼(2)
kjj6198
0
260
Svelte 如何編譯程式碼(1)
kjj6198
0
280
Day22. Svelte 經驗談
kjj6198
0
260
Day18. UI 實戰篇 - 圖片檢視器
kjj6198
0
240
Day17. UI 實戰篇 - 音樂播放器
kjj6198
0
140
Other Decks in Technology
See All in Technology
SREでアラート疲れを 解決しよう!
kairim0
1
230
Snapshot Testing in Practice: Predictable and Reliable SwiftUI Views
fespinoza
0
200
事業活動を AI Ready にする攻めと守りのデータエンジニアリング / data-engineering-for-ai-ready-business
pei0804
7
2.6k
転んだ話が背中を預ける理由になる / A_story_about_falling_down_gives_you_a_reason_to_watch_each_other_s_backs.pdf
pauli
3
360
アウトプット初心者、半年間のふりかえり
4o1sobblue
0
120
Classmethod Company Deck
satoshi7
0
130
生成AIと進める探索的データ分析(2026.10.03 第122回Tokyo.R勉強会)
tatamiya
2
1.5k
OR学会2026年秋期大会_機械学習と数理最適化の融合による、配合レシピ最適化システム開発事例
brainpadpr
0
130
AIがコードを書く時代に、エンジニアは何で自分の価値を証明するのか / In an era where AI writes code how do engineers prove their value
carta_engineering
3
860
今さら理解するウェブフォントver.2026
takanorip
3
680
二歩目のフロントエンド・ウェブアクセシビリティ
camiha
2
390
AI時代のAPI開発を加速する品質ガードレール / API Quality Guardrails in the AI Era
yokawasa
0
190
Featured
See All Featured
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
750
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
A Modern Web Designer's Workflow
chriscoyier
699
190k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
Optimizing for Happiness
mojombo
378
71k
エンジニアに許された特別な時間の終わり
watany
109
250k
How STYLIGHT went responsive
nonsquared
100
6.3k
BBQ
matthewcrist
90
10k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
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!