我正在制作一个可以调整图像大小的node.js应用程序。我可以通过jimp成功地做到这一点。但是,调整图像大小不是异步的,并且在调整大小时会冻结UI。我想避免这种情况,所以我尝试使用Webworker。
// main.js
var worker = new Worker(__dirname + '\\worker.js');
worker.addEventListener('message', function(e) {
if (e.data == 'done') { worker.terminate() } // Done
}, false);
worker.postMessage({'buff': buf, 'filename': filename}); // Start the worker
|
// worker.js
const Jimp = require('jimp'); // Oops, this doesn't work
self.addEventListener('message', function(e) {
resize(e.data.buf, e.data.filename);
}, false);
function resize(buf, filename) {
Jimp.read(buf).then(image => {
image.resize(1920, Jimp.AUTO);
image.writeAsync(filename).then(cb => { self.postMessage('done') });
});
}
我发现我无法在Webworker中使用诸如require()
之类的node.js函数。如何在Webworker中使用Jimp或以其他异步方式调整图像大小?
编辑:我正在尝试使用webworkify,从@RubyJunk复制答案。当我尝试创建工作程序时,出现错误Uncaught TypeError: Cannot convert undefined or null to object at Function.keys (<anonymous>)
。有谁知道该如何解决?
编辑2:我正在使用电子创建我的Node.js应用程序。它们具有窗口属性(nodeIntegrationInWorker),似乎可以在Web Worker中运行Node.js函数,但是当我尝试使用require()时,它仍然告诉我它不是函数。
答案 0 :(得分:0)
尝试使用webworkify,然后像这样创建您的工作程序
this.camera.recordAsync(recordingConfig).then(async data => {
console.log(data.uri)
})
并将您的worker方法放入module.exports中,
var work = require('webworkify');
var worker = work(require('./worker.js');