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
480
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
150
Other Decks in Technology
See All in Technology
Vibe-to-Spec開発_実践ガイド
happysamurai294
0
110
Adversary Infrastructure Hunting101
disconinja
0
160
書き手が人でもAIでも正しくなる道、SREを埋め込んだDeveloper Platform / tech drivers day8
chmikata
4
800
Snowflake でできることが増えたら、 ABAC が必要になった
kaeton
0
110
DevelopersIO2026 -バックアップは“消されないこと”が9割-
yoshida0129
0
430
cdk deployとcdkd deploy、実際にデプロイして5倍速近くの差を実測した
yama3133
1
110
reInvent2026stby LT00 "Change your life!"
shinichirokawano
1
410
AIコーディングエージェント開発_全体像
happysamurai294
0
110
顧客価値を追いかけたら、プライシングにたどり着いた
sansantech
PRO
2
1.1k
構造で守らせる データ・法務・セキュリティ・開発チームとつくる AI時代のデータガバナンスとデータ基盤のリアル
legalontechnologies
PRO
2
630
AI秘書と毎日働くのはもう当たり前。開発以外の業務に足りない機能をどう埋める?
minorun365
PRO
4
1.9k
「社外イベント=意識高い」の壁を壊せ!元々無関心だった僕らが部内で社外イベントを民主化して15人を連れ出すまで
say_no_w
0
160
Featured
See All Featured
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.3k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.9k
The Limits of Empathy - UXLibs8
cassininazir
2
740
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3.1k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
410
Evolving SEO for Evolving Search Engines
ryanjones
0
330
Design in an AI World
tapps
1
370
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
540
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
How to train your dragon (web standard)
notwaldorf
96
6.9k
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!