UNPKG

use-on-demand

Version:
153 lines 6.53 kB
import { __read, __spread } from "tslib"; // 控制日志打印 import { xX_DebugU, xX_LogE } from '../../debug-util/debug-util'; function cL() { var msgs = []; for (var _i = 0; _i < arguments.length; _i++) { msgs[_i] = arguments[_i]; } xX_DebugU.l.apply(xX_DebugU, __spread([xX_LogE.wClient_Side], msgs)); } function wL() { var msgs = []; for (var _i = 0; _i < arguments.length; _i++) { msgs[_i] = arguments[_i]; } xX_DebugU.l.apply(xX_DebugU, __spread([xX_LogE.wWorker_Side], msgs)); } /** * */ export var xX_WebWorker_Helper; (function (xX_WebWorker_Helper) { var _Client = /** @class */ (function () { /** * */ function _Client(workerConstructor, cfg) { this.worker = new workerConstructor(); cL('已创建Client', this.worker); // 初始化监听 this.__initListener(cfg); } // TIP————————————————————————————————————————————公共方法———————————————————————————————————————— /** * 普通的小量数据。 * 1.直接产生,额外一份【原数据拷贝】。 */ _Client.prototype.postSmallMsg = function (msg) { cL('发送小量数据'); this.worker.postMessage(msg); }; /** * 体积较大的数据。 * 1.会走【Transferable Objects】,不会产生 额外拷贝。 * 2.这个方法,【Client】和【Worker】是一模一样的。 */ _Client.prototype.postLargeMsg = function (msg) { cL('发送体积较大数据'); // 使用【Transferable Objects】。 this.worker.postMessage(msg, [msg]); }; _Client.prototype.closeClient = function () { this.worker.terminate(); cL('已停止Client'); }; // TIP————————————————————————————————————————————私有方法———————————————————————————————————————— /** * 初始化,一些监听。 */ _Client.prototype.__initListener = function (cfg) { // if (cfg._onmessage) { // 接收消息 this.worker.onmessage = function (ev) { cL('【Client】', '接收消息', ev.data); cfg._onmessage.bind(this)(ev); // 执行 }; } // 【序列化错误】处理 if (cfg._onmessageerror) { this.worker.onmessageerror = function (ev) { cL('序列化过程中,发生了错误', ev); cfg._onmessageerror.bind(this)(ev); // 执行 }; } // 【一般错误】处理 if (cfg._onerror) { this.worker.onerror = function (ev) { cL("\u53D1\u751F\u4E86\u4E00\u822C\u9519\u8BEF: Line " + ev.lineno + " in " + ev.filename + ": " + ev.message); cfg._onerror.bind(this)(ev); // 执行 }; } // }; return _Client; }()); xX_WebWorker_Helper._Client = _Client; var _Worker = /** @class */ (function () { /** * */ function _Worker(cfg) { wL('已进入Worker', '名称', self.name); // 初始化监听 this.__initListener(cfg); } // TIP————————————————————————————————————————————公共方法———————————————————————————————————————— /** * 普通的小量数据。 * 1.直接产生,额外一份【原数据拷贝】。 */ _Worker.prototype.postSmallMsg = function (msg) { wL('发送小量数据'); self.postMessage(msg); }; /** * 体积较大的数据。 * 1.会走【Transferable Objects】,不会产生 额外拷贝。 */ _Worker.prototype.postLargeMsg = function (msg) { wL('发送体积较大数据'); // 使用【Transferable Objects】。 self.postMessage(msg, [msg]); }; _Worker.prototype.closeWorker = function () { self.close(); wL('已停止Worker'); }; /** * 加载JS脚本 * 1.下载顺序是【无序】的,但执行顺序是【固定有顺序,从前往后】的。 */ _Worker.prototype.importJS = function (scripts) { self.importScripts.apply(self, __spread(scripts)); }; // TIP————————————————————————————————————————————私有方法———————————————————————————————————————— /** * 初始化,一些监听。 */ _Worker.prototype.__initListener /* < 此处,竟然无法使用泛型 > */ = function (cfg) { // if (cfg._onmessage) { // 接收消息 self.onmessage = function (_ev) { var ev = _ev; wL('【Worker】', '接收消息', ev.data); cfg._onmessage.bind(this)(ev); // 执行 }; } // 【序列化错误】处理 if (cfg._onmessageerror) { self.onmessageerror = function (_ev) { var ev = _ev; wL('序列化过程中,发生了错误', ev); cfg._onmessageerror.bind(this)(ev); // 执行 }; } }; return _Worker; }()); xX_WebWorker_Helper._Worker = _Worker; })(xX_WebWorker_Helper || (xX_WebWorker_Helper = {})); //# sourceMappingURL=WebWorker_Helper.js.map