mirror of
https://github.com/ZiuChen/ClipboardManager.git
synced 2025-06-08 06:16:18 +08:00
refactor: 将time.js相关代码最小化 压缩插件体积
This commit is contained in:
parent
ec32d3488b
commit
ba841b67a8
@ -1,68 +1,2 @@
|
||||
// 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
|
||||
}
|
||||
/** @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
|
||||
// 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;
|
@ -1,21 +1,2 @@
|
||||
// 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, err: 'no such method' })
|
||||
return
|
||||
}
|
||||
apis[method].apply(null, args).then(
|
||||
(res) => postMessage({ cb, data: res }),
|
||||
(err) => postMessage({ cb, err })
|
||||
)
|
||||
}
|
||||
// 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}))};
|
Loading…
x
Reference in New Issue
Block a user