Diff-Match-Patch 以 Typescript 和 完全预算及代理配对支持进行
已制作 Javascript diff- match- patch 适用于生产数字 :
- 现代打字符 单位测试,由于 diff- match- patch- type 标记。 。 。 .
- 满 单码支持,感谢 80卢比
- 我又说 完整 diff 超时支持,它只在别处部分执行,并且对生产使用至关重要(否则您的服务器或浏览器可以很容易地被卡入到百分百的分量上,几分钟)。 见 大的. test.ts (英语)。 。 。 .
- A 类 确定性工作预算 (单位:千美元)
diffWorkLimit,或一个DiffWorkBudget换成时钟 默认关闭;没有它,结果就等于1.0.1。 见 工作预算. test.ts。用它来:- 合同:
diffWorkLimit将抽象的、 充电的算法步骤限制在diff_main和清理(等等)patch_makeiff和patch_apply模糊的 diffs: 最多diffWorkLimit + BUDGET_STEP_UNITS × (n + 2)单位,其中n是调用文本的长度(以清理其文本)和BUDGET_STEP_UNITS24岁。 单位跟踪算法检查和复制的字符,并跟踪其移动的diff. 发动机级别的工作不是调制的: 串接和平整,===,语义分数的正则表达式,数组读取和写出,而行编码的散列. 它的成本可能因引擎而异,因此这些单位绑定了算法的步骤,而不是总的CPU. - 怎样: 每一步要么先付工钱(如果预算无法支付的话, 所以充电单位是极限加分 最多一步。 一个预算由一个呼叫所做的一切来分担,而时钟从不被读取.
- 未覆盖 :
patch_make组装及其上下文搜索patch_addContext_,每个补丁O(N)不在预算范围之内,因此patch_apply' 匹配( e)match_main) (中文(简体) ). 预算约束了diff,不是所有patch_make。 。 。 . - 速度 : 在AMD EMYC 7B13核心上的V8(节点)上,大约135,000到180,000个单元需要一毫秒,所以
diffWorkLimit: 25_000_000是关于diffTimeout: 0.2在这里。 这一数字是在那里校准和测量的,没有保证,也不是合同的一部分.
- 合同:
- 现代 API 用于创建 dmp 对象(仍然向后兼容).
安装
pnpm i @cocalc/diff-match-patch
import { DiffMatchPatch } from "@cocalc/diff-match-patch";
const dmp = new DiffMatchPatch({ diffTimeout: 0.5 });
const patch = dmp.patch_make("ello", "hello world");
console.log(JSON.stringify(patch));
// [{"diffs":[[1,"h"],[0,"ello"],[1," world"]],"start1":0,"start2":0,"length1":4,"length2":11}]
dmp.patch_apply(patch, "ello");
// [ 'hello world', [ true ] ]
文档
官方仓库。 。 。 .