[TOC]
> 技术边界:
需要有按需加载和代码分割的能力,Vue 使用了异步组件和 webpack 的代码分割功能来实现远程加载组件。
> 特性:
- 提高初始加载速度:只加载用户需要的组件,异步加载其他组件
- 组件封装和复用:远程组件可以被多个应用复用
- 解耦组件:远程组件的开发与使用可以独立进行
> 使用场景:
- 页面组件复杂:拆分为远程子组件按需加载,加快初始加载
- 组件复用:一些公共组件作为远程组件,供不同应用使用
- 第三方组件:加载第三方提供的远程组件
> 应用方法:
1. 编写远程组件并打包为一个 JS 文件,如 DemoButton.js
2. 在应用中注册异步组件,指向远程组件的 JS 文件
3. 当需要使用该组件时,会异步加载对应的 JS,并注册组件
4. 应用组件就可以正常使用远程组件了
> 项目结构:
- components 目录存储本地组件
- utils/modules 目录存储远程组件的 JS 文件
- router/views 等调用远程组件的地方,使用异步组件方式加载
> 实施关键流程:
1. 确定哪些组件作为远程组件开发和打包
2. 编写远程组件,并构建为 JS 文件
3. 应用中注册与远程组件对应的异步组件
4. 在需要使用的地方,调用异步组件,触发远程组件加载
5. 监控包体积和加载性能,优化远程组件的加载方式
6. 维护版本和兼容性,管理对远程组件的依赖
# 示例
```
vue
// 远程组件 DemoButton.js
export default {
name: 'DemoButton',
props: {
text: String
},
template: '<button>{{ text }}</button>'
}
// 应用根组件 App.vue
<template>
<div id="app">
<async-button text="Load DemoButton" @click="loadDemoButton"/>
<DemoButton v-if="DemoButton" text="Demo Button"/>
</div>
</template>
<script>
// 异步组件指向远程组件
const AsyncButton = () => ({
component: import('./utils/DemoButton.js'),
delay: 200, // 毫秒内允许加载,否则显示默认内容
timeout: 3000 // 超时时间
})
export default {
components: {
AsyncButton
},
data() {
return {
DemoButton: null
}
},
methods: {
loadDemoButton() {
this.DemoButton = AsyncButton // 注册远程组件
}
}
}
</script>
```
分析:
- 我们提供了 DemoButton.js 作为远程组件,包含一个按钮组件
- 应用根组件中,首先注册了 AsyncButton 异步组件,它指向远程组件
- 当点击 AsyncButton 时,调用 loadDemoButton 方法,这会触发远程组件加载
- 一旦远程组件加载完成,DemoButton 组件就会注册为 DemoButton,并显示出来
- 这样我们只在需要时才加载远程组件,实现了按需加载
这个示例演示了如何在 Vue 应用中:
1. 构建远程组件和打包为 JS 文件
2. 使用异步组件注册远程组件
3. 在需要时调用异步组件,触发远程组件加载
4. 注册远程组件并使用
这是使用 Vue 远程加载组件的典型实践过程。通过此示例,您可以进一步理解异步组件的工作原理,以及如何在项目中实际应用远程组件。
- 系统设计
- 需求分析
- 概要设计
- 详细设计
- 逻辑模型设计
- 物理模型设计
- 产品设计
- 数据驱动产品设计
- 首页
- 逻辑理解
- 微服务架构的关系数据库优化
- Java基础架构
- 编程范式
- 面向对象编程【模拟现实】
- 泛型编程【参数化】
- 函数式编程
- 响应式编程【异步流】
- 并发编程【多线程】
- 面向切面编程【代码复用解耦】
- 声明式编程【注解和配置】
- 函数响应式编程
- 语法基础
- 包、接口、类、对象和切面案例代码
- Springboot按以下步骤面向切面设计程序
- 关键词
- 内部类、匿名类
- 数组、字符串、I/O
- 常用API
- 并发包
- XML
- Maven 包管理
- Pom.xml
- 技术框架
- SpringBoot
- 项目文件目录
- Vue
- Vue项目文件目录
- 远程组件
- 敏捷开发前端应用
- Pinia Store
- Vite
- Composition API
- uniapp
- 本地方法JNI
- 脚本机制
- 编译器API
- 注释
- 源码级注释
- Javadoc
- 安全
- Swing和图形化编程
- 国际化
- 精实或精益
- 精实软件数据库设计
- 精实的原理与方法
- 项目
- 零售软件
- 扩展
- 1001_docker 示例
- 1002_Docker 常用命令
- 1003_微服务
- 1004_微服务数据模型范式
- 1005_数据模型
- 1006_springCloud
- AI 流程图生成
- Wordpress_6
- Woocommerce_7
- WooCommerce常用的API和帮助函数
- WooCommerce的钩子和过滤器
- REST API
- 数据库API
- 模板系统
- 数据模型
- 1.Woo主题开发流程
- Filter
- Hook
- 可视编辑区域的函数工具
- 渲染字段函数
- 类库和框架
- TDD 通过测试来驱动开发
- 编程范式对WordPress开发
- WordPress和WooCommerce的核心代码类库组成
- 数据库修改
- 1.WP主题开发流程与时间规划
- moho
- Note 1
- 基础命令