svelteup -- 實(shí)現(xiàn) web component 的最佳實(shí)踐

背景

svelte是新晉的前端框架。在打包體積和頁面顯示性能上有著不可磨滅的意義∪龊海現(xiàn)在越來越多網(wǎng)站上都已經(jīng)能看到它的身影溺职。之前我也對(duì)它的源碼有了深入的解讀,《Svelte筆記三:runtime源碼解讀》和《Svelte筆記四:compile源碼解析》兩篇文章可以作為參考赛不。 svelte的優(yōu)勢(shì)很明顯惩嘉, 主要在體積極小和預(yù)編譯組件邏輯。沒有virtual dom踢故,讓業(yè)務(wù)代碼更加純粹地集中在頁面顯示上文黎。

web component 一直是大家很想落地的一個(gè)瀏覽器新技術(shù)惹苗,但是實(shí)際應(yīng)用上我們卻很難看到。即使是在微前端方面它都非常難落地耸峭。web component和Server Side Rendering(SSR)的兩個(gè)概念是不搭的桩蓉,它更多一切從瀏覽器出發(fā),在不考慮ie的兼容性的情況下劳闹,已經(jīng)達(dá)到了可用的情況院究。它的使用方式很簡(jiǎn)單,直接在頁面中寫入自定義的標(biāo)簽即可本涕,例如 <my-element />业汰,但是 native web component 的開發(fā)語法確實(shí)讓開發(fā)者難以適應(yīng)。

custom elements 兼容性

svelte 和 web component 的概念一拍即合菩颖。由于 native web component 現(xiàn)在還不成熟样漆,用它去實(shí)現(xiàn)一些頁面的難度(學(xué)習(xí)成本和心智負(fù)擔(dān))會(huì)較大,不太適合新手學(xué)習(xí)晦闰。你可能會(huì)問使用像lit-element這樣的框架寫 web component 是否合適氛濒?《A Comparison Of Web Component Solutions》、《All the Ways to Make a Web Component》這兩篇文章很好地對(duì)比了第三方框架 svelte鹅髓、stencil舞竿、lit-element、Lightning Web Components 的各個(gè)優(yōu)缺點(diǎn)窿冯,證明了svelte在體整體體積和它的易用性有著獨(dú)特的優(yōu)勢(shì)骗奖。《Custom Elements Everywhere》一文橫向?qū)Ρ攘?8款框架轉(zhuǎn) web component醒串,svelte的支持度非常好执桌。

什么是 svelteup

svelteup 是一個(gè)開源項(xiàng)目,歡迎持續(xù)關(guān)注芜赌,并為點(diǎn)star仰挣。

svelteup 的誕生,目標(biāo)更多是為了滿足獨(dú)立的小工具頁面和已有頁面的插入小組件缠沈。這些頁面就非常適合用svelte進(jìn)行實(shí)現(xiàn)膘壶,正是因?yàn)樗靶∵\(yùn)行時(shí)”的特點(diǎn),很貼近瀏覽器洲愤,用最原生最底層的方式去實(shí)現(xiàn)網(wǎng)頁的組件庫颓芭。

svelteup是由三個(gè)概念混合而成,svelte是前端框架柬赐,esbuild是編譯工具亡问,web component是輸出產(chǎn)物。在瀏覽器中使用就是以web component的方式肛宋。它的優(yōu)勢(shì)就是“快州藕,輕量束世,直接,好用床玻、客戶端渲染”毁涉。

svelteup = svelte + esbuild + web component

svelteup = client rendering + light weight + extremely fast

svelteup的使用非常簡(jiǎn)單,初始約定了 component 文件夾作為組件代碼的位置笨枯,而 public 文件夾則是托管靜態(tài)資源的目錄薪丁。這些都可以通過cli遇西、配置文件或者js api進(jìn)行配置馅精,詳情參考文檔。借助于svelteup可以實(shí)現(xiàn)組件打包和頁面開發(fā)調(diào)試等工作粱檀。

# 組件打包
svelteup
# 頁面開發(fā)調(diào)試
svelteup -s public

什么樣的項(xiàng)目需要svelteup

我承認(rèn)svelteup并不完美洲敢,沒有一個(gè)工具是完美,沒有一個(gè)工具能夠覆蓋所有項(xiàng)目茄蚯。它更適合:

  • “客戶端渲染頁面”
  • “對(duì)包體積要求極高的小工具”
  • “插入已有頁面的組件”

svelte打包產(chǎn)物極小压彭,所以性能和react、vue比就是天然優(yōu)勢(shì)渗常。如果你想用它去寫個(gè)簡(jiǎn)單頁面壮不,svelteup-starter是一個(gè)最簡(jiǎn)單的初始化模版,值得你去嘗試皱碘。

svelteup的最佳實(shí)踐

實(shí)踐一:基于 reveal.jskeynote-svelte 模版

reveal.js 是一款完成度很高询一、歷史悠久的在線ppt庫,著名的slides網(wǎng)站就是基于它癌椿。它能夠讓你的分享有很好的傳播力健蕊。我一直使用它的 markdown 擴(kuò)展工具 "webpro/reveal-md" 來寫一些技術(shù)分享。其使用很簡(jiǎn)單踢俄,只需要以markdown的形式來寫ppt的內(nèi)容缩功,利用reveal-md運(yùn)行和打包即可,“brandonxiang的分享” 值得參考一下都办。

reveal.js

