微前端與Web Components

微前端是thoughtworks在2016年提出的 Micro?Frontends extending the microservice idea to frontend development一文闡述了整個(gè)思想溪食,該文也被翻譯成為中文版本妖异≈背罚可以說论泛,我看到文章當(dāng)時(shí),angular、react、vue三個(gè)框架同時(shí)使用確實(shí)吸引了我一下烂翰,但是我相信不會有團(tuán)隊(duì)這么折磨自己。微前端的這種“元框架(meta framework)”技術(shù)棧不是僅僅滿足于多個(gè)現(xiàn)代前端框架的切換蚤氏,而是滿足新老框架的更替和迭代甘耿。我舉個(gè)非常簡單的栗子。如果前端框架出現(xiàn)“斷崖式的升級”竿滨,像angular1和angular2佳恬。我們需要在保證前端項(xiàng)目生產(chǎn)可行的情況下捏境,怎么做到迭代升級,微前端是其中一種方案殿怜,而微前端有非常多種實(shí)現(xiàn)方式典蝌,web components又是其中一種實(shí)現(xiàn)方案曙砂。

微服務(wù)

在認(rèn)真了解微前端之前头谜,首先要了解的是微服務(wù)。

微服務(wù)的概念是由現(xiàn)為ThoughtWorks公司的首席科學(xué)家Martin Fowler提出的鸠澈,目的就是后端服務(wù)的獨(dú)立部署柱告,獨(dú)立開發(fā),它的主要特點(diǎn)是組件化笑陈、松耦合际度、自治、去中心化涵妥。微前端則是在2016年thoughtworks技術(shù)雷達(dá)中提出乖菱,把后端概念延伸到前端,也是類似的目標(biāo)蓬网。

  • 技術(shù)無關(guān)
  • 隔離團(tuán)隊(duì)代碼
  • 建立各團(tuán)隊(duì)的前綴
  • 本地瀏覽器特性優(yōu)先于自定義 API
  • 構(gòu)建自適應(yīng)網(wǎng)站

微前端實(shí)現(xiàn)方案

它的實(shí)現(xiàn)方案有很多種窒所。這里引用Phodal的微前端的那些事兒中的一張圖說明實(shí)現(xiàn)方式的選型情況。

實(shí)現(xiàn)方案

由于在實(shí)戰(zhàn)項(xiàng)目當(dāng)中帆锋,我們都是有交付壓力的而且用戶體驗(yàn)一定是我們想要的吵取。所以最終的選擇方案只剩下兩種----webComponent和iFrame。其他幾種方案大家可以在Phodal的博客中了解锯厢,這里不再贅述皮官。

Web Components

在前端組件化橫行的今天,組件化確實(shí)極大的提升了開發(fā)效率实辑,代碼復(fù)用量捺氢,系統(tǒng)穩(wěn)定性。瀏覽器未來的發(fā)展方向會是除了H5標(biāo)簽外剪撬,還有自定義標(biāo)簽摄乒,和現(xiàn)在的Vue、React一樣婿奔。但是自定義標(biāo)簽的編譯不再依賴Vue或者React的運(yùn)行時(shí)和編譯時(shí)缺狠,瀏覽器原生支持自定義組件的注冊。

它包含了4個(gè)概念萍摊,未來的組件化標(biāo)準(zhǔn) —— 淺嘗Web Components中有介紹挤茄。

  • Shadow DOM
  • Custom Elements
  • HTML Templates
  • HTML Imports

HTML Templates很簡單,是<template/>冰木,它的content可以被隨時(shí)提出穷劈。HTML已經(jīng)被漸漸放棄笼恰。

Custom Elements即是自定義標(biāo)簽,customElements.define可以用來注冊這個(gè)自定義組件歇终。第一個(gè)參數(shù)是它的名字社证,第二個(gè)參數(shù)是個(gè)HTMLElement的類對象,組件內(nèi)部的功能可以其中實(shí)現(xiàn)评凝。具體看下面這個(gè)栗子追葡。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Simple template</title>
  <script src="main.js" defer></script>
</head>
<body>
  <h1>Simple template</h1>

  <template id="my-paragraph">
    <style>
      p {
        color: white;
        background-color: #666;
        padding: 5px;
      }
    </style>
    <p><slot name="my-text">My default text</slot></p>
  </template>

  <my-paragraph>
    <span slot="my-text">Let's have some different text!</span>
  </my-paragraph>

  <my-paragraph>
    <ul slot="my-text">
      <li>Let's have some different text!</li>
      <li>In a list!</li>
    </ul>
  </my-paragraph>

