天天看點

完了,又火一個項目

又一個前端超新星項目 ?

大家好,我是魚皮。

今天逛 GitHub 的時候,在趨勢榜上看到一個項目,竟然短短一天的時間内,漲了 1000 多個星星!

就是這個名為 <code>solid</code> 的項目:

完了,又火一個項目

要知道日增上千 star 可是非常難得的,我不禁感到好奇,點進去看看這個項目到底有啥牛逼的?

這是一個國外的前端項目,截止到發文前,已經收獲了 8400 個 star。

我總覺得這個項目很眼熟,好像之前也看到過,于是去 <code>Star History</code> 上搜了一下這個項目的 star 增長曆史。好家夥,這幾天的增速曲線幾乎接近垂直,已經連續好幾天增長近千了!

完了,又火一個項目

看到這個曲線,我想起來了,solid 是一個 JavaScript 架構,此前在一次 JavaScript 架構的性能測試中看到過它。

要知道,現在的 JavaScript 開發架構基本就是 React、Vue、Angular 三分天下,還有就是新興的 Svelte 架構潛力無限(近 5w star),其他架構想分蛋糕還是很難的。那麼 Solid 到底有什麼本事,能讓他連續幾天 star 數暴漲呢?

打開官網,官方對 Solid 的描述是:一個用于建構使用者界面的 聲明性 JavaScript 庫,特點是高效靈活。

順着官網往下看,Solid 有很多特點,比如壓縮後的代碼體積隻有 6 kb;而且天然支援 TypeScript 以及 React 架構中經常編寫的 JSX(JavaScript XML)。

來看看官網給的示例代碼:

完了,又火一個項目

怎麼樣,他的文法是不是和 React 神似?

但是,這些并不能幫助 Solid 架構脫穎而出,真正牛逼的一點是它 非常快 。

有多快呢?第一夠不夠 !

完了,又火一個項目

有同學說了,你這不睜着眼睛說瞎話麼?Solid 明明是第二,第一是 Vanilla 好吧!

哈哈,但事實上,Vanilla 其實就是不使用任何架構的純粹的原生 JavaScript,通常作為一個性能比較的基準。

那麼 Solid 為什麼能做到這麼快呢?甚至超越了我們引以為神的 Vue 和 React。

這是因為 Solid 沒有采用其他主流前端架構中的 Virtual DOM,而是直接被靜态編譯為真實的原生 DOM 節點,并且将更新控制在細粒度的局部範圍内。進而讓 runtime(運作時)更加輕小,也不需要所謂的髒檢查和摘要循環帶來的額外消耗,使得性能和原生 JavaScript 幾乎無異。換句話說,編譯後的 Solid 其實就是 JavaScript!

其實 Solid 的原理和新興架構 Svelte 的原理非常類似,都是編譯成原生 DOM,但為啥他更快一點呢?

為了搞清楚這個問題,我打開了百度來搜這玩意,但發現在國内根本搜不到幾條和 Solid.js 有關的内容,基本全是一些亂七八糟的東西。後來還是在 Google 上搜尋,才找到了答案,結果答案竟然還是來自于某乎的大神伊撒爾。。。

要搞清楚為什麼 Solid 比 Svelte 更快,就要看看同一段代碼經過它們編譯後,有什麼差別。

大神很貼心地舉了個例子,比如這句代碼:

經 Svelte 編譯後的代碼:

經 Solid 編譯後的代碼:

可以看到,在建立 DOM 節點時,原來 Solid 耍了一點小把戲,利用了 innerHTML 代替 createElement 來建立,進而進一步提升了性能。

當然,抛去 Virtual DOM 不意味着就是 “銀彈” 了,畢竟十年前各種架構出現前大家也都是寫原生 JavaScript,輕 runtime 也有缺點,這裡就不展開說了。

除了快之外,Solid 還有一些其他的特點,比如文法精簡、WebComponent 友好(可自定義元素)等。

總的來說, 我個人還是非常看好這項技術的,日後說不定能和 Svelte 一起動搖一下三巨頭的地位,給大家更多的選擇呢?這也是技術選型好玩的地方,沒有絕對最好的技術,隻有最适合的技術。

不禁感歎道:唉,技術發展太快了,一輩子學不完啊!(不過前端初學者不用關心那麼多,老老實實學基礎三件套 + Vue / React 就行了)

最後再送大家一些 幫助我拿到大廠 offer 的學習資源,高達 6 T!

跑了,留下 6T 的資源!

我是如何通過自學,拿到騰訊、位元組等大廠 offer 的,可以看這篇文章,不再迷茫!

我學計算機的四年,共勉!

我是魚皮,點贊 還是要求一下的,祝大家都能心想事成、發大财、行大運。

完了,又火一個項目