# fast-bridge **Repository Path**: devoink/fast-bridge ## Basic Information - **Project Name**: fast-bridge - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-23 - **Last Updated**: 2025-08-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🚀 Fast Bridge 一个轻量级、高性能的 iframe 通信库,基于 MessageChannel API 实现,提供安全、可靠的跨页面通信解决方案。 ## ✨ 特性 - 🔒 **安全可靠**:基于 MessageChannel API,提供私有通信通道 - 🚀 **高性能**:零拷贝消息传输,低延迟通信 - 🛡️ **安全防护**:Origin 验证、命名空间隔离、消息格式验证 - 🔧 **简单易用**:统一的 API 接口,自动处理连接时序 - 📊 **监控统计**:内置消息统计、连接状态监控、Ping 测试 - 🔄 **自动重连**:连接断开时自动重连机制 - 📝 **完整日志**:详细的调试日志和错误追踪 - 🎯 **TypeScript**:完整的类型定义支持 ## 📦 安装 ### NPM 安装 ```bash npm install fast-bridge ``` ### 浏览器直接引用 #### 方式 1: 通过 CDN 引用(推荐) ```html ``` #### 方式 2: 通过 jsDelivr CDN ```html ``` #### 方式 3: 本地文件引用 ```html ``` #### 方式 4: ES 模块方式 ```html ``` ### 使用方式 #### 浏览器直接引用 ```html ``` #### ES 模块方式 ```html ``` ## 🚀 快速开始 ### 宿主页面 (Host) ```javascript import { FastBridge } from "fast-bridge"; // 创建 iframe const iframe = document.createElement("iframe"); iframe.src = "./client.html"; document.body.appendChild(iframe); // 创建桥接器 const bridge = new FastBridge({ namespace: "my-app", debug: true, iframe: iframe, }); // 注册方法供客户端调用 bridge.register("getUserInfo", async (params) => { return { name: "John", age: 25, ...params, }; }); // 监听客户端事件 bridge.on("userLogin", (data) => { console.log("用户登录:", data); }); // 初始化连接 await bridge.init(); // 调用客户端方法 const result = await bridge.call("getData", { id: 123 }); console.log("客户端返回:", result); ``` ### 客户端页面 (Client) ```javascript import { FastBridge } from "fast-bridge"; // 创建桥接器 const bridge = new FastBridge({ namespace: "my-app", debug: true, }); // 注册方法供宿主调用 bridge.register("getData", async (params) => { return { data: "some data", timestamp: Date.now(), ...params, }; }); // 监听宿主事件 bridge.on("updateUI", (data) => { console.log("收到宿主更新:", data); }); // 初始化连接 await bridge.init(); // 调用宿主方法 const userInfo = await bridge.call("getUserInfo", { includeAvatar: true }); console.log("用户信息:", userInfo); ``` ## 📚 API 文档 ### FastBridge 构造函数 ```typescript interface BridgeOptions { namespace?: string; // 命名空间,默认为 "default" debug?: boolean; // 是否开启调试日志,默认为 false iframe?: HTMLIFrameElement; // iframe 元素,传入表示宿主页面 security?: { strictOrigin?: boolean; // 是否严格验证源,默认为 true allowedOrigins?: string[]; // 允许的源列表 }; } ``` ### 核心方法 #### `init(): Promise` 初始化连接,自动处理所有时序问题。 #### `register(methodName: string, handler: MethodHandler): void` 注册方法供对方调用。 ```javascript bridge.register("calculate", async (params) => { const { a, b, operation } = params; return eval(`${a} ${operation} ${b}`); }); ``` #### `call(methodName: string, params?: any): Promise` 调用对方注册的方法。 ```javascript const result = await bridge.call("getUserInfo", { includeAvatar: true }); ``` #### `emit(eventName: string, data?: any): void` 发送事件给对方。 ```javascript bridge.emit("userLogin", { userId: 123, timestamp: Date.now() }); ``` #### `on(eventName: string, callback: EventCallback): void` 监听对方发送的事件。 ```javascript bridge.on("updateUI", (data) => { console.log("收到UI更新:", data); }); ``` ### 连接管理 #### `getConnectionStatus(): boolean` 获取当前连接状态。 #### `getConnectionInfo(): ConnectionInfo` 获取详细的连接信息。 #### `onConnectionChange(callback: (connected: boolean) => void): void` 监听连接状态变化。 #### `reconnect(): Promise` 重新连接。 #### `disconnect(): void` 断开连接。 ### 监控和统计 #### `ping(): Promise` Ping 测试,返回延迟时间(毫秒)。 #### `getMessageStats(): MessageStats` 获取消息统计信息。 ```javascript const stats = bridge.getMessageStats(); console.log(`发送: ${stats.sent}, 接收: ${stats.received}, 错误: ${stats.errors}`); ``` #### `resetMessageStats(): void` 重置消息统计。 ## 🔒 安全特性 ### 默认安全策略 - ✅ **严格源验证**:只允许同源和 iframe 源通信 - ✅ **命名空间隔离**:不同命名空间的消息完全隔离 - ✅ **消息格式验证**:所有消息都经过格式验证 - ✅ **Origin 验证**:验证所有 postMessage 的来源 ### 自定义安全策略 ```javascript // 严格模式(默认) const bridge = new FastBridge({ namespace: "my-app", iframe: iframe, security: { strictOrigin: true, // 只允许同源和 iframe 源 }, }); // 宽松模式 const bridge = new FastBridge({ namespace: "my-app", iframe: iframe, security: { strictOrigin: false, allowedOrigins: ["https://trusted-site.com", "https://api.example.com"], }, }); ``` ## 🚀 连接特性 - ⏱️ **连接时间**:1-2 秒(等待 iframe 完全准备就绪) - ✅ **稳定可靠**:确保连接建立后再进行通信 - 🔄 **自动重连**:连接断开时自动重连机制 - 📊 **连接监控**:实时监控连接状态和消息统计 ## 🎯 使用场景 ### 1. 微前端架构 ```javascript // 主应用 const bridge = new FastBridge({ namespace: "main-app", iframe: microAppIframe, }); // 子应用 const bridge = new FastBridge({ namespace: "main-app", }); ``` ### 2. 第三方组件集成 ```javascript // 宿主页面 const bridge = new FastBridge({ namespace: "widget", iframe: thirdPartyWidget, }); // 第三方组件 const bridge = new FastBridge({ namespace: "widget", }); ``` ### 3. 跨域通信 ```javascript // 需要配置允许的源 const bridge = new FastBridge({ namespace: "cross-origin", iframe: crossOriginIframe, security: { strictOrigin: false, allowedOrigins: ["https://trusted-domain.com"], }, }); ``` ## 🔧 开发 ### 安装依赖 ```bash npm install ``` ### 开发模式 ```bash npm run dev ``` ### 构建 ```bash npm run build ``` ### 运行示例 ```bash # 启动开发服务器 npm run dev # 访问示例页面 open http://localhost:5173/examples/basic/host.html ``` ## 📊 性能对比 | 特性 | Fast Bridge | postMessage | CustomEvent | | -------- | -------------- | ------------- | ----------- | | 通信方式 | MessageChannel | postMessage | CustomEvent | | 安全性 | 🔒 私有通道 | ⚠️ 可被监听 | ⚠️ 同域限制 | | 性能 | 🚀 零拷贝 | 🐌 序列化开销 | 🚀 零拷贝 | | 跨域支持 | ✅ 支持 | ✅ 支持 | ❌ 不支持 | | 自动重连 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 | | 连接监控 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 | ## 🤝 贡献 欢迎提交 Issue 和 Pull Request! ## 📄 许可证 MIT License ## 🙏 致谢 感谢所有为这个项目做出贡献的开发者!