Conversation
- Replace Node.js specific dependencies with platform-agnostic alternatives: * node:assert -> lib/assertions.js (custom implementation) * fast-querystring -> lib/querystring.js (custom implementation) - Complete CJS to ESM migration: * Convert all source files from CommonJS to ESM * Update all import/export statements * Fix directory imports to use explicit file paths * Add .js extensions to all imports - Update package.json: * Add 'type: module' for ESM support * Keep original 2-space indentation format * Add new scripts for formatting and linting - Fix benchmark files for ESM compatibility: * Replace __dirname with import.meta.url * Fix CommonJS module imports (benchmark, chalk, inquirer) * Update directory imports to explicit paths - All tests pass (483/483) with 100% success rate - All benchmark tests work correctly - Maintain existing code style and formatting standards This completes RFC Phase 1.3 - Dependency Cleanup requirements.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概述
本 RFC 提出一个雄心勃勃的计划:基于现有的 find-my-way 路由库创建 Lightning Router ⚡ - 一个全新的世界级 Web 标准路由库。find-my-way 已经是当前世界上最快的 JavaScript 路由库,Fastify 基于它实现了世界上最快的 JavaScript Web 框架。我们的目标是在这个基础上进一步提升 30% 的性能,这将创造一个新的性能标杆,并为 Web Widget 元框架提供世界级性能的底层路由支持。
重要说明: Lightning Router 是一个全新的项目,将采用全新的项目名称和包名(
@web-widget/lightning-router),不会保持与 find-my-way 的接口兼容性。我们将基于 find-my-way 的优秀算法和架构,但完全重新设计 API 以适配 Web 标准和性能优化需求。这个项目将支持多个平台运行,包括 Cloudflare Workers、Service Workers、Node.js 等环境,同时保持对 Web 标准的完全兼容。
🎯 项目动机与愿景
find-my-way 是当前世界上最快的 JavaScript 路由库,但其严重依赖 Node.js 特定 API,无法在 Web 标准环境中运行。本项目旨在将其重新定位为元路由器,通过分层架构既保持原有的性能优势,又支持多平台运行。
主要改进方向:平台依赖解耦、模块系统现代化(ESM)、类型安全(TypeScript)、跨平台兼容性。
核心目标:为 Web Widget 元框架提供世界级性能的底层路由支持,同时保持对现有 Node.js 生态的完全兼容。
🏗️ 技术方案与架构设计
元路由器核心理念:分层架构
基于深入的架构分析,我们决定将 find-my-way 重新定位为元路由器,作为底层核心,然后基于它扩展出不同的上层适配器。这样既保持了核心算法的优势,又实现了跨平台的灵活性。
设计原则
分离关注点:核心层专注于高性能路由匹配算法(平台无关),适配层处理平台特定的 API 差异。
最小化核心改动:保持 Radix 树、约束系统等核心算法不变,只抽象出平台特定的部分。
渐进式升级:现有 Node.js 代码零改动,新项目可选择 Web 标准模式。
技术栈现代化
将项目从 CommonJS + JavaScript 迁移到 ESM + TypeScript,要求 Node.js >= 18 以获得原生 Web API 支持。核心改动包括模块系统迁移、HTTP 对象标准化、TypeScript 严格模式集成。
📋 实施计划与执行策略
当前实施状态
已完成:Node.js 依赖清理、ESM 迁移,所有测试用例通过(484/484)。
进行中:TypeScript 严格模式迁移。
待开始:Web 标准 API 重构、元路由器架构重构。
实施原则
小步快跑(每个变更 200-300 行以内)、测试驱动、可回滚。前三阶段保持功能兼容,第四阶段进行架构重构。
阶段三:TypeScript 严格模式(进行中)
3.1 TypeScript 工具链部署
tsconfig.json严格模式3.2 文件重命名和基础类型
git mv重命名所有 .js 文件为 .tssrc/types/index.ts定义基础类型3.3 核心类型系统
src/core/node.ts添加完整类型src/core/handler-storage.ts添加完整类型src/core/constrainer.ts添加完整类型src/strategies/目录添加类型定义3.4 主路由类型
src/core/router.ts添加完整类型阶段四:Web 标准 API 重构(待开始)
4.1 原生 Web API 支持
web.js作为 Web API 版本的入口4.2 核心逻辑重构
lookup方法签名,传入原生 Request 对象Handler接口签名,返回原生 Response 对象4.3 测试环境适配
阶段五:元路由器架构重构(待开始)
5.1 性能基准建立
5.2 元路由器核心重构
RouteContext接口UniversalHandler类型定义MetaRouter核心类5.3 适配器实现
Node.js 适配器:
NodeRouterAdapter类Web 标准适配器:
WebRouterAdapter类5.4 性能验证和优化
检查点说明
每个主要步骤完成后都有 Code Review 检查点,确保:
🔧 技术细节与实现方案
文件结构规划
基于元路由器架构的新文件结构:
迁移策略
采用渐进式迁移:基础设施建设(ESM、Web API、TypeScript)→ 元路由器架构重构(内部重构、适配器实现、性能验证)→ 生态扩展。
要求 Node.js >= 18 以获得原生 Web API 支持,确保跨平台兼容性。
核心接口设计
元路由器核心接口 - 平台无关
关键改动点
当前签名的问题:
元路由签名:
适配器架构
1. Node.js 适配器(保持现有兼容性)
2. Web 标准适配器(支持中间件)
包结构设计
使用方式:
约束系统优化
基于现有的
constrainer.js和handler-storage.js分析:🎯 成功标准
功能完整性:所有现有功能正常工作,通过所有单元测试,支持目标平台。
代码质量:TypeScript 严格模式无错误,完整的 API 文档,代码质量检查通过。
性能基准:Node.js 适配器保持原有性能,Web 适配器性能影响可控。
质量保证
每个提交运行类型检查、单元测试和代码质量检查。每个阶段进行 Code Review 和功能验证。
关键技术决策
分阶段策略:前三阶段保持算法兼容,第四阶段重新设计 API 以优化性能和 Web 标准兼容。
核心优势保留:Radix 树路径匹配算法、灵活的约束策略机制、高效的位图匹配算法。
重构重点:Node.js 依赖替换、测试框架迁移到 Vitest、模块系统 ESM 化、TypeScript 严格模式。
性能研究:评估中间件链对路由性能的影响、分析适配器模式的性能成本、验证现有优化算法的兼容性。