微前台与web components

作者 : 开心源码 本文共2197个字,预计阅读时间需要6分钟 发布时间: 2022-05-12 共231人阅读

微前台是thoughtworks在2016年提出的 Micro?Frontends extending the microservice idea to frontend development一文阐述了整个思想,该文也被翻译成为中文版本。可以说,我看到文章当时,angular、react、vue三个框架同时使用的确吸引了我一下,但是我相信不会有团队这么折磨自己。微前台的这种“元框架(meta framework)”技术栈不是仅仅满足于多个现代前台框架的切换,而是满足新老框架的更替和迭代。我举个非常简单的栗子。假如前台框架出现“断崖式的更新”,像angular1和angular2。我们需要在保证前台项目生产可行的情况下,怎样做到迭代更新,微前台是其中一种方案,而微前台有非常多种实现方式,web components又是其中一种实现方案。

微服务

在认真理解微前台之前,首先要理解的是微服务。

微服务的概念是由现为ThoughtWorks公司的首席科学家Martin Fowler提出的,目的就是后台服务的独立部署,独立开发,它的主要特点是组件化、松耦合、自治、去中心化。微前台则是在2016年thoughtworks技术雷达中提出,把后台概念延伸到前台,也是相似的目标。

  • 技术无关
  • 隔离团队代码
  • 建立各团队的前缀
  • 本地浏览器特性优先于自己设置 API
  • 构建自适应网站

微前台实现方案

它的实现方案有很多种。这里引用Phodal的微前台的那些事儿中的一张图说明实现方式的选型情况。

实现方案

因为在实战项目当中,我们都是有交付压力的而且客户体验肯定是我们想要的。所以最终的选择方案只剩下两种—-webComponent和iFrame。其余几种方案大家可以在Phodal的博客中理解,这里不再赘述。

Web Components

在前台组件化横行的今天,组件化的确极大的提升了开发效率,代码复用量,系统稳固性。浏览器未来的发展方向会是除了H5标签外,还有自己设置标签,和现在的Vue、React一样。但是自己设置标签的编译不再依赖Vue或者者React的运行时和编译时,浏览器原生支持自己设置组件的注册。

它包含了4个概念,未来的组件化标准 —— 浅尝Web Components中有详情。

  • Shadow DOM
  • Custom Elements
  • HTML Templates
  • HTML Imports

HTML Templates很简单,是<template/>,它的content可以被随时提出。HTML已经被渐渐放弃。

Custom Elements即是自己设置标签,customElements.define可以用来注册这个自己设置组件。第一个参数是它的名字,第二个参数是个HTMLElement的类对象,组件内部的功能可以其中实现。具体看下面这个栗子。

<!DOCTYPE html><html><head>  <meta charset="utf-8">  <title>Simple template</title>  <script src="main.js" defer></script></head><body>  <h1>Simple template</h1>  <template id="my-paragraph">    <style>      p {        color: white;        background-color: #666;        padding: 5px;      }    </style>    <p><slot name="my-text">My default text</slot></p>  </template>  <my-paragraph>    <span slot="my-text">Let's have some different text!</span>  </my-paragraph>  <my-paragraph>    <ul slot="my-text">      <li>Let's have some different text!</li>      <li>In a list!</li>    </ul>  </my-paragraph></body></html>
// main.jscustomElements.define('my-paragraph',  class extends HTMLElement {    constructor() {      super();      const template = document.getElementById('my-paragraph');      const templateContent = template.content;      this.attachShadow({mode: 'open'}).appendChild(        templateContent.cloneNode(true)      );    }  });const slottedSpan = document.querySelector('my-paragraph span');

Shadow DOM 是非常重要的概念,主要是实现变量的隔离,组件要做到独立不干扰。

Shadow DOM和 Virtual DOM是不一样的两个概念。Virtual DOM是基于Javascript实现的dom操作的中间层。所有的数据绑定事件会在中间层做diff再实施到DOM上。而

如今的前台框架中,Polymer和stencil都是web Components的编译器,实现数据驱动等友好开发体验。当然现在React和Vue也出现了web Components的外层封装支持。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 微前台与web components

发表回复