成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Web Components - 面向未來(lái)的組件標(biāo)準(zhǔn)

移動(dòng)開(kāi)發(fā)
對(duì)于前端開(kāi)發(fā)者而言,W3C組織制定的HTML標(biāo)準(zhǔn)以及瀏覽器廠商的實(shí)現(xiàn)都是“魚(yú)”而 不是“漁”,開(kāi)發(fā)者在需求無(wú)法滿(mǎn)足的情況下通過(guò)現(xiàn)有技術(shù)創(chuàng)造了各種組件,雖然短期滿(mǎn)足了需求但是由于嚴(yán)重缺乏標(biāo)準(zhǔn),導(dǎo)致同一個(gè)組件有成千上萬(wàn)的相似實(shí)現(xiàn)但 它們卻無(wú)法相互重用,這很大程度上制約了組件化的最大價(jià)值-重用,Web Components則在組件標(biāo)準(zhǔn)化方面向前邁了一大步。

首先需要說(shuō)明的是這不是一篇 Web Components 的科普文章,如果對(duì)此了解不多推薦先讀《A Guide to Web Components》。 有句古話-“授人以魚(yú),不如授人以漁”,如果把組件比作“魚(yú)”的話,對(duì)于前端開(kāi)發(fā)者而言,W3C組織制定的HTML標(biāo)準(zhǔn)以及瀏覽器廠商的實(shí)現(xiàn)都是“魚(yú)”而 不是“漁”,開(kāi)發(fā)者在需求無(wú)法滿(mǎn)足的情況下通過(guò)現(xiàn)有技術(shù)創(chuàng)造了各種組件,雖然短期滿(mǎn)足了需求但是由于嚴(yán)重缺乏標(biāo)準(zhǔn),導(dǎo)致同一個(gè)組件有成千上萬(wàn)的相似實(shí)現(xiàn)但 它們卻無(wú)法相互重用,這很大程度上制約了組件化的***價(jià)值-重用,Web Components則在組件標(biāo)準(zhǔn)化方面向前邁了一大步。

[[113058]]

現(xiàn)狀與困境

組件化給前端開(kāi)發(fā)帶來(lái)了極大的效率提升,組件化的UI框架也因此層出不窮,從EXTJsYUIjQuery UI ,再到 BootstrapReactRatchetIonic等等等等等等,幾乎每年都有很多新的UI框架冒出來(lái),它們或者借鑒或者顛覆其他已存在的框架。簡(jiǎn)單對(duì)比一下就會(huì)發(fā)現(xiàn)這些框架的很大一部分模塊在功能上是重合的,但也僅僅在功能層面重合,代碼層面確完全不兼容。

接下來(lái)選擇 jQuery UI、KendoUI 以及 Bootstrap 中的Dialog組件從初始化、方法調(diào)用以及事件響應(yīng)方面進(jìn)行簡(jiǎn)單的對(duì)比。

jQuery UI

  1. // 初始化 
  2. $( "#dialog" ).dialog({ 
  3.   dialogClass: "no-close" 
  4. }); 
  5.  
  6. // 顯示 
  7. $( ".selector" ).dialog({ show: { effect: "blind", duration: 800 } }); 
  8.  
  9. // 關(guān)閉事件 
  10. $( ".selector" ).on( "dialogclose",  function (e, ui) { 
  11.   // do something... 
  12. }); 

Kendo UI

  1. // 初始化 
  2. $("#dialog").kendoWindow({ 
  3.   actions: [ "Minimize""Maximize" ] 
  4. }); 
  5.  
  6. // 顯示 
  7. var dialog = $("#dialog").data("kendoWindow"); 
  8. dialog.open(); 
  9.  
  10. // 關(guān)閉事件 
  11. var dialog = $("#dialog").data("kendoWindow"); 
  12. dialog.bind("close",  function (e) { 
  13.   // do something... 
  14. }); 

Bootstrap

  1. // 初始化 
  2. $('#myModal').modal({ 
  3.     keyboard: false 
  4. }); 
  5.  
  6. // 顯示 
  7. $('#myModal').modal('show'); 
  8.  
  9. // 關(guān)閉事件 
  10. $('#myModal').on('hidden.bs.modal'function (e) { 
  11.   // do something... 
  12. }); 

簡(jiǎn)單對(duì)比可以發(fā)現(xiàn),幾乎完全相同的功能在接口層面完全不兼容,導(dǎo)致使用者從某個(gè)實(shí)現(xiàn)切換到另一個(gè)實(shí)現(xiàn)時(shí)需要非常高的成本,這就是目前Web組件化方面無(wú)序和缺乏標(biāo)準(zhǔn)的一個(gè)寫(xiě)照。