</body>
</html>

// main.js
customElements.define('my-paragraph',
  class extends HTMLElement {
    constructor() {
      super();

      const template = document.getElementById('my-paragraph');
      const templateContent = template.content;

      this.attachShadow({mode: 'open'}).appendChild(
        templateContent.cloneNode(true)
      );
    }
  }
);

const slottedSpan = document.querySelector('my-paragraph span');

Shadow DOM 是非常重要的概念,主要是實(shí)現(xiàn)變量的隔離奕短,組件要做到獨(dú)立不干擾宜肉。

Shadow DOM和 Virtual DOM是不一樣的兩個(gè)概念。Virtual DOM是基于Javascript實(shí)現(xiàn)的dom操作的中間層翎碑。所有的數(shù)據(jù)綁定事件會在中間層做diff再實(shí)施到DOM上谬返。而

如今的前端框架中,Polymerstencil都是web Components的編譯器日杈,實(shí)現(xiàn)數(shù)據(jù)驅(qū)動等友好開發(fā)體驗(yàn)遣铝。當(dāng)然現(xiàn)在React和Vue也出現(xiàn)了web Components的外層封裝支持。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末莉擒,一起剝皮案震驚了整個(gè)濱河市酿炸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌啰劲,老刑警劉巖梁沧,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蝇裤,居然都是意外死亡廷支,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門栓辜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恋拍,“玉大人,你說我怎么就攤上這事藕甩∈└遥” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵狭莱,是天一觀的道長僵娃。 經(jīng)常有香客問我,道長腋妙,這世上最難降的妖魔是什么默怨? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮骤素,結(jié)果婚禮上匙睹,老公的妹妹穿的比我還像新娘愚屁。我一直安慰自己,他們只是感情好痕檬,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布霎槐。 她就那樣靜靜地躺著,像睡著了一般梦谜。 火紅的嫁衣襯著肌膚如雪丘跌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天改淑,我揣著相機(jī)與錄音碍岔,去河邊找鬼浴讯。 笑死朵夏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的榆纽。 我是一名探鬼主播仰猖,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼奈籽!你這毒婦竟也來了饥侵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤衣屏,失蹤者是張志新(化名)和其女友劉穎躏升,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狼忱,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡膨疏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钻弄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片佃却。...
    茶點(diǎn)故事閱讀 38,809評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖窘俺,靈堂內(nèi)的尸體忽然破棺而出饲帅,到底是詐尸還是另有隱情,我是刑警寧澤瘤泪,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布灶泵,位于F島的核電站,受9級特大地震影響对途,放射性物質(zhì)發(fā)生泄漏赦邻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一掀宋、第九天 我趴在偏房一處隱蔽的房頂上張望深纲。 院中可真熱鬧仲锄,春花似錦、人聲如沸湃鹊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽币呵。三九已至怀愧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間余赢,已是汗流浹背芯义。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留妻柒,地道東北人扛拨。 一個(gè)月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像举塔,于是被迫代替她去往敵國和親绑警。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評論 2 351

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

  • 冷月漫天星 陽光暖人心 百里凍土 千里行 日月兼程 遺忘過去 歲月更替 此處景無限 不堪入眼 何處聞故人 盡在萬千
    離人賦l醉逍遙閱讀 293評論 0 0
  • 住在小城市央渣,時(shí)間長了计盒,就會形成一個(gè)龐大的熟人圈。 在圈子里芽丹,有些人收獲自己的財(cái)富北启,有些人收獲自己的人脈,更多的是有...
    冬后春初閱讀 343評論 1 8
  • 清平樂 詠琴 六弦七音 彈指傳天籟 西音東漸傾終生 回首余生空嘆 年少殘夢依稀 造化弄人夢斷 半生已然不惑 臥看流云花落
    琴癡1102閱讀 235評論 0 2
  • 中國以孝治天下拔第,本家的爺爺頭暈咕村,血壓高,去醫(yī)院檢查了楼肪,也正好與叔叔一起回來培廓。腦走板塊。輕微堵塞春叫,心臟偏大肩钠,醫(yī)院只能...
    赤演生閱讀 246評論 0 0
  • 在協(xié)和 有這樣一群人 她們用真情的服務(wù) 使患者感受 漫看風(fēng)和日暖价匠,傾聽鳥語花香 微風(fēng)拂過,化作滿院飄香 或許你的診...
    稍等會好噠好閱讀 175評論 0 0