Polymer 和 Web 组件是近来非常热门的话题,由于这个生态系统发展迅速,开发者往往很难掌握所有最新的变化。
在 Chrome 开发者峰会上的演讲中,Polymer 团队的工程经理 Matt McNulty 解释了什么是 Polymer,并概述了 Polymer 1.0 的发展路线图。
什么是 Polymer?
首先,什么是 Polymer?
Polymer 是一个库,可帮助您基于网络组件构建元素和应用。Web 组件是一套尖端的新标准,允许开发者使用自己的自定义元素扩展 HTML 词汇。

由于 Web 组件设计为浏览器的新基元,这意味着它们功能非常强大,但级别也很低,使用它们需要大量代码。

Polymer 通过“添加”语法来简化 Web 组件的运行。它减少了您需要编写的样板代码量,并且添加了声明式样式,因此创建 Web 组件就像编写 HTML 一样简单。
聚合物实验
Polymer 最初只是一项实验,目的在于了解我们能否 polyfill 实现 Web 组件标准,并在这些技术在所有浏览器中推出之前获得开发者的反馈。随着越来越多的开发者开始使用 Polymer,它从简单的 polyfill 变成了具备各种生产力功能(数据绑定、属性更改观察器、自动节点查找等)的实际库。但所有实验都有结果,那我们是如何做到的呢?

虽然许多开发者表示他们喜欢在 Polymer 中使用 Web 组件的表现力和生产力,但他们也对性能和整体复杂性表达了担忧。
这凸显了 Polymer 一直以来的自然张力:通过尝试推动网络平台向前发展,同时也创造了可供开发者信赖的生产价值。
即将发生的变更
Polymer 团队仔细研究了该库的每项功能,目的是打造出一个更精简、可直接用于生产环境的版本,让开发者能够放心使用。
层
Polymer 已被重构为一系列层。核心功能快速、精简,而更高级的功能将由用户选择启用。对于大多数应用场景,核心功能应能满足开发者的需求。

简化的数据绑定
Polymer 的数据绑定系统也针对性能进行了显著优化。按照分层方法,双向绑定现已成为可选功能,默认为单向绑定。此外,已发布的属性类型已明确指定,属性更改现在会触发一个事件,以帮助不同库中的元素更轻松地进行通信。

更精简的 Shadow DOM
Shadow DOM polyfill 是一项了不起的工程壮举。它旨在全面且符合规范,这对于全面测试平台原语非常重要,但遗憾的是,对于 Polymer 未使用的功能,它引入了许多性能瓶颈。
下一版 Polymer 将采用不同的方法,采用只对 Polymer 所需内容进行填充的填充码式层。

现有的 polyfill 将仍然存在于常规的非 Polymer 网络组件中。
迁移至 webcomponents.org
说到 polyfill,它们同样有新家园。目前,许多开发者对 Polymer 和 Web Components 之间的关系感到困惑。有些人认为您必须使用全部 Polymer 才能使用 Web Components,而事实上您只需要用到 polyfill。
为了更明确地说明上述区别,我们即将将 polyfill 移至 webcomponents.org,并将它们重命名为 webcomponents.js
。

此举旨在帮助其他库作者充分利用 polyfill,不会造成任何混淆。Polymer 团队将继续为 polyfill 做出贡献,但希望此次变更能够使其成为社区的共享资源。
成果
那么,所有这些变化会产生什么结果呢?
速度
在 Chrome 上,Polymer 的速度提高到了原来的 5 倍,在 Safari 上,其速度提高到了原来的 8 倍。

文件大小
文件大小也缩减了 87%,从 123KB 缩减到 15KB(gzip 压缩后 6KB)。

路线图
下一版本将会进行一些 API 破坏性更改,以新版本号 (0.8) 表示,但该团队希望明确指出这不是重写。将当前项目从 Polymer 0.5 移动到 0.8 应该非常简单。
Polymer 团队还制定了路线图,以便开发者更清楚地了解即将发布的版本。

0.8 预览版现已作为 GitHub 上的一个分支提供(不过它仍处于积极开发阶段,相关文档尚不完善)。0.9 官方测试版计划于 2015 年第 1 季度推出,而 1.0 则将于第 2 季度推出。
实验已结束
随着 Polymer 最近的所有变化,它背后的团队正在为使 Web 组件成为每个开发者堆栈中不可或缺的一部分奠定基础。如果您刚开始接触 Web 组件,现在就是了解并熟悉这些变革性技术的好时机。如果您已经在使用组件(和 Polymer),那么前景确实是一片大好。请密切关注 Polymer 博客,了解所有最新动态;如有问题或意见,请注册 Polymer 邮寄名单。祝您编程愉快!