logologo
指南
实践
配置
插件
案例
博客
生态
Module Federation Examples
Practical Module Federation
Zephyr Cloud
Nx
简体中文
English
指南
实践
配置
插件
案例
博客
Module Federation Examples
Practical Module Federation
Zephyr Cloud
Nx
简体中文
English
logologo

开始

介绍
设置环境
快速上手
功能导航
名词解释
npm 包

基础

运行时

Runtime 接入
Runtime API
Runtime Hooks
Rsbuild Plugin
Rspack 插件
Webpack Plugin
Rspress Plugin
Vite Plugin
Metro
类型提示
命令行工具
样式隔离

数据管理

数据获取
数据缓存
Prefetch

框架

Modern.js
Next.js

部署

使用 Zephyr Cloud 部署

调试

开启调试模式
Chrome Devtool
全局变量

Troubleshooting

概览

运行时

RUNTIME-001
RUNTIME-002
RUNTIME-003
RUNTIME-004
RUNTIME-005
RUNTIME-006
RUNTIME-007
RUNTIME-008
RUNTIME-009

构建

BUILD-001
BUILD-002

类型

概览
TYPE-001
其他
Edit this page on GitHub
Previous Page数据缓存
Next PageModern.js

#Prefetch

prefetch 函数用于预取远程模块的资源和数据,从而提升应用的性能和用户体验。通过在用户访问某个功能之前提前加载所需内容,可以显著减少等待时间。

该 API 需要先注册 lazyLoadComponentPlugin 插件,才可以使用。

#何时使用

当你希望在不立即渲染组件的情况下,提前加载其关联的 JavaScript、CSS 或数据时,prefetch 是一个理想的选择。例如,当用户鼠标悬停在某个链接或按钮上时,可以触发 prefetch,以便在用户真正点击时,组件能够更快地呈现。

#API

interface ModuleFederation {
  prefetch(options: {
    id: string;
    dataFetchParams?: Record<string, any>;
    preloadComponentResource?: boolean;
  }): void;
}

#参数

  • id (必填): string 远程模块的唯一标识符,格式为 '<remoteName>/<exposedModule>'。例如, 'shop/Button'。

  • preloadComponentResource (可选): boolean 是否预加载组件的资源,包括 JavaScript chunk 和关联的 CSS 文件。默认为 false。

  • dataFetchParams (可选): object 如果远程组件存在数据获取函数,设置后会传递给数据获取函数。

#使用示例

假设我们有一个远程应用 shop,它暴露了一个组件 Button,并且该组件关联了一个数据获取函数。

#场景 1: 仅预取数据

当用户鼠标悬停在一个将要导航到购物页面的链接上时,我们可以预取该页面所需的数据。

import { getInstance } from '@module-federation/runtime';

const instance = getInstance();

const handleMouseEnter = () => {
  instance.prefetch({
    id: 'shop/Button',
    dataFetchParams: { productId: '12345' },
  });
};

#场景 2: 预取数据并预加载组件资源

为了进一步优化,我们可以在预取数据的同时,也把组件的 JS 和 CSS 文件下载下来。

import { getInstance } from '@module-federation/runtime';

const instance = getInstance();

const handleMouseEnter = () => {
  instance.prefetch({
    id: 'shop/Button',
    dataFetchParams: { productId: '12345' },
    preloadComponentResource: true,
  });
};

通过灵活使用 prefetch,您可以根据应用的具体场景和用户行为,精细地控制资源的加载时机,从而优化应用性能。