如何避免 jimp 阻塞 Node.js 代码

2023-12-03

我正在使用 Jimp 来处理一些照片。

我有一个包含照片的数组。像这样:

var images = ['.../pic-1.jpg', '.../pic-2.jpg', '.../pic-3.jpg', '.../pic-4.jpg'];

这是操纵它们的代码:

images.forEach(function(image){
  jimp.read(image, function(err, img){
    img.quality(90, function(){
      console.log("done with this image!");
    });
  });
});

这很有效,它会在每个图像完成时进行记录。但是,它阻止了代码,如果我尝试这样做:

var processed = 0;

images.forEach(function(image){
  jimp.read(image, function(err, img){
    img.quality(90, function(){
      processed++;
      document.querySelector('p').textContent = 'processed images: ' + processed;
    });
  });
});

在处理完所有图像之前,它不会更新文本。如何解决这个问题,以便每次处理图像时都可以更新文本?


看起来可能是这样,因为一切都是并行发生的,而不是按顺序发生的,或者也许确实大部分时间都花在了img.quality()这是一个 CPU 密集型任务,会阻塞主线程。

您可以尝试更改此设置:

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 to setTimout设置一些超时值,让 UI 线程在屏幕上绘制它需要绘制的内容。你甚至可以使用window.requestAnimationFrame()为了那个原因。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何避免 jimp 阻塞 Node.js 代码 的相关文章

  • JavaScript 中的埃拉托斯特尼筛法对大量数据无限运行

    我一直在尝试写埃拉托斯特尼筛法 http en wikipedia org wiki Sieve of EratosthenesJavaScript 中的算法 基本上我只是按照以下步骤操作 创建从 2 到 n 1 的连续整数列表 令第一个素
  • IE从哪个版本开始支持Object.create(null)?

    您可以通过多种方式在 JavaScript 中创建对象 creates an object which makes the Object prototype of data var data1 new Object Object liter
  • Chrome 中的性能问题

    我目前正在从事一个相对较大的项目 使用 AngularJs 构建 应用程序的一部分是一个表单 您可以向其中添加任意数量的页面 不幸的是 添加了很多不必要的垃圾 即表示表单模型的对象可能会变得非常大 在某些时候 Chrome 基本上无法处理它
  • 如何将内联 JavaScript 与 Express/Node.js 中动态生成的内容分开?

    对于具有几年 Web 开发经验但没有找到答案的人来说 这是一个有点菜鸟的问题程序员堆栈交换 or Google 我决定在这里问一下 我在用Express网络框架Node js 但这个问题并不特定于任何 Web 框架或编程语言 以下是从数据库
  • 在打字稿中导入 json

    我是 typescript 的新手 在我的项目中 我们使用 typescript2 在我的要求之一中 我需要导入 json 文件 所以我创建了 d ts 文件如下 test d ts declare module json const va
  • 隐藏 Div 的父级

    我只是想隐藏父divcomments section div class content content green div div div 我试过这个 document getElementById comments section pa
  • Bootstrap按钮加载+Ajax

    我正在使用 Twitter Bootstrap 的按钮加载状态 http twitter github com bootstrap javascript html buttons http twitter github com bootst
  • 如何纠正流警告:解构(缺少注释)

    我正在编写一个小型 React Native 应用程序 并且正在尝试使用 Flow 但我无法在任何地方真正获得有关它的正确教程 我不断收到错误 destructuring Missing annotation 有关 station 这段代码
  • 如何制作没有 ng-repeat 的模板并使用 Angular-drag-and-drop-lists 将数据传递到 $scope?

    我想用角度拖放列表 https github com marceljuenemann angular drag and drop lists使用我自己的网格模板到所见即所得编辑器 如何构建我自己的 HTML 模板而不需要ng repeat因
  • Javascript split 不是一个函数

    嘿朋友们 我正在使用 javascript sdk 通过 jQuery facebook 多朋友选择器在用户朋友墙上发布信息 但是我收到此错误friendId split 不是函数 这是我的代码 function recommendToFr
  • 有没有办法在 onclick 触发时禁用 iPad/iPhone 上的闪烁/闪烁?

    所以我有一个有 onclick 事件的区域 在常规浏览器上单击时 它不会显示任何视觉变化 但在 iPad iPhone 上单击时 它会闪烁 闪烁 有什么办法可以阻止它在 iPad iPhone 上执行此操作吗 这是一个与我正在做的类似的示例
  • 正则表达式 - 从 markdown 字符串中提取所有标题

    我在用灰质 https www npmjs com package gray matter 以便将文件系统中的 MD 文件解析为字符串 解析器产生的结果是这样的字符串 n Clean er ReactJS Code Conditional
  • 日期出现奇怪的错误,“未捕获非法访问”

    所以我试图找到最新的DateJavascript 可以处理 我把它减少到 9 月 275760 并增加了我开始捕获未捕获的天数illegal access例外new Date 09 24 275760 to new Date 10 13 2
  • Vue 和 Vuex:处理依赖的计算属性

    我的应用程序是一个使用 Vuex 在 Vue 中构建的精简电子表格 关键组件是TableCollection Table and Row The TableCollection有一个包含多个的数组Table对象 每个Table有一个包含多个
  • 在 Javascript 中连接空数组

    我正在浏览一些代码 我想知道这有什么用处 grid push concat row 根据我的理解 它等同于 grid push row 为什么要大惊小怪 连接 你想使用 concat当您需要展平数组并且没有由其他数组组成的数组时 例如 va
  • 如何隐藏/禁用 Highcharts.js 中的图例框?

    我想问是否可以使用 HighCharts js 库隐藏图表中的所有图例框 var chart object chart renderTo render to type graph type colors graph colors title
  • 在 MySQL 中存储表情符号的编码问题:如何使用 Prisma ORM 在 NodeJS 中定义字符排序规则?

    亲爱的 Nodejs 专家和数据库专家 我们在 MySQL 数据库中存储表情符号和其他特殊字符时遇到问题 我们使用 Prisma 得到一个错误 这是我们使用的 ORM 参数无法从排序规则 utf8 general ci 转换为 utf8mb
  • JavaScript 相对路径

    在第一个 html 文件中 我使用了一个变量类别链接 var categoryLinks Career prospects http localhost Landa DirectManagers 511 HelenaChechik Dim0
  • 如何确定所有角度2分量都已渲染?

    当所有 Angular2 组件完成渲染时 是否会触发一个角度事件 For jQuery 我们可以用 function 然而 对于 Angular2 当domready事件被触发 html 只包含角度组件标签 每个组件完成渲染后 domrea
  • 如何在执行新操作时取消先前操作的执行?

    我有一个动作创建器 它会进行昂贵的计算 并在每次用户输入内容时调度一个动作 基本上是实时更新 但是 如果用户输入多个内容 我不希望之前昂贵的计算完全运行 理想情况下 我希望能够取消执行先前的计算并只执行当前的计算 没有内置功能可以取消Pro

