Elena:渐进式 Web 组件的新解法
Progressive Web Components

我与 Web Components 打交道近十年,深知其痛点:布局偏移、无样式闪烁、服务端渲染支持差等。尽管问题频发,我仍坚信它是设计系统的最佳基石。问题不在于模型本身,而在于构建方式。为此,我开源了 Elena,一个仅 2.6kB 的轻量级库。它倡导渐进式增强:先加载 HTML 和 CSS 确保基础渲染,再用 JavaScript 添加交互。Elena 支持三种组件类型,原生兼容服务端渲染,无需框架依赖,完美解决跨框架移植难题,让开发者回归 Web 标准。
问题不在于模型本身,而在于我们构建它们的方式。
- hyperhello
曾经做过一件挺有趣的事:利用 custom elements API 创建一个自定义标签 <element-template>。当页面遇到 <element-template tag=what-name></element-template> 时,它会检查内部,找到所有的 <template></template>、<script></script> 和 <style></style> 标签,然后用该标签名构建一个新的自定义元素,并赋予其全部能力。这很酷,但算不上特别简单。
另一个绝妙的技巧是在页面上添加一个 mutation observer,用于检测新创建的 <template> 标签。(template 标签会解析内部的 HTML,但不会在页面上实际渲染出来)。一旦 observer 发现 template 标签,就可以将其升级,赋予新功能,比如替换其他标签的内容。确实有办法驯服 Web 组件,让它们变得极易使用。
- zelphirkalt
HTML + CSS 优先,JS 仅用于增强体验,这个思路听起来很棒,而且本该如此。不过我好奇的是,现实中会怎样发展?使用这个库的 Web 开发者是否会努力在可能的情况下保持核心功能不依赖 JS,并利用他们使用的任何 Web 框架提供额外的视图?还是说,他们会把核心功能实现为