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

Web Components - 面向未來的組件標準

移動開發
對于前端開發者而言,W3C組織制定的HTML標準以及瀏覽器廠商的實現都是“魚”而 不是“漁”,開發者在需求無法滿足的情況下通過現有技術創造了各種組件,雖然短期滿足了需求但是由于嚴重缺乏標準,導致同一個組件有成千上萬的相似實現但 它們卻無法相互重用,這很大程度上制約了組件化的最大價值-重用,Web Components則在組件標準化方面向前邁了一大步。

首先需要說明的是這不是一篇 Web Components 的科普文章,如果對此了解不多推薦先讀《A Guide to Web Components》。 有句古話-“授人以魚,不如授人以漁”,如果把組件比作“魚”的話,對于前端開發者而言,W3C組織制定的HTML標準以及瀏覽器廠商的實現都是“魚”而 不是“漁”,開發者在需求無法滿足的情況下通過現有技術創造了各種組件,雖然短期滿足了需求但是由于嚴重缺乏標準,導致同一個組件有成千上萬的相似實現但 它們卻無法相互重用,這很大程度上制約了組件化的***價值-重用,Web Components則在組件標準化方面向前邁了一大步。

[[113058]]

現狀與困境

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

接下來選擇 jQuery UI、KendoUI 以及 Bootstrap 中的Dialog組件從初始化、方法調用以及事件響應方面進行簡單的對比。

jQuery UI

  1. // 初始化 
  2. $( "#dialog" ).dialog({ 
  3.   dialogClass: "no-close" 
  4. }); 
  5.  
  6. // 顯示 
  7. $( ".selector" ).dialog({ show: { effect: "blind", duration: 800 } }); 
  8.  
  9. // 關閉事件 
  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. // 關閉事件 
  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. // 關閉事件 
  10. $('#myModal').on('hidden.bs.modal'function (e) { 
  11.   // do something... 
  12. }); 

簡單對比可以發現,幾乎完全相同的功能在接口層面完全不兼容,導致使用者從某個實現切換到另一個實現時需要非常高的成本,這就是目前Web組件化方面無序和缺乏標準的一個寫照。

再來看目前瀏覽器“內置”組件的現狀,由標準化組織建立 HTML4、HTML5 等各種標準,瀏覽器廠商按照標準實現“內置”組件并聲稱兼容某某標準,開發者遵循標準來使用組件,使得代碼可以在不同的瀏覽器里通過相同的方式來使用組件。

以“內置”組件video來簡單示例:

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

相比使用各種組件框架來說,“內置”組件也是由不同的開發者(瀏覽器廠商)開發,但是由于遵循了相同的標準使得“內置”組件的使用在跨瀏覽器方面的成本大幅降低。

綜上所述,組件框架目前無序、缺乏標準以及低效復用方面的問題需要通過組件標準化來解決,而Web Components則是標準化的一個很好的選擇。

面向未來的組件標準

Web Components 的出現給組件標準化帶來了很好的契機:

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

以上述的例子為例,未來可能會有一小撮人成立某個組件標準化組織-X,X的職責就是根據WEB組件的使用現狀以及潛在的新需求來規范一個組件,包括組件的名稱、方法、屬性、事件。

例如《Dialog規范1.0》

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

隨后出現的UI框架宣稱支持《Dialog規范》,但在實現上完全沒有制約,可以是完全不同的實現方式、或者更好的性能、更炫的UI,而對于開發者而言,只需要寫如下代碼即可:

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

當用戶不滿意某個 Dialog 的實現而需要切換到其他實現版本時只需要引入不同的實現庫,而不再需要重構代碼。

跨端的組件標準

集鵠在跨端組件實踐 - 移動時代的前端一文中提到了跨端組件的概念。

跨端組件的實現同樣面臨著標準化的問題,Web Components 的標準化只規范接口,而底層的實現是完全自由的,自由到你可以使用 Web 技術來實現也可以使用 Native技術。

同樣以 Dialog 為例,開發者可以在 Android 中用 Java 或者在 iOS 中用 Objective C 來開發聲稱兼容 《Dialog規范1.0》的組件,此時,Web 開發者的那段調用 Dialog 的代碼不僅僅在 瀏覽器環境有效,在 Native 依然有效,而且調用的是 Native 實現,能夠獲得更為出色的性能。

總結

回顧瀏覽器的發展歷史,也曾經歷混亂和無序,隨著W3C標準化組織的出現這一局面有了翻天覆地的變化,而對于Web組件而言,Web Components 的出現才僅僅是這一變化的開始,隨著更為復雜的多端環境的出現,組件標準化還有著更大的想象空間。

責任編輯:徐川 來源: fex
相關推薦

2024-05-14 10:21:14

Web 框架Node.jsJavaScript

2023-12-04 16:22:38

2024-03-14 11:47:25

IIoT物聯網IT/OT融合

2016-03-28 15:23:07

網絡服務器虛擬化

2022-08-24 16:29:10

物聯網

2010-11-09 12:10:20

瞻博網絡網絡構架Juniper

2013-05-21 10:26:47

存儲網絡以太網虛擬化

2015-06-30 14:41:24

平安校園華為

2023-05-05 14:08:48

物聯網IOT

2020-11-24 10:21:14

人工智能機器學習技術

2017-12-19 08:48:06

企業儲存預測

2014-03-07 14:35:49

網絡基礎設施Open Fabric

2025-01-08 09:01:47

2024-01-17 08:08:48

github?開源項目

2023-06-02 15:56:49

2013-11-04 14:44:43

2023-12-18 08:30:16

2022-10-12 15:30:23

LTE-M5G物聯網

2020-07-17 07:51:53

人工智能技術數據

2013-06-24 10:26:44

惠普世界之旅大數據存儲
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久亚洲综合 | 视频一区二区在线 | 精品国产一区二区三区久久久四川 | 免费观看a级毛片在线播放 黄网站免费入口 | 高清成人免费视频 | 国产精品视频网 | 精品亚洲视频在线 | 国产一级淫片免费视频 | 亚洲一区二区三区在线视频 | 欧美福利| 伊人精品视频 | 日韩在线小视频 | 国产精品久久久久久婷婷天堂 | 国产美女永久免费无遮挡 | 久久精品青青大伊人av | 国产精品日韩高清伦字幕搜索 | 91高清在线观看 | 伊人免费网 | 国产精品美女www爽爽爽 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 在线观看免费高清av | 国产精品欧美一区二区 | 精品欧美一区二区中文字幕视频 | 亚洲一区二区久久 | 国产在线不卡视频 | 欧美精品一区二区免费 | 91九色在线观看 | 精品真实国产乱文在线 | 国产午夜视频 | 性高湖久久久久久久久3小时 | 在线精品一区二区三区 | 91www在线观看| 九九九久久国产免费 | 一区福利视频 | 午夜视频在线 | 国产成人精品一区二区三区四区 | 色先锋影音 | 99精品网| 成人依人 | 国产亚洲精品精品国产亚洲综合 | 日本小视频网站 |