dkopy
TypeScript icon, indicating that this package has built-in type declarations

0.1.0 • Public • Published

dkopy 🚀

English | 简体中文

一个超轻量级、高性能的 JavaScript 深克隆工具库,完美支持复杂对象和循环引用的克隆场景!

✨ 特性

  • 🚀 极致性能 - 优化的克隆算法,性能远超同类工具。
  • 🛡️ 类型安全 - 完整的 TypeScript 支持,提供类型推断和代码提示。
  • 🔄 循环引用检测 - 智能处理循环引用,避免栈溢出。
  • 🎨 全类型支持 - 支持所有 JavaScript 数据类型,包括 DateRegExpSetMapTypedArray 等。
  • 🧰 零依赖 - 无外部依赖,纯净实现。
  • 📦 体积小巧 - 压缩后仅 ~2KB。
  • 🔒 安全可靠 - 防止递归栈溢出,支持最大递归深度配置。

📦 安装

# 使用 npm
npm install dkopy

# 使用 yarn
yarn add dkopy

# 使用 pnpm
pnpm add dkopy

🚀 快速开始

import dkopy from 'dkopy';

// 1️⃣ 基础深克隆
const cloned = dkopy(source);

// 2️⃣ 处理循环引用
const circular = { foo: { bar: {} } };
circular.foo.bar = circular;
const cloned = dkopy(circular); // ✅ 正确处理循环引用

🎯 支持的数据类型

  • 💫 基础类型
    • StringNumberBoolean
    • nullundefined
  • 📋 引用类型
    • ObjectArray
    • DateRegExp
    • MapSet
    • TypedArray(如 Uint8ArrayInt32Array 等)
    • ArrayBuffer

🛠️ API

function dkopy<T>(input: T, clonedMap?: Map<any, any>): T;
  • input: 需要克隆的值。
  • clonedMap: 用于记录已克隆对象的 Map(内部使用,通常无需手动传递)。

🎮 使用示例

// 克隆复杂对象
const complex = {
  date: new Date(),
  regex: /test/g,
  map: new Map([['key', 'value']]),
  set: new Set([1, 2, 3]),
  typed: new Int8Array([1, 2, 3]),
  nested: { deep: { deeper: { value: 42 } } }
};

const cloned = dkopy(complex);
// ✅ 所有属性都被正确克隆!

⚡️ 性能测试

使用 benchmark.js 在不同场景下的测试结果:

深克隆性能测试:
✨ dkopy: 681,261 ops/sec ±0.25% (94 runs sampled)
📊 lodash.cloneDeep: 254,535 ops/sec ±0.24% (94 runs sampled)
🚀 rfdc: 745,473 ops/sec ±0.31% (99 runs sampled)

📈 性能优势

  • dkopy 的性能是 lodash.cloneDeep 的 2.68 倍。
  • dkopy 的性能接近 rfdc,仅相差约 8.6%。
  • dkopy 在大多数场景下表现优异,尤其是在处理复杂对象和循环引用时。

🤝 贡献指南

  1. Fork 本仓库
  2. 创建功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 创建 Pull Request

📄 许可证

MIT License © 2024-Present


⭐️ 如果这个项目对你有帮助,别忘了给它点个星!

Package Sidebar

Install

npm i dkopy

Weekly Downloads

0

Version

0.1.0

License

MIT

Unpacked Size

7.59 kB

Total Files

6

Last publish

Collaborators

  • mrgoethe