Ответ 1
Может показаться, что это происходит потому, что все происходит параллельно, а не последовательно, или, возможно, самое время тратится на img.quality()
и это задача с интенсивным процессором, которая блокирует основной поток.
Вы можете попробовать изменить это:
images.forEach(function(image){
jimp.read(image, function(err, img){
img.quality(90, function(){
processed++;
document.querySelector('p').textContent = 'processed images: ' + processed;
});
});
});
примерно так:
let processed = 0;
let f = () => {
jimp.read(images[processed], function(err, img){
img.quality(90, function(){
processed++;
document.querySelector('p').textContent = 'processed images: ' + processed;
if (processed < images.length) setImmediate(f);
});
});
};
Вы также можете изменить setImmediate
на setTimout
с некоторым значением таймаута, которое позволит потоку пользовательского интерфейса рисовать на экране то, что ему нужно сделать. Вы даже можете использовать window.requestAnimationFrame()
для этого.