`naptha/tesseract.js` 的技术错误报告和优化建议
" naptha/tesseract.js " 技术错误报告和优化建议
该文件载有3个关键、影响很大的错误报告和在`sectract.js'代码库中发现的建筑改进。 每期以专业的GitHub issue / Pull Request格式编排,并配有根因分析,复制码,基准证据,和滴入码修正等功能.
-- -- . . .
问题:`创造者()' 通过未处理的信件倾听器例外, 无限期地挂起初始化失败和崩溃进程
- ** 严重性**:临界值(P1)
- ** 组件**:核心API(`src/createWorker.js')
- ** 受影响的版本**:
v5.x'-v7.0.0+`' - 标签:
bug'、api'、error-oblease'、crash'
-- -- . . .
□ 1. 总结
当Tesseract.create Worker ()'在语言数据获取过程中遇到任何错误(例如,HTTP 404,网络下线,CDN超时,被损坏的训练数据,或无支持的OCR引擎模式)时,返回的Promise ' 从未无限期结算和挂起。 在标准“try/catch”区块中包装“await create Worker(.)”永远不会赶上失败。
此外,如果打电话者在选项中不提供errorHandler',则create Worker.js'在同步工人消息'事件处理器内执行扔出错误(数据)'。 由于这个错误被抛出一个事件调度器内的"承诺"执行上下文之外,它触发了Node.js("process.nextTick ( ()) {抛出错误;}") 或浏览器中未处理的错误事件,崩溃了整个主机应用程序.
-- -- . . .
□ 2. 根源分析
在[`src/createWorker.js' (文件:///C:/Users/ritik/.Gemini/antigravity/scratch/tsesseract.js/src/createWorker.js#L202-L245)中:
• 工人拒绝'只要求行动'负载'
[JavaScript]
// src/createWorker.js (行202-222) (中文(简体) ).
关于Message(工人,({)
工人身份、工作身份、状况、动作、数据
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
Const promiseId = ${行动}-${jobId}`;
如果(状态 QQ'resolve') {
. . . . . . . .
} 如果( 状态 QQ' reject) {
promise[promiseId].reject(数据);
删除承诺[保证];
if (action QQ"load") 工人 Resreject(数据); // <---BUG: 只有处理动作QQ"load" !
如果( errorHandler) {
错误汉德勒(数据);
否则
抛出错误( 数据); // <--- BUG: 未抓取的抛出内部事件倾听器 !
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
- ;
QQ Flaw B:初始化承诺链被吞弃
```2ZZ
// src/createWorker.js (239-245行) (中文(简体) ).
装入内部( )
.then (( ()) 装入内置( 长) )
.then( () Q) 初始化 Internal( lags, oem, 配置) )
.then( ( ()) 工人ResResolve(resolveObj)) (中文(简体) ).
.catch( ( ()) QQ; // <--- BUG:沉默地吞入错误! 永远不要拒绝工人Res!
返乡工人Res;当“装入语言”失败(例如404网络)时:
- 工人发出QQ状态:"拒绝",动作:"装入语言",数据:"网络错误.".
行动'负载'评价虚假',因此`工人拒绝(数据)'从未援引。- 第243行 " Language Internal () " 拒绝,但被 ".catch (( ()) QQ) " 所捕获。 . . . . . . .
内容来源: naptha/tesseract.js