【问题标题】:Does handling .map() asynchronously provide a performance gain even without external API calls?即使没有外部 API 调用,异步处理 .map() 是否也能提高性能?
【发布时间】:2019-03-27 11:06:47
【问题描述】:

我正在尝试提高 JSON 解析脚本的速度,该脚本会根据其中的数据创建一个 HTML 文件。

JSON 文件具有嵌套的行/列/内容模块结构,我循环遍历它们以将每个内容模块转换为 HTML。

jsonFile.page.rows.map(row => {
  row.columns.map(col =>{
    col.modules.map(mod => {
      switch(mod.type){
        case "text":
          // list of JSON handling functions;
          break;
        case "button":
          // list of JSON handling functions;
          break;
        case "image":
          // list of JSON handling functions;

        // etc...
      }
    })
  })
})

由于每个内容块都是独立的,我想提高该循环的速度并找到一种使代码异步的方法。

我对异步编程很陌生,我尝试了一些异步/等待的实现,但没有任何运气(=> 在速度方面没有任何增益)。这让我产生了一个疑问:即使我的代码中没有对外部 API 的任何调用,async/await 是否真的可以提高我的代码的性能?

您能否建议一种方法来提高上述代码的速度? 感谢您的帮助!

【问题讨论】:

  • case语句里面的代码是做什么的?附加到dom?修改一些全局变量?看来您并不关心 map 调用的返回值,在这种情况下,forEach 比 map 更合适。
  • async/await 不是关于为您带来更多性能的并行处理。这只是关于拨打不阻塞的电话。例如。 medium.com/front-end-weekly/…
  • 不,如果您不调用外部 API,它不会做任何事情。 async/await 的全部意义在于您可以在等待 I/O 操作或来自 HTTP 请求的响应时运行其他代码。如果你想以并行方式做事,JavaScript 可能不是一个好选择。
  • 嗨@Marius,语句中的代码对JSON文件执行一些转换(例如:创建一些额外的属性)。在嵌套的 .map() 之后,我使用了一些 .pug 文件来创建 HTML 文件。所以你是对的:我并不特别关心特定的返回值。请问您为什么认为 forEach 应该更合适?谢谢!
  • @Torakiki 这在此 SO 帖子中进行了讨论:stackoverflow.com/questions/34426458/…

标签: javascript loops async-await


【解决方案1】:

由于 JavaScript 是单线程的,.map 不会比常规的 for 循环提供任何性能提升。它实际上比常规的 for 循环慢很多。例如,请参阅 JSPerf

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多