【发布时间】: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