再來(lái)看目前瀏覽器“內(nèi)置”組件的現(xiàn)狀,由標(biāo)準(zhǔn)化組織建立 HTML4、HTML5 等各種標(biāo)準(zhǔn),瀏覽器廠商按照標(biāo)準(zhǔn)實(shí)現(xiàn)“內(nèi)置”組件并聲稱(chēng)兼容某某標(biāo)準(zhǔn),開(kāi)發(fā)者遵循標(biāo)準(zhǔn)來(lái)使用組件,使得代碼可以在不同的瀏覽器里通過(guò)相同的方式來(lái)使用組件。

以“內(nèi)置”組件video來(lái)簡(jiǎn)單示例:

  1. // 初始化(直接寫(xiě)<video>標(biāo)簽或者通過(guò)javascript創(chuàng)建) 
  2. var video = document.createElement('video'); 
  3.  
  4. // 播放 
  5. video.play(); 
  6.  
  7. // 播放事件 
  8. video.addEventListener("play"function () { 
  9.    // do something... 
  10.  }, false); 

相比使用各種組件框架來(lái)說(shuō),“內(nèi)置”組件也是由不同的開(kāi)發(fā)者(瀏覽器廠商)開(kāi)發(fā),但是由于遵循了相同的標(biāo)準(zhǔn)使得“內(nèi)置”組件的使用在跨瀏覽器方面的成本大幅降低。

綜上所述,組件框架目前無(wú)序、缺乏標(biāo)準(zhǔn)以及低效復(fù)用方面的問(wèn)題需要通過(guò)組件標(biāo)準(zhǔn)化來(lái)解決,而Web Components則是標(biāo)準(zhǔn)化的一個(gè)很好的選擇。

面向未來(lái)的組件標(biāo)準(zhǔn)

Web Components 的出現(xiàn)給組件標(biāo)準(zhǔn)化帶來(lái)了很好的契機(jī):

  • WEB組件目前仍然依靠各種類(lèi)似"Hack"的方式來(lái)模擬,模擬方式也各有不同,很難統(tǒng)一和標(biāo)準(zhǔn)化,而 Web Components 則直接提供了標(biāo)準(zhǔn)化的組件定義方式,這是組件標(biāo)準(zhǔn)化的基石,使得未來(lái)的組件能夠統(tǒng)一創(chuàng)建、方法調(diào)用、事件監(jiān)聽(tīng)、屬性訪問(wèn)等。
  • 基于標(biāo)準(zhǔn)化的組件定義方式,我們便可以像W3C等標(biāo)準(zhǔn)組織一樣來(lái)定義組件標(biāo)準(zhǔn),無(wú)需再依賴(lài)、等待“內(nèi)置”組件,這也使得我們獲得了“漁”的能力。

以上述的例子為例,未來(lái)可能會(huì)有一小撮人成立某個(gè)組件標(biāo)準(zhǔn)化組織-X,X的職責(zé)就是根據(jù)WEB組件的使用現(xiàn)狀以及潛在的新需求來(lái)規(guī)范一個(gè)組件,包括組件的名稱(chēng)、方法、屬性、事件。

例如《Dialog規(guī)范1.0》

  • 組件名:x-dialog
  • 屬性:title
  • 方法:show hide
  • 事件:hide show

隨后出現(xiàn)的UI框架宣稱(chēng)支持《Dialog規(guī)范》,但在實(shí)現(xiàn)上完全沒(méi)有制約,可以是完全不同的實(shí)現(xiàn)方式、或者更好的性能、更炫的UI,而對(duì)于開(kāi)發(fā)者而言,只需要寫(xiě)如下代碼即可:

  1. // 初始化(<x-dialog/>或者如下代碼) 
  2. var dialog = document.createElement('x-dialog'); 
  3.  
  4. // 獲取和設(shè)置title 
  5. var title = dialog.title; 
  6. dialog.title = title + '-_-'
  7.  
  8. // 顯示 
  9. dialog.show(); 
  10.  
  11. // 關(guān)閉事件 
  12. dialog.addEventListener('hide'function( e ) { 
  13.     // do something... 
  14. }, false); 

當(dāng)用戶(hù)不滿(mǎn)意某個(gè) Dialog 的實(shí)現(xiàn)而需要切換到其他實(shí)現(xiàn)版本時(shí)只需要引入不同的實(shí)現(xiàn)庫(kù),而不再需要重構(gòu)代碼。

