refactor: 将time.js相关代码最小化 压缩插件体积

This commit is contained in:
ZiuChen 2022-09-17 21:14:01 +08:00
parent ec32d3488b
commit ba841b67a8
2 changed files with 4 additions and 89 deletions

View File

@ -1,68 +1,2 @@
// author: inu1255 // time.js author: inu1255
const path=require("path");function newPromise(fn){let a,b;var tmp={resolve(x){if(this.pending){a(x);this.resolved=true;this.pending=false}},reject(e){if(this.pending){b(e);this.rejectd=true;this.pending=false}},pending:true,resolved:false,rejected:false};var pms=new Promise(function(resolve,reject){a=resolve;b=reject;if(fn)fn(tmp.resolve,tmp.reject)});return Object.assign(pms,tmp)}let cbIdx=1;const cbMap=new Map;function getWorker(){if(getWorker.worker)return getWorker.worker;const worker=new Worker(path.join(__dirname,"time.worker.js"));getWorker.worker=worker;worker.onmessage=e=>{if(e.data&&cbMap.has(e.data.cb)){cbMap.get(e.data.cb).apply(null,e.data.args)}};return worker}function call(method,args){const cb=cbIdx++;let pms=newPromise();cbMap.set(cb,function(err,data){if(err)pms.reject(err);else pms.resolve(data)});getWorker().postMessage({method:method,args:args,cb:cb});return pms}function sleep(ms){return call("sleep",[ms])}exports.sleep=sleep;
const path = require('path')
function newPromise(fn) {
let a, b
var tmp = {
resolve(x) {
if (this.pending) {
a(x)
this.resolved = true
this.pending = false
}
},
reject(e) {
if (this.pending) {
b(e)
this.rejectd = true
this.pending = false
}
},
pending: true,
resolved: false,
rejected: false
}
/** @type {Promise<T>} */
var pms = new Promise(function (resolve, reject) {
a = resolve
b = reject
if (fn) fn(tmp.resolve, tmp.reject)
})
return Object.assign(pms, tmp)
}
let cbIdx = 1
const cbMap = new Map()
function getWorker() {
if (getWorker.worker) return getWorker.worker
const worker = new Worker(path.join(__dirname, 'time.worker.js'))
getWorker.worker = worker
worker.onmessage = (e) => {
if (e.data && cbMap.has(e.data.cb)) {
cbMap.get(e.data.cb).apply(null, e.data.args)
}
}
return worker
}
function call(method, args) {
const cb = cbIdx++
let pms = newPromise()
cbMap.set(cb, function (err, data) {
if (err) pms.reject(err)
else pms.resolve(data)
})
getWorker().postMessage({
method,
args,
cb
})
return pms
}
function sleep(ms) {
return call('sleep', [ms])
}
exports.sleep = sleep

View File

@ -1,21 +1,2 @@
// author: inu1255 // time.worker.js author: inu1255
const apis={sleep(ms){return new Promise(resolve=>setTimeout(resolve,ms))}};onmessage=event=>{const data=event.data;if(!data)return;const{cb,method,args}=data;if(!apis[method]){postMessage({cb:cb,err:"no such method"});return}apis[method].apply(null,args).then(res=>postMessage({cb:cb,data:res}),err=>postMessage({cb:cb,err:err}))};
const apis = {
sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms))
}
}
onmessage = (event) => {
const data = event.data
if (!data) return
const { cb, method, args } = data
if (!apis[method]) {
postMessage({ cb, err: 'no such method' })
return
}
apis[method].apply(null, args).then(
(res) => postMessage({ cb, data: res }),
(err) => postMessage({ cb, err })
)
}