docs(canvas): explain compute workers and display resource lifetimes

This commit is contained in:
2026-11-12 00:19:19 +08:00
parent af8e2fe76b
commit b471d88520
12 changed files with 136 additions and 0 deletions
+8
View File
@@ -1,7 +1,15 @@
/**
* 专用图片解码 Worker:使用 createImageBitmap 读取尺寸,立即 close bitmap 后回传纯数据。
* 它不输出转码图片、不更改原文件,也不创建新上传/生成任务;宿主负责终止 Worker 与核对消息归属。
*/
/** 仅声明本入口需要的 Worker 消息能力,不导入 renderer 或 DOM 状态。 */
const worker=globalThis as unknown as{onmessage:((event:MessageEvent)=>void)|null;postMessage(value:unknown):void};
/** 接受正确版本/id/Blob,按 from-image 选项解码;失败回稳定 image_decode_failed。 */
worker.onmessage=async event=>{
const {version,id,bytes}=event.data??{};if(version!==1||!Number.isSafeInteger(id)||!(bytes instanceof Blob))return;
// bitmap 是临时原生资源,尺寸读取即使抛错也由 finally close;成功只发送 width/height 和输入长度。
try{const bitmap=await createImageBitmap(bytes,{imageOrientation:'from-image'});let width:number,height:number;try{width=bitmap.width;height=bitmap.height;}finally{bitmap.close();}worker.postMessage({version:1,id,byteLength:bytes.size,width,height});}
catch{worker.postMessage({version:1,id,byteLength:bytes.size,error:'image_decode_failed'});}
};
// 标记为独立 TypeScript 模块,避免 Worker 全局声明与其它源码脚本命名空间合并。
export {};