问题标签 [heavy-computation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
241 浏览

javascript - 如何提高我的应用程序的性能?Nodejs 中的繁重计算

我正在使用我使用 Nodejs (Express)、Postgres 和 React 创建的交易机器人。React 仅适用于 UI,所有工作都使用 Node.js 完成。Postgres 用于在数据库中存储交易信息。

该应用程序仅在我的本地主机上运行。

工作流程是这样的:

  1. 获取交易平台上所有加密货币的列表(1 个外部 API 请求)
  2. 循环获取每个加密并对其执行一些“大量”计算(+150 个外部 API 请求并调用大量异步辅助函数)
  3. 如果一种加密货币满足要求的条件,则购买它(每个购买的加密货币 2 个外部 API 请求)然后将交易数据插入 DB(1 个内部 API 请求)
  4. 当所有密码都循环通过时,重复

我尽量简化它,因为它比这复杂一点,但这是基本的工作流程。

这工作正常,但真的很慢。每个加密 ( 2) 上的循环大约需要一分钟才能完成(每个加密大约 2.5 秒)。

这里有一些代码可以让您了解结构(同样,简化到最大,因为它使用了许多其他辅助函数并且总共有几千行代码):

workers在 Nodejs 中读到了一些可以帮助进行繁重计算的内容。话虽如此,我该如何实施呢?就我而言,这甚至是一个好的解决方案吗?问题是,执行计算的循环是相同的,其中包含对async返回函数PromisesasyncAPI 调用的大量调用。这是大约需要一分钟才能完成的循环。

所以我认为我可以大大提高性能,但不知道如何。我能做些什么呢?有人可以指导我朝好的方向吗?

非常感谢

0 投票
1 回答
34 浏览

android - Flutter:如何在不锁手机的情况下进行资源密集型后台计算?

我有一个益智游戏应用程序。(https://play.google.com/store/apps/details?id=com.karolinadart.blackbox

当玩家认为他们已经解决了这个难题时,他们会按下“这是我的最终答案”按钮,此时会计算分数。一个新的屏幕被推开,显示分数。

但是分数计算是一个相当繁重的计算,可能需要几秒钟,具体取决于特定设置的复杂性。因此,我制作了计分功能async,并尝试在等待计算完成时显示一个微调器……但这不起作用!我试过在计算之前启动微调器,看看它是否开始......确实如此,但是在计算开始的那一刻,微调器冻结了。

我应该如何对其进行编程,以便可以在后台进行繁重的计算,同时让手机可以自由地做其他事情,例如显示微调器,甚至继续游戏中的其他任务?


这些是结果显示代码的主要特点:

0 投票
0 回答
49 浏览

node.js - 如何下载大量 JSON 页面、写入 CSV 并使用 Node.js 处理到 Snowflake

我创建了一个 cron 作业,它以 JSON 格式从 API 下载大量记录(多达 110+ 百万个对象),将它们写入 CSV、PUT 和 COPY INTO 雪花数据库以执行插入。

我的工作可以超快地处理少于 100k 条记录的下载(最多运行 15 分钟),但是当它执行数百万次下载时速度太慢了,我开发了一个循环来处理每个限制在多个 CSV 文件中对它们进行批处理(每个文件拆分为 100k 行)。

循环看起来像这样:

我认为这需要这么长时间的主要原因是因为我将每次检索的下载限制为 10 万个条目,而且我知道启动不同的 HTTP 连接比从一个获取更多数据更消耗,但我必须这样做,因为任何事情高于该限制导致 axios(我正在使用 GET 数据)转储以下错误:

当我尝试从调用本身检索 300k 记录时不会发生此错误,但是当我尝试在作业运行时获取那么多记录时会发生此错误,它通过对许多记录的承诺处理 3 个并行下载。所以理论上我最多可以有3个“线程”一次下载4+百万条记录,每个线程将执行该过程13次。

我阅读了一些可能的解决方案,包括使用 Streams 从响应中读取数据并将它们处理成 CSV,但我对数据工程真的很陌生,我想知道使用 Node.js 来实现这样一个真正好的解决方案具体问题。我真的很想得到建议,而不是完整的解决方案。

非常感谢,如果需要更多上下文,我可以编辑问题并提供对问题的更多见解。

额外信息

  • 作业在部署为应用程序的 EKS 环境中运行。