跨端的組件標(biāo)準(zhǔn)

集鵠在跨端組件實(shí)踐 - 移動(dòng)時(shí)代的前端一文中提到了跨端組件的概念。

跨端組件的實(shí)現(xiàn)同樣面臨著標(biāo)準(zhǔn)化的問(wèn)題,Web Components 的標(biāo)準(zhǔn)化只規(guī)范接口,而底層的實(shí)現(xiàn)是完全自由的,自由到你可以使用 Web 技術(shù)來(lái)實(shí)現(xiàn)也可以使用 Native技術(shù)。

同樣以 Dialog 為例,開(kāi)發(fā)者可以在 Android 中用 Java 或者在 iOS 中用 Objective C 來(lái)開(kāi)發(fā)聲稱(chēng)兼容 《Dialog規(guī)范1.0》的組件,此時(shí),Web 開(kāi)發(fā)者的那段調(diào)用 Dialog 的代碼不僅僅在 瀏覽器環(huán)境有效,在 Native 依然有效,而且調(diào)用的是 Native 實(shí)現(xiàn),能夠獲得更為出色的性能。

總結(jié)

回顧瀏覽器的發(fā)展歷史,也曾經(jīng)歷混亂和無(wú)序,隨著W3C標(biāo)準(zhǔn)化組織的出現(xiàn)這一局面有了翻天覆地的變化,而對(duì)于Web組件而言,Web Components 的出現(xiàn)才僅僅是這一變化的開(kāi)始,隨著更為復(fù)雜的多端環(huán)境的出現(xiàn),組件標(biāo)準(zhǔn)化還有著更大的想象空間。

責(zé)任編輯:徐川 來(lái)源: fex
相關(guān)推薦

2024-03-14 11:47:25

IIoT物聯(lián)網(wǎng)IT/OT融合

2024-05-14 10:21:14

Web 框架Node.jsJavaScript

2023-12-04 16:22:38

2016-03-28 15:23:07

網(wǎng)絡(luò)服務(wù)器虛擬化

2013-05-21 10:26:47

存儲(chǔ)網(wǎng)絡(luò)以太網(wǎng)虛擬化

2022-08-24 16:29:10

物聯(lián)網(wǎng)

2010-11-09 12:10:20

瞻博網(wǎng)絡(luò)網(wǎng)絡(luò)構(gòu)架Juniper

2015-06-30 14:41:24

平安校園華為

2023-05-05 14:08:48

物聯(lián)網(wǎng)IOT

2020-11-24 10:21:14

人工智能機(jī)器學(xué)習(xí)技術(shù)

2014-03-07 14:35:49

網(wǎng)絡(luò)基礎(chǔ)設(shè)施Open Fabric

2025-01-08 09:01:47

2017-12-19 08:48:06

企業(yè)儲(chǔ)存預(yù)測(cè)

2024-01-17 08:08:48

github?開(kāi)源項(xiàng)目

2013-11-04 14:44:43

2023-12-18 08:30:16

2023-06-02 15:56:49

2022-10-12 15:30:23

LTE-M5G物聯(lián)網(wǎng)

2013-06-24 10:26:44

惠普世界之旅大數(shù)據(jù)存儲(chǔ)

2015-08-07 09:07:45

Java新特性面向未來(lái)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 在线观看成年视频 | 欧美一级免费看 | 国产午夜精品福利 | 99视频在线免费观看 | 成人网址在线观看 | va精品| 97人人澡人人爽91综合色 | 美国黄色一级片 | 欧美激情久久久 | 日韩视频专区 | 色桃网| 成人在线播放网站 | 网站黄色在线免费观看 | 精品久久久久久久久久久 | 黄色大片在线免费观看 | 国产色99精品9i | 国产精品免费小视频 | 91国内精精品久久久久久婷婷 | 精品一区二区电影 | 99久久久久久99国产精品免 | 日日夜夜视频 | 日本a v在线播放 | 国产在线视频99 | 夜夜精品浪潮av一区二区三区 | 成人免费视频 | 青青草视频网站 | 日本久久视频 | 久久狠狠 | 亚洲91精品 | 男人av的天堂 | 日韩精品视频一区二区三区 | 国产女人与拘做受免费视频 | 91国在线| 在线观看亚洲专区 | 大久 | 精品一区二区在线视频 | 久久久久久久久毛片 | 一区二区三区视频在线观看 | 欧美日韩一区二区电影 | 国产精品精品久久久 | 日韩午夜激情 |