为什么与其他方法相比,聚合物项目(Web组件)还不出名?



聚合物版本2已经有一段时间了,但是

  • 很少有人谈论它
  • 很少有开发人员在他们的博客中写到它
  • 很少有开发人员分享他们的工作流程和经验

Polymer Project由Google提供支持,其背后的团队似乎拥有无可挑剔的哲学。

除了缺乏浏览器支持外,Polyfills仍然做得很好。

顺便说一下,似乎人们不喜欢打开它并使用它,尽管 Web 组件是 Web 的标准。

对我来说,有一个很大的原因,应该有一个解释。

我认为这与Stackoverflow有关,但是我知道很多人不喜欢这种问题。

首先,自 2017 年 5 月正式发布 Polymer 2 以来,它实际上是一项非常新的技术。

其次,它得到谷歌支持的事实并不一定是一个优势:想要依赖这家公司产品的Web开发人员可能更喜欢Angular,这也是由谷歌推广的,并且更加成熟和有名。

第三,它建立在Web组件标准之上的事实也不是一个优势:

  • polyfill 正在完成这项工作(尽管并非总是如此),但它们的使用增加了一些复杂性,并且可能会在自定义元素和 Shadow DOM 的本机和多填充实现之间引入性能热差距。

  • 了解自定义元素和影子 DOM 的开发人员可能更喜欢创建VanillaWeb 组件,因为它们变得非常容易设计,这要归功于......谷歌 :-)这正是这些新Web标准的目的。

第四,UI元素选择的材料设计风格可能并不适合每个人的口味。

第五,版本 2 与版本 1 不完全兼容,这可能会给新手带来一些困惑,给那些投资短暂版本 1 的人带来一些失望。

最后,人们可能会质疑Polymer是一个长期框架,还是只是支持Google提出的早期标准(Custom Elements和Shadow DOM)的推出并促进其采用的一种方式。


附言

以上几点只是假设。

就我个人而言,我在几个月内开始使用Polymer 1,然后我切换到VanillaCustom Elements。

因为除了材料设计或引导或其他设计框架之外,更难实现

Bootstrap很容易实现,没有其他事情可以做,比如为每个组件添加JavaScript,每个组件都有自己的风格

但毕竟聚合物是一个很好的项目,谁有更好的设计技能,而引导和其他不需要更高的设计技能

尽管 Polymer 越来越接近原生的 Vanilla Web 组件,但并非所有浏览器都完全支持它们,这使得它使用起来并不实用。
我个人喜欢这样的想法,即这个(聚合物)有一天可能会以某种程度无缝地转移到原生组件而结束。

在与其他开发人员的谈话和对话中,我还了解到 React 在美国的规模更大,而欧洲的开发人员倾向于选择聚合物。究竟为什么会这样,我真的不知道,但我相信有很多因素会影响它,并且无法确定这些库之一的特定缺点或优势。

正如Supersharp已经提到的,与其他库(如Angular和React)相比,Polymer仍然是相当新的。但是开发人员社区每年都在增长,这在哥本哈根举行的上一届聚合物峰会上得到了特别强调,当时一切都与"平台"有关。事实证明,这是社区,网络标准和周围的一切,而不是我感到非常愉快的完全聚合物崇拜。


虽然Polymer可能得到了谷歌的支持,但从事这项工作的团队相对较小。Youtube刚刚切换到100%聚合物,我发现实现这一目标的团队比开发平台的实际团队要大得多。(我们在这里谈论的是少数人)。

我在2017年中期使用Polymer 2进行小型演示项目(RC2,不是最终项目),很好,很愉快。在我看来,它比 Angular (1.6) 更容易,但我没有太多经验。

  • 我喜欢为每个问题创建一个组件的想法
  • 易于拆分数据(属性)和模板
  • 轻松使用活动

缺点

  • CSS 规则非常直观

聚合物 2 示例元素

<dom-module id="input-array-element">
<template>
<h3>Inputs Array</h3>
<template is="dom-repeat" items="{{technology}}">
<input type="text" value="{{item.label::input}}">[[item.label]]<br/>
</template><br>
</template>
<script>
class InputArrayElement extends Polymer.Element {
static get is() { return 'input-array-element'; }
static get properties() {
return {
technology : {
type: Array,
value: [
{id:"php", label:"PHP", selected:false},
{id:"js", label:"Javascript", selected:false},
{id:"html", label:"HTML", selected:false},
{id:"css", label:"CSS", selected:false},
],
notify: true
}
}
}
ready() {
super.ready();
this.addEventListener("technology-changed", function(e){
console.log(e); 
});
}
}
window.customElements.define(InputArrayElement.is, InputArrayElement);        
</script>
</dom-module>

最新更新