它可以實(shí)現(xiàn) markdown 和 html 混寫嫡锌,有較高的靈活度。但是琳钉,如果html要考慮復(fù)用世舰,你只能復(fù)制粘貼,怎么能夠?qū)tml組件插入到已有的ppt頁面槽卫?很直接的一個(gè)想法就是利用svelteup來實(shí)現(xiàn)插入式的組件跟压。

舉個(gè)例子,如果你想幾個(gè)頁面能夠顯示一個(gè)同樣的標(biāo)簽歼培。你可以用svelte的語法簡(jiǎn)單寫一個(gè)組件震蒋,打包一個(gè)web component茸塞。你可以在 markdown 中直接使用<name-corner></name-corner>。這里注意 svelte:options 的語法可以定義web component的名字查剖。這里沒有使用黑魔法钾虐,只是用天然的瀏覽器特性給你的ppt如虎添翼。

<svelte:options tag="name-corner" />
<div class="box">
    <slot>
        <em>Created by Brandonxiang</em>
    </slot>
</div>

<style>
    .box {
        width: 300px;
        border: 1px solid #aaa;
        border-radius: 2px;
        box-shadow: 2px 2px 8px rgba(0,0,0,0.1);
        padding: 1em;
        margin: 0 0 1em 0;
    }
</style>

keynote-svelte 就是這個(gè)基于svelteup和reveal-md的在線ppt初始化模版笋庄,歡迎嘗鮮效扫。

實(shí)踐二:chrome-extension-svelte

chrome的插件已經(jīng)是非常成熟的工具載體,聰明的開發(fā)者可以利用它開發(fā)提高效率的工具直砂。它的實(shí)現(xiàn)是通過html的頁面渲染和插件線程之間的通訊菌仁。在開發(fā)的過程當(dāng)中,不可避免的是組件化静暂。chrome插件和SSR無關(guān)济丘,但是和 svelteup 則是相輔相成。chrome-extension-svelte 就是基于svelteup的chrome插件的初始化開發(fā)模版洽蛀。借助svelte的輕量摹迷,該模版可以大大提高你的開發(fā)效率和插件顯示效率。

實(shí)踐三:版本切換小工具

在業(yè)務(wù)需求迭代的過程中郊供,我們會(huì)考慮按需求分支來虛擬環(huán)境峡碉。而Version-Tool是一個(gè)虛擬多環(huán)境的版本切換小工具,它的主要工作只是為了給頁面設(shè)置cookie帶上版本參數(shù)驮审。它的第一個(gè)版本是采用 react + ant desgin + axios + webpack 這樣的技術(shù)棧鲫寄,在沒有g(shù)zip的情況下,結(jié)果打包體積在2.1M左右头岔,體積太大到了不能接受的地步塔拳。

該工具采用svelteup工具進(jìn)行重構(gòu),通過自定義組件替換ant design峡竣,利用fetch來替換axios靠抑。既能夠保證功能的統(tǒng)一和組件的拓展性,也能夠有效減少產(chǎn)物體積适掰。在沒有g(shù)zip的情況下颂碧,體積有效減少到13kb,是以前的165分之一类浪,小了超過一百倍载城。這時(shí)候你可以看到svelte的應(yīng)用價(jià)值。

總結(jié)

以上三個(gè)實(shí)踐费就,從易用性诉瓦、產(chǎn)物體積和拓展性等方面,展示了svelteup的用途和定位。在現(xiàn)代前端發(fā)展的過程當(dāng)中睬澡,我們的目標(biāo)是為了把頁面做得更貼近瀏覽器固额,更貼近高性能。svelte的體積小和web原生組件不謀而合煞聪,希望這個(gè)工具可以打造很多原生組件在其他項(xiàng)目中直接使用斗躏。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市昔脯,隨后出現(xiàn)的幾起案子啄糙,更是在濱河造成了極大的恐慌,老刑警劉巖云稚,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隧饼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡碱鳞,警方通過查閱死者的電腦和手機(jī)桑李,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門踱蛀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窿给,“玉大人,你說我怎么就攤上這事率拒”琅荩” “怎么了?”我有些...
    開封第一講書人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵猬膨,是天一觀的道長(zhǎng)角撞。 經(jīng)常有香客問我,道長(zhǎng)勃痴,這世上最難降的妖魔是什么谒所? 我笑而不...
    開封第一講書人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮沛申,結(jié)果婚禮上劣领,老公的妹妹穿的比我還像新娘。我一直安慰自己铁材,他們只是感情好尖淘,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著著觉,像睡著了一般村生。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上饼丘,一...
    開封第一講書人閱讀 48,954評(píng)論 1 283
  • 那天趁桃,我揣著相機(jī)與錄音,去河邊找鬼。 笑死卫病,一個(gè)胖子當(dāng)著我的面吹牛屡穗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播忽肛,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼村砂,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了屹逛?” 一聲冷哼從身側(cè)響起础废,我...
    開封第一講書人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎罕模,沒想到半個(gè)月后评腺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡淑掌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評(píng)論 2 323
  • 正文 我和宋清朗相戀三年蒿讥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抛腕。...
    茶點(diǎn)故事閱讀 37,989評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡芋绸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出担敌,到底是詐尸還是另有隱情摔敛,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評(píng)論 4 322
  • 正文 年R本政府宣布全封,位于F島的核電站马昙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏刹悴。R本人自食惡果不足惜行楞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望土匀。 院中可真熱鬧子房,春花似錦、人聲如沸恒削。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钓丰。三九已至躯砰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間携丁,已是汗流浹背琢歇。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工兰怠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人李茫。 一個(gè)月前我還...
    沈念sama閱讀 45,401評(píng)論 2 352
  • 正文 我出身青樓揭保,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親魄宏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子秸侣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容