随机推荐

  • BigQuery 有区域限制或其他区域之间有延迟吗?

    我想从 GCE 实例将数据存储在 BigQuery 上 并从不同区域实例查询它 例如 存储来自欧盟实例的数据 查询来自美国实例的数据 这是否可以毫不拖延地实现 我认为将数据复制到其他区域需要一些时间 BigQuery 有区域限制 很少有 像
  • 将字符串转换为小数,保留分数

    我正在尝试转换1200 00 to decimal but Decimal Parse 删除 00 我尝试过一些不同的方法 但它总是删除 00 除非我提供一个不同于 0 的分数 string value 1200 00 Method 1 v
  • Tensorflow 中的 8 位量化错误

    我一直在尝试新的8位量化功能在 TensorFlow 中可用 我可以毫无问题地运行博客文章中给出的示例 googlenet 的量化 并且它对我来说效果很好 现在 我想将同样的方法应用于更简单的网络 因此 我使用了 CIFAR 10 的预训练
  • 为什么Volley DiskBasedCache拼接时不直接获取缓存文件名

    Creates a pseudo unique filename for the specified cache key param key The key to generate a file name for return A pseu
  • SpelEvaluationException 找不到方法

    当我尝试使用 SpEL 将 User 传递给服务方法时 我面临下一个问题 evaluate expression commonService userTest user result flowScope user 春天抛出了以下异常 org
  • 多个 HTTP 授权标头?

    是否可以在 HTTP 消息中包含多个授权标头 具体来说 我想包括一种承载令牌类型 传递 OAuth 访问令牌 和一种基本类型 传递 base64 编码的用户名 密码 GET presence alice HTTP 1 1 Host serv
  • Python Flask Web 应用程序导航无需刷新页面

    我想开发一个像Google Contacts一样的Flask导航栏 当我单击每个导航按钮 如图所示的绿色框 时 我想在红色框内渲染特定的 HTML 页面 如图所示 而不刷新页面 我已经尝试过使用 扩展 layout html 正如 Klau
  • 通过文本框在 sql server 2005 中存储数据时出现错误

    我通过文本框和按钮在 SQL Server 2005 中存储数据 大约 1500 个字 我正在使用这段代码 protected void Button1 Click object sender EventArgs e conn Open S
  • 碰撞检测实施

    我有一个碰撞检测类 它通过查找中心之间的距离以及该距离是否足够小而足以发生碰撞来工作 请参阅碰撞检测错误 我的问题是试图让它真正发挥作用 椭圆形会发生碰撞 如果有必要 我会解释更多 谢谢 最好的方法是在图像重叠时实现每像素碰撞检测 您可以在
  • 字符串比较:与 PHP 中 JavaScript 的 localeCompare 相同吗?

    有没有办法让 PHP 中的字符串比较函数与 JavaScript 的相同string localeCompare 我的目标是制作一个可以应用于 PHP 和 JS 中的简单对象的哈希器 属性排序可以根据这个问题来解决 按属性值对 JavaSc
  • 如何使用 php 替换 CSV 文件中一行中的 1 个值?

    这是我非常简单和基本的帐户系统 只是一个学校项目 我希望用户能够更改他们的密码 但我不确定如何仅替换一行中的密码值 保持所有其他值相同 CSV 文件 ID Username Email DateJoined Password UserSco
  • Spring - 动态创建JMSTemplates

    我正在使用 Spring boot 并且我想动态创建多个 JMS 模板 因为我想连接到不同的 JMS 实例 我知道使用注释 将 ConnectionFactory 链接到 JMSTemplate 的标准方法 我希望每个不同的 JMS 实例都
  • 从数据库删除后无法更新 showModalBottomSheet 内的 ListView

    我有一个 ModalBottomSheet 里面有一个 ListView ListView 连接到 sqlite 数据库 所有创建 读取和删除方法都工作正常 但是当我删除一个项目时 我收到批准操作的 toast 消息 但我的视图没有更新 当
  • 如何在 MATLAB 中对离散 2D 曲面进行积分?

    我有一个函数z f x y where z是该点的值 x y 我该如何整合z超过x yMATLAB 中的平面 通过上面的函数 我实际上是指我有类似于哈希表的东西 也就是说 给定一个 x y 对 我可以查表找到对应的z value 如果这些点
  • 命名超类“Message”时的 Objective-C-Runtime 错误

    我有以下类层次结构 interface Message NSObject end implementation Message void dealloc I won t be called super dealloc end interfa
  • 如何通过panoid在谷歌街景中获取原始全景图像?

    我已经获得了通过 panoid 获取全景图像的参考 但它只给了我缩略图 但我想要直接从街景获取原始全景图像 下面给出了我所得到的链接 请帮我获取原始全景图像而不是缩略图 虽然没有官方API可以下载完整的全景图 您可以使用许多工具 视窗工具
  • 如何在地图上添加随机标记但避开大海?

    Google Ajax API 游乐场 http code google com apis ajax playground exp maps map markers 提供了一个向任何地图添加随机标记的好例子 function initial
  • C# 图像拼接

    我想要的是 拍摄 3 个图像 第一个图像保持原始大小 仅使用第一个图像大小的 1 2 从左侧开始 将另一个图像连接到它的底部 然后拍摄第三张图像并将其放在我整天都在看的第一张图像的右下半部分 有人有想法或想法吗 如果忽略纵横比 Image
  • 如何在 Alluvial/Sankey 图(在 R ggalluvial 上)的流量项上添加值标签?

    我希望在 R 上标记冲积 桑基图的 流量 部分 层 列 可以很容易地被标记 但连接它们的流却不能 我所有阅读文档和实验的尝试都没有成功 在下面的示例中 freq 预计会标记在流量连接部分上 library ggplot2 library g
  • 如何避免 jimp 阻塞 Node.js 代码

    我正在使用 Jimp 来处理一些照片 我有一个包含照片的数组 像这样 var images pic 1 jpg pic 2 jpg pic 3 jpg pic 4 jpg 这是操纵它们的代码 images forEach function