【翻译】为什么web components 如此重要

原文链接:https://blog.revillweb.com/why-web-components-are-so-important-66ad0bd4807a#.gq0m0tt0q

这几年,关于 web components 的争论一直不绝于耳。有人说 web components 可以改变我们构建网页的方式,这是为什么呢,是什么让 web components 如此重要?

web component 是一种创建封装的、可复用的网页UI (user interface) 组件的标准化方式。

不是一个新概念

网页组件其实很早之前就存在了,其目的是构建可复用且可移植的代码,这并没有什么新鲜的。

jQuery 插件

jQuery 插件可能是最早流行的对构建复用代码的尝试。我们可以很方便地根据它规定的结构来构建一个 jQuery 插件。但是,它存在一些问题。

不同插件之间经常会造成冲突,而且我们还要搞明白哪些样式需要单独地引入。

AngularJS 指令

接下来就到了指令,它带来了另外一些好处。隔离每个组件的 JS 作用域,以防止命名冲突。通过良好的框架支持,更加清晰地创建一个指令。但问题依然存在,样式仍然需要单独引入,API 复杂且难以学习。

框架组件

目前,以 Angular 2 和 React 为代表的现代框架组件成为了最新的网页组件解决方案。它们基于最新的 JavaScript 特性进行构建,例如classes, 这将提供更加优雅的 API。在 Angular 2 里,开发者可以利用元数据 (metadata) 来装饰组件,以告诉框架其它人应该如何使用这个组件。最后,使用Shadow DOM 为组件提供完整的封装。


为什么组件化?

想要理解为什么 web components 如此重要,必须要先彻底明白组件化的目的何在。

封装

组件在主应用中应该是完全独立的。这样可以增加组件的复用性、可测试性和可靠性,因为组件只需负责它的内部,而无需关心外部应用的状态。

组件的作者和用户都可以轻松地更新组件,而无需担心会影响到应用的其它部分。

拓展性

组件之间应该能够互相拓展,比如 web components 和 其它 DOM 元素。这意味着组件作者不需要重复造轮子,并且轻松地复用某些功能。

组合性

利用一些组件可以构建更复杂的组件甚至是一个完整的应用。减少对 “global” 的依赖可以使架构设计更加良好,bug 出现的概率更小,因为应用(或是混合组件)的每个独立部分都更好地设计过。

复用性

最重要的一点,组件应该具有尽可能少的依赖和定义清晰的 API ,并能够被轻松地复用。



上面提到的三种组件,只有框架组件拥有所有这些特性,但是这还需要使用 Shadow DOM 进行完整的封装。

利用 Shadow DOM 封装组件

Shadow DOM 通过一个不受外界 style 影响的子 DOM 树来提供完整的组件封装。这意味着,组件作者能够彻底控制组件的外观和用户的操作。

虽然,我们可以幸运地使用 Shadow DOM 来封装 Angular 和 React 组件。


为什么使用web components?

如果框架组件已经拥有了这些特性,为什么我们还需要 web components 呢?有个很重要的原因:互操作性。

框架组件确实很棒,但是也就仅限于它们的生态之内。你不能(轻松地)在 React里 使用 Angular 组件,反之亦然。

为什么互操作性很重要?

前端开发社区是个异常活跃,每天都在创造大量新工具、新框架、新库和新技术的地方。但是,这让我们难以紧跟他们的步伐。

作为开发者,我们需要紧跟潮流,改变我们构建应用的方式,使用那些满足市场或用户需求的最新技术。但是在过去,某些项目可能已经因为一些旧技术而纠缠不清,升级它们要付出昂贵的代价,甚至需要重写整个项目。

因为 web components 仅仅构建于 web 标准,所以它们在任何生态中都能运行良好。这带来了许多好处:

  • 互操作性 — 组件超越框架而存在,可以在不同的技术栈中使用
  • 寿命 — 因为组件的互操作性,它们将有更长的寿命,基本不需要为了适应新的技术而重写
  • 移植性 —?组件可以在任何地方使用,因为很少甚至没有依赖,组件的使用障碍要明显低于依赖库或者框架的组件

不仅仅以上这些优点,一个组件还应该具有如 web components 的交叉兼容性,这在不断前进变化的 web 世界里是至关重要的

Web Component 库

web component 的标准暂时还是不稳定的,并且缺少文档、范例、教程,想要入门是一件相当困难的事情,尤其是如果要支持旧式浏览器

流行的 web component 库

因为这些 web component 库,让 web component 的使用变得超级简单,流行的有 PolymerX-Tag 和Bosonic。它们提供了一系列能够被使用和拓展的组件。正如所有流行的项目一样,它们有健全的文档、范例和稳定的社区。

但是,这些库会让组件拥有一个重要的依赖,使用这些组件的用户必须去确保这个依赖的存在。

随着 web component 标准的日益清晰,以及一些优秀的例子的出现,我会鼓励任何人去尝试原版的 web components,并让他们确认所需的特性。

总结

