实际上,许多大企业往往并不在社交媒体平台如 Twitter、Reddit 等上积极推广 Web 组件或者提供相关教程 。与此相对的是,社交媒体上却有大量技术达人在紧密跟踪 React 的每个小版本更新和其生态系统的新动态 。这一现象的背后逻辑相当直接:大企业通常更注重内部沟通,而在公开场合相对低调;反观中小企业和自由职业者,他们则相对更活跃于社交媒体 。因此,如果 Web 组件在企业内部获得了更高的接受度,单凭频繁浏览 Twitter 是难以察觉的 。
那么,大型企业为何如此偏爱 Web 组件呢?首先,基于 Web 组件构建的设计系统具有跨环境的可运行性 。在一个大型企业中,前端技术栈可能包括 React、Angular、Ember 以及静态 HTML,而这些都需要与企业的主题和品牌保持一致性 。对于初创企业而言,进行大规模的代码重构或许是一种有益的尝试,但在企业层面,这样做并不现实 。
因为企业通常维护着庞大的代码库,并且需要在更长的时间尺度上进行规划,这促使了其做出与众不同的技术决策 。从我的观点来看,这正是企业更倾向于使用 Web 组件的根本原因:稳定性和可持续性 。
考虑到常规的 React 代码库,你可能发现更新任何依赖项(例如 React Router、Redux 或 React 本身)会触发一系列破坏性变更,这要求你花费数周时间对代码进行重构 。在这种环境下,即使一个细微的变更也可能激活 Hyrum 法则,影响数千个组件,甚至简单的小版本升级也需要数周的全面测试、验证和文档更新 。在这个场景中,React 的小版本升级相当于一个复杂问题,而大版本升级则可能引发一场危机 。
Hyrum 法则:如果一个 API 的实现细节发生了变化,可能会导致一些用户的程序出现问题,因为他们已经习惯了之前的行为 。因此,API 的设计者和维护者需要考虑到用户的期望和依赖,尽量保持 API 的稳定性和兼容性 。相反,Web 平台的向后兼容性为稳定性提供了保障 。举例来说,1996 年发布的 Space Jam 网站至今依然可运行 。Web 组件强化了这种稳定性,对于那些不能频繁进行前端重写的企业来说,这是一个重要优势 。
当你采用 Web 组件后,其功能和特性保持稳定,包括 Shadow DOM 的样式隔离等它所有的微妙之处也都是如此 。你可以将代码逻辑委托给浏览器来执行,从而长期减少维护和验证的需求 。事实上,这样做就相当于把维护的责任交给了 google、Apple 和 Mozilla 等浏览器厂商 。
与 Web 平台的稳定性相符,企业通常也更加稳定、谨慎,并且注重规避风险 。因此,可以理解为什么Web组件在企业界得到了如此广泛的应用和欢迎 。
Web 组件的局限性
在讨论 Web 组件的优势的同时,我们也需要深入了解其不足 。以下是 Web 组件的几个主要局限性:
- 服务端渲染(SSR):当前在 Web 组件领域,服务端渲染仍然是一个悬而未决的问题 。尽管存在如 Shadow DOM 这样的声明式解决方案,但这只解决了问题的一部分 。至今尚无统一标准明确如何在服务器端渲染 Web 组件,导致各大框架在这方面的实践各异 。例如,Lit SSR 尚处于“Lit 实验”的研发阶段 。只有当未来服务器端能渲染多种 Web 组件框架,且确保这些框架能顺利集成和重新渲染,我才会认为这个问题解决了 。然而,解决这个问题可能还需要数年的时间 。
- 可访问性:在主文档中的 ARIA 属性可能无法轻易地引用或与 Shadow DOM 内部的元素进行交互,并且处理对话框和焦点也颇具复杂性 。因此,如果你希望不损害可访问性,必须从设计之初就仔细规划你的组件结构 。尽管有许多正在进行的工作试图解决这个问题,但必须承认,到了 2023 年,这方面仍面临很多挑战 。
【Web 组件究竟有何优势,我为何要采用?】总结
不论你是选择立即采用 Web 组件,还是选择观望,或是打算几年后再重新评估,届时网络标准和功能可能会更加完善 。
我个人对 Web 组件持积极态度,但也明白这并非人人共识 。我的目的并不是要过分强调其重要性,只是认为它是开发者工具集中的一个有用组成部分 。关键在于如何最大化其优势,同时规避潜在不足 。
推荐阅读
- 20年前的台词,居然帮国家识破间谍,“小品女王”赵丽蓉究竟多牛
- 职场求生指南:事务与人际关系,究竟该专攻哪个?
- 黄磊一家的塌房,究竟扯下了娱乐圈内,多少“美好”人设的遮羞布
- 算法复杂度的最坏、平均和最好情况究竟意味着什么?
- 深夜发文疑似崩溃,究竟是谁毁了胡歌?
- 新歌《翩翩》引争议,刀郎再次火上热搜,新歌究竟打了谁的脸?
- 八万八买石头?和田原籽手串究竟贵在哪儿?
- 控制李小冉三年,限制殷桃拍戏,孙东海究竟“糟蹋”了多少女明星
- OpenHarmony组件复用示例
- Django和Flask:Python Web开发的不同选择