这可能是一个非常愚蠢的问题。我承认我对chrome网站引擎和JS v8引擎的功能有些天真。
但是说,我正在运行一个伪造的应用程序,该应用程序正在从标记中抓取URL,并将其推入名为img2arr
的数组中
然后,我有一个本地文件var img1 = ./image.jpg
(用引号引起来)。
最后,我有一个函数compare(img1, img2arr)
,将这两个参数都用作参数,并使用了诸如blink-diff或Jimp之类的库,将img1
与{{ 1}}。这一切都发生在img2arr
或.forEach()
循环中,但是可以随着.map
的增长而变慢。
说它包含500个图像URL-是否可以使用服务工作者,特定的Node.js库或其他方法来确保我的图像循环和比较逻辑都在多个线程中发生?
例如200个循环,比较两个12KB图像需要7秒钟,但是以我超快的12核处理器,它会不会少于1个?
对不起,我很天真!
答案 0 :(得分:1)
有几种可能的方法:
1.使用spawn
在计算机的每个内核上分别运行脚本。这实际上是nice article。
2.使用node.js worker threads
here,您可以在示例中找到它的工作方式。
与您决定的实现方式无关,主要是收集到目前为止的所有数据
最后,我有一个功能compare(img1,img2arr),需要使用....
然后,将img2arr
数组拆分为多个块。您可以从this article中选择任何一种方法
分离后,将每个块传递到单独的进程,然后等待第一个进程找到相似的图像。
当进程发现相似的映像时,您可以从主进程中杀死所有其他进程。
因此,整个过程将是:
1.收集图像进行比较
2.分割图像以进行比较。
3.分离比较逻辑以分离文件,并在该文件上运行线程/进程。
3a。将块发送到可用进程
3b。等待进程成功返回并杀死所有其他进程。