Kalan's Blog

目前主題 亮色

Svelte 筆記(1)- 沒有銀彈 | Svelte 系列文

在前面的章節有提到,Svelte 讓我愛不釋手。Svelte 的核心概念在於「透過靜態分析+編譯減少 runtime 做的事」,來減少 Virtual DOM 做 diff 的時間和一大包的 runtime。

但是 Svelte 走的路也註定會遇到一些問題,最主要的就是 Svelte 沒辦法在 runtime 當中幫你做太多事情。

  • 像是這個 issue(Render slot fallback content when there's no content) ,svelte 在 slot 內容為空時應該要渲染 fallback ,不過因為裡頭有像這樣的程式碼:
<Box>
	{#if foo}
		something
	{/if}
</Box>

所以靜態分析時只能知道裡頭有個 if statement,然後判定就會是有內容,實際上渲染就會是空白而不是用 fallback。

  • 雖然說 compile 是 compile,但也不是沒有 runtime,背後還是有一套更新機制幫你追蹤 dependency、更新,只要 browser 沒有實作 reactivity 的一天,框架就勢必要處理這件事。另外現在的 compiler 雖然盡力減少打包出來程式,但是當功能越用越多,bundle size 可能就會逐漸追上來了,在比較大的專案可能差別就不會那麼明顯
  • 沒有 Virtual DOM,另外一個問題點是測試,Virtual DOM 有另外一個好處是提供了抽象,方便你依照介面實作。不像 React 那樣非常容易測試,當然這就牽扯到開發者體驗與使用者體驗了。

另外在寫程式的時候我很不喜歡看到 「XXX 框架就是屌!其他都是垃圾」,這種想法不僅在自己的職涯或是技術上都是原地踏步,而且蠻要不得的。

當然這也不是說世界大同大家都好棒棒,這個好那個也好,選擇框架/語言的同時也代表著你的品味。

乒乓」有一句台詞我很喜歡:

卓球に人生をかけるなんて気味が悪い(為了桌球而賭上人生真是令人作噁)

雖然說作噁有點太誇張了啦,不過的確沒有什麼框架一定要死抱著不行,你的實力應該是取決於駕馭框架的能力,而不是被框架駕馭。

總結起來恐怕要在公司內引入這個框架或許還要再觀察一陣子,但是要用來快速做個小專案(甚至中型)個人覺得非常好用,而且馬上就可以進入開發,總之是一個會讓我 ワクワク 的框架,期待後續的發展。

如果覺得這篇文章對你有幫助的話,可以考慮到下面的連結請我喝一杯 ☕️ 可以讓我平凡的一天變得閃閃發光 ✨

Buy me a coffee