Svelte 3:反思響應式編程

注意:原文發(fā)表于2019-4-22券坞,隨著框架不斷演進娘扩,部分內容可能已不適用。

原文:Svelte 3: Rethinking reactivity
作者:Rich Harris
翻譯:前端子魚
聲明:轉載請指明本文出處粤策。


終于樟澜,塵埃落定。

歷經(jīng)數(shù)月之后叮盘,這幾天來我們喜不自勝:我們宣布 Svelte v3 穩(wěn)定版即將正式發(fā)布了秩贰。

這是一個大版本。

這次的發(fā)布柔吼,是 Svelte 社區(qū)眾多貢獻者耗費了數(shù)百小時的心血毒费,包括來自 beta 版測試人員的寶貴反饋,他們聚沙成塔愈魏,眾志成城觅玻,使得各項設計精益求精想际,日臻完善。

相信這次發(fā)布能不負眾望溪厘,讓你喜歡上它胡本。

什么是 Svelte?

Svelte 是一個組件框架(就像 React 或 Vue)桩匪,不過與他們又截然不同打瘪。

傳統(tǒng)的框架也允許你編寫聲明式的、狀態(tài)驅動的代碼,不過是要付出代價的:

瀏覽器做了很多額外的工作彩扔,去將這些聲明式的結構轉換為 DOM 操作妆档,使用 Virtual DOM 差異比較(diffing) 等這類技術,可能會超出你的設想虫碉,并且加劇垃圾回收的負擔敦捧。

相反兢卵,Svelte 在執(zhí)行 build 的時候甜奄,將組件轉化為高效的命令式代碼课兄,并能精確地更新 DOM。

因此晨继,你可以寫出高性能且炫酷的程序烟阐。

Svelte 的首個版本完全是為了 驗證這么一個假設,即通過一個專用的編譯器可以生成高度可靠的代碼紊扬,同時還能提供出色的用戶體驗蜒茄。

第二版是較小的升級,稍作調整珠月。

第三版我們進行了重大的改進扩淀。

在過去的五六個月里,我們工作的重點是在給程序員提供出色的開發(fā)體驗上啤挎。

現(xiàn)在編寫組件比起其他框架而言驻谆,樣板代碼少得多卵凑。

如果你使用過其他框架的話,我們認為你會被驚艷到胜臊。耳聽為虛勺卢,不妨試讀一下我們全新的教程,甄辨真?zhèn)巍?/p>

我們首先需要反思現(xiàn)代 UI 框架的核心概念:響應式編程(下方是反思響應式編程的視頻象对,建議您直接閱讀本文黑忱,也即視頻所講的內容,你也可以在 You Gotta Love Frontend Code Camp 上觀看)勒魔。

將響應式融入語言

在舊版的 Svelte 中甫煞,你可以通過調用 this.get 方法來告訴程序有某些狀態(tài)已更改:

const { count } = this.get(); 

this.set({ count: count + 1 });

這可以讓組件得到響應。

剛好說到這里順便提一下冠绢,this.get 與經(jīng)典(Hooks 之前的) React 中使用的 this.setState 方法幾乎相同:

const { count } = this.state; 
this.setState({ count:count + 1 });

但有一些重要的技術差異(正如我在《反思響應式編程》的視頻中解釋的那樣抚吠,React 不是響應式的),不過從概念上講卻是同一回事弟胀。

隨著 Hooks 的降臨楷力,引起了翻天覆地的改變,Hooks 以與眾不同的方式來處理狀態(tài)孵户。

許多框架競相效尤萧朝,紛紛開始嘗試實現(xiàn)自己的 Hooks,不過我們很快就當機立斷:這并非我們致力的方向夏哭。

