我正在开发 a JavaScript library,其中提供了可以异步迭代的序列上的map / reduce功能.

A helpful soul on GitHub建议对于Node.js,我应该使用process.nextTick来尽可能快地进行异步迭代. (该库目前在所有环境中都使用setTimeout,我明白的不是最理想的).我对Node非常缺乏经验,所以我正在阅读这个方法的工作原理,不清楚我是否是不错的选择

根据the answer to another question on SO,在这种情况下,似乎使用setImmediate可能会更有意义,因为nextTick显然跳出了等待的I / O事件,这对我来说似乎不好.

这似乎在the official Node v0.10.0 announcment的一些言论中得到证实:

In v0.10,nextTick handlers are run right after each call from C++
into JavaScript. That means that,if your JavaScript code calls
process.nextTick,then the callback will fire as soon as the code runs
to completion,but before going back to the event loop.

所以我是对的,并且异步地迭代序列应该用setImmediate来完成?还是下一个在这里做个更好的选择? (在任何一种情况下,一个明确的解释为什么会非常感激)

解决方法

一些注意事项

我会首先做严格的基准测试,使得setImmediate比process.nextTick慢.如果不是(太慢),我会立即去setImmediate,因为这不会使事件循环饿死.

在节点0.10中有一个硬限制(1000,见node.js docs)到你可以递归调用nextTick的次数,所以你应该防止这种情况发生.您需要在迭代之前选择策略,或者可以在迭代期间更改策略(同时检查当前的迭代计数).

如果您出于性能原因选择process.nextTick,则可能需要设置一个可配置的硬限制,以便多次执行process.nextTick行,否则切换到setImmediate.我没有在nodejs的严重工作负载的经验,但我认为,如果你的图书馆使他们的I / O波澜不惊,人们不会喜欢它.

setImmediate肯定是最安全的,总而言之.

至于浏览器:
我没有学过你的图书馆,但是由于您实际来自setTimeout,您可能会通过window.postMessage帮助您了解新的延迟技术,而不是.有一个很好的小型库叫做next-tick(但语义不同于节点next-tick!),而且有一个cross-browser shim for setImmediate,这是比较重的,因为1)它需要实现setImmediate规范(包括取消预定任务的能力)和2)它具有更广泛的浏览器兼容性.

查看这个async sorting demo将setImmediate(shim)与setTimeout进行比较.

javascript – 我应该使用process.nextTick还是setImmediate进行异步迭代?的更多相关文章

  1. Vue nextTick获取更新后的DOM的实现

    本文主要介绍了Vue nextTick获取更新后的DOM的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. Vue NextTick介绍与使用原理

    我们对Vue中data数据的修改会导致界面对应的响应变化,而通过nextTick方法,可以在传入nextTick的回调函数中获取到变化后的DOM,讲起来可能还是有点梦幻,下面我们直接使用nextTick体验一下效果

  3. vue3深入学习 nextTick和historyApiFallback

    这篇文章主要介绍了vue3深入学习 nextTick和historyApiFallback,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下

  4. vue2从数据变化到视图变化之nextTick使用详解

    这篇文章主要为大家介绍了vue2从数据变化到视图变化之nextTick使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  5. Vue nextTick延迟回调获取更新后DOM机制详解

    这篇文章主要为大家介绍了Vue nextTick延迟回调获取更新后DOM机制详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  6. Node.js中Process.nextTick()和Process.setImmediate()的区别

    这篇文章介绍了Node.js中Process.nextTick()和Process.setImmediate()的区别,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  7. javascript – 我应该使用process.nextTick还是setImmediate进行异步迭代?

    还是下一个在这里做个更好的选择?

  8. javascript – 使用for循环的`let`和block作用域的解释

    我明白,让我们避免重复的声明是不错的.用let声明的变量也可以用在可以预期的闭包中我有一些困难抓住是如何适用于循环.这似乎是针对for循环.考虑经典问题:为什么在这种情况下使用let工作?在我的想象中,即使只有一个块是可见的,实际上为每个迭代创建一个单独的块,并且let声明在该块内部完成…我了解var和let之间的区别,并在上面说明了它们.我特别感兴趣的是,为什么不同的声明导致使用for循环的不同输出.解决方法IsthisjustsyntacticsugarforES6?

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部