Web components 是如此的重要,因为它让我们应用的构建方式可以迅速地适应变化。我们能在项目里使用令人兴奋的前端新技术,只要它能满足市场或客户的需求,而不需要重构我们庞大的应用。

web components 是基于最新的 web 标准,所以它的的互操作性,可以让我们的代码拥有更长的寿命。最终,因为更少的依赖和前置条件,我们的组件可以满足更多人的需求。

Web components 万事俱备只欠东风,让我们马上就使用吧。我正在努力写更多的例子和教程,来帮助社区更快地接受 web components。

联系我 @RevillWeb 。

时间: 2024-12-14 08:36:25

【翻译】为什么web components 如此重要的相关文章

Facebook React 和 Web Components(Polymer)对比优势和劣势

目录结构 译者前言 Native vs. Compiled 原生语言对决预编译语言 Internal vs. External DSLs 内部与外部 DSLs 的对决 Types of DSLs - explanation DSLs 的种类 - 解释 Data binding 数据绑定 Native vs. VM 原生对决 VM(虚拟机) 译者前言 这是一篇来自 StackOverflow 的问答,提问的人认为 React 相比 WebComponents 有一些"先天不足"之处,列举

【转】Facebook React 和 Web Components(Polymer)对比优势和劣势

原文转自:http://segmentfault.com/blog/nightire/1190000000753400 译者前言 这是一篇来自 StackOverflow 的问答,提问的人认为 React 相比 WebComponents有一些“先天不足”之处,列举如下: 原生浏览器支持 原生语法支持(意即不把样式和结构混杂在 JS 中) 使用 Shadow DOM 封装样式 数据的双向绑定 这些都是确然的.不过他还是希望听听大家的看法,于是就有了这篇精彩的回答. 需要说明的是,这篇回答并没有讨

Web Components初探

本文来自 mweb.baidu.com 做最好的无线WEB研发团队 是随着 Web 应用不断丰富,过度分离的设计也会带来可重用性上的问题.于是各家显神通,各种 UI 组件工具库层出不穷,煞有八仙过海之势.于是 W3C 坐不住了,大手一挥,说道:不如让我们统一一个 Web Components 的标准吧怎么样. Web Components 的核心思想就是把 UI 元素组件化,即将 HTML.CSS.JS 封装起来,使用的时候就不需要这里贴一段 HTML,那里贴一段样式,最后再贴一段 JS 了.一

一个使用 Web Components 的音乐播放器: MelodyPlayer

先上效果预览: Web Components 首先,什么是 Web Components ? MDN 给出的定义是: Web Components 是一套不同的技术,允许您创建可重用的定制元素(它们的功能封装在您的代码之外)并且在您的web应用中使用它们. ... ... 实现web component的基本方法通常如下所示: 使用 ECMAScript 2015 类语法创建一个类,来指定web组件的功能(参阅类获取更多信息). 使用 CustomElementRegistry.define()

使用CLI 3 创建发布Web Components

本文翻译自:codementor 翻译不当之处,欢迎指正交流 Web Components是web平台的未来吗?关于这一问题支持和反对的观点有很多.事实上浏览器对Web Components的支持正在逐渐形成,并有越来越多的工具.资源和IT从业人员正在致力于创建发布自己的Web Components. Vue.js是一个创建Web Components的很好的工具,在更新的Vue CLI 3和@vue/web-component-wrapper中甚至更加简单.这篇文章中,我们会讨论为什么你需要创

web components折腾记

了解web组件化开发是最初是从了解reactjs开始,但是一直对框架有抵触情绪,另外喜欢不走寻常路,喜欢简单好用的东西,越简单越好,进而开始研究web components.web components这个技术因为太新,浏览器的支持还不完善,还没流行,也没啥中文资料参考,就是官方英文网站貌似都没看到有文档说明,折腾起来甚是费劲.最开始对web components技术还很懵懂,只知道它由几个子技术组成,包括Custom Elements和Shadow DOM还有HTML Imports等等,于是

Web Components之Custom Elements

什么是Web Component? Web Components 包含了多种不同的技术.你可以把Web Components当做是用一系列的Web技术创建的.可重用的用户界面组件的统称.Web Components使开发人员拥有扩展浏览器标签的能力,可以自由的进行定制组件.但截至本文时间,Web Components依然是W3C工作组的一个草案,并为被正式纳入标准,但这并不妨碍我们去学习它. Web组件 何为Web组件?Web组件相对于Web开发者来说并不陌生,Web组件是一套封装好的HTML,

The state of Web Components

Web Components have been on developers’ radars for quite some time now. They were first introduced by Alex Russell atFronteers Conference 2011. The concept shook the community up and became the topic of many future talks and discussions. In 2013 a We

WEBAPP组件化时代, Web Components

polymer   ==> http://docs.polymerchina.org/ angular   ==> http://www.ngnice.com/docs/guide scrat    ==> http://scrat-team.github.io/#!/index component ==> http://component.io/ 前端组件化以及要到来了. 组件化不是新概念,也不是新技术,近年来的环境成熟 推动了 组件化的进步. 前端经常有重复UI界面场景,所以组