(實際上检柬,Svelte v3 基本上是 Sunil 的錯

Hooks 有一些吸引人的特性,但是它們也包含了一些不太自然的代碼方庭,并為垃圾回收器制造了些不必要的麻煩厕吉。

對于一個用于嵌入式設備和大量動畫交互的框架來說,這不是一件好事械念。所以我們先退后一步靜心自問头朱,什么樣的 API 才適合我們……

道說:大方無隅,大音希聲龄减,大象無形……

—— 沒有 API 就是最好的 API项钮!

我們豁然開朗,我們可以憑借語言來另辟蹊徑希停。

更新 count 的值烁巫,以及所有依賴它的東西,應該像這樣輕而易舉:

count += 1;

由于我們是一個編譯器宠能,因此我們可以通過在幕后檢測賦值操作來實現(xiàn)這一點:

count += 1; 
$$invalidate('count', count);

更重要的是亚隙,我們可以在沒有使用代理或者 get/set 訪問器帶來的開銷和復雜性的情況下,實現(xiàn)了這些能力违崇。

它不過是一個普通的變量而已阿弃。

煥然一新

除了編寫組件的方式煥然一新外诊霹,Svelte 自身也不同往日了,擁有了全新的外觀和感覺渣淳。

仰賴 Achim Vedam 出色的工作脾还,設計了我們新的徽標和網(wǎng)站,并啟用了新的域名 svelte.dev 代替了 svelte.technology入愧。

我們還更改了口號鄙漏,從“神奇地銷聲匿跡的UI框架”改成了“增強控制力的 Web APP”。

Svelte 八面玲瓏 —— 出色的性能棺蛛、尺寸很小的包怔蚌、可訪問性、內置樣式封裝鞠值、聲明式轉換媚创、易用性以及它本質上只是一個編譯器等等。

這些我們都會面面俱到彤恶,絕不厚此薄彼。

“增強控制力” 旨在升華 Svelte 的整體設計理念鳄橘,即我們的工具應該為我們自身的智能擴展而存在声离,期望再次帶火 William Gibson 風格。

從 v2 升級

如果你是 Svelte 2 的用戶瘫怜,那么可能要手動做一些升級术徊。

在接下來的幾天,我們將會發(fā)布遷移指南和 svelte-upgrade 的更新版本鲸湃,我們將盡最大努力使得這個過程自動化赠涮。

但這畢竟是一次重大的變更,并非所有內容都能自動處理得了暗挑。

當然我們不會掉以輕心:希望你體驗了 Svelte 3 之后能夠明白笋除,我們?yōu)槭裁凑J為有必要與過去決裂。

拭目以待

盡管這個版本已經(jīng)夠折騰的了炸裆,但我們還遠未完成垃它。

我們還有大量的想法來生成更智能、更緊湊的代碼烹看,以及一個長長的特性期望列表国拇。

Sapper,我們一個 Next.js 風格的應用框架惯殊,目前仍處于更新迭代中酱吝,支持使用 Svelte 3。

Svelte Native 這個社區(qū)項目可以使你用 Svelte 來編寫 Android 或 iOS 的 APP土思,該項目雖然取得了一些進展务热,但應該得到 core 的更全面的支持忆嗜。

我們還沒有其他框架那樣擁有很多編輯器擴展、語法高亮陕习、組件工具霎褐、devtool 等等,我們也應該豐富這些该镣。

我們也確實是想添加一流的 TypeScript 支持冻璃。

與此同時,我們認為 Svelte 3 是構建 Web 應用的最佳方式损合。

花個把小時瀏覽一下我們的教程省艳,希望能使你有所動容。

無論如何嫁审,我們都希望在 Discord 聊天室Github 上看到你跋炕。

歡迎每一位開發(fā)者 —— 尤其是你。

< The End >
- 窗明幾凈律适,靜候時日變遷 -

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末辐烂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子捂贿,更是在濱河造成了極大的恐慌纠修,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厂僧,死亡現(xiàn)場離奇詭異扣草,居然都是意外死亡,警方通過查閱死者的電腦和手機颜屠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門辰妙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人甫窟,你說我怎么就攤上這事密浑。” “怎么了蕴坪?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵肴掷,是天一觀的道長。 經(jīng)常有香客問我背传,道長呆瞻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任径玖,我火速辦了婚禮痴脾,結果婚禮上,老公的妹妹穿的比我還像新娘梳星。我一直安慰自己赞赖,他們只是感情好滚朵,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著前域,像睡著了一般辕近。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上匿垄,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天移宅,我揣著相機與錄音,去河邊找鬼椿疗。 笑死漏峰,一個胖子當著我的面吹牛,可吹牛的內容都是我干的届榄。 我是一名探鬼主播浅乔,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼铝条!你這毒婦竟也來了靖苇?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤班缰,失蹤者是張志新(化名)和其女友劉穎顾复,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鲁捏,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡杠览,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年芬位,在試婚紗的時候發(fā)現(xiàn)自己被綠了襟己。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寥枝。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡粪狼,死狀恐怖视事,靈堂內的尸體忽然破棺而出至耻,到底是詐尸還是另有隱情镣典,我是刑警寧澤渔期,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布运吓,位于F島的核電站,受9級特大地震影響疯趟,放射性物質發(fā)生泄漏拘哨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一信峻、第九天 我趴在偏房一處隱蔽的房頂上張望倦青。 院中可真熱鬧,春花似錦盹舞、人聲如沸产镐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽癣亚。三九已至丑掺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間述雾,已是汗流浹背街州。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绰咽,地道東北人菇肃。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像取募,于是被迫代替她去往敵國和親琐谤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內容