在response.write()内部执行缓慢的函数调用是否阻止了事件循环?

时间:2012-01-31 23:00:42

标签: node.js

所以,在阅读了一些关于非阻塞代码之后,确实......

response.write(thisWillTakeALongTime());

...阻止这个过程?如果是这样,我们是否需要将响应传递给我们制作的几乎所有慢函数调用,并让该函数处理响应?

感谢您帮助澄清!

2 个答案:

答案 0 :(得分:2)

是的,它会阻止事件循环。并且将响应对象传递给慢速函数将无济于事,无论您在何处调用慢速函数,都将阻止事件循环。

至于如何修复它,我们需要更多信息。

是什么让慢速功能变慢?你在进行大型计算吗? 你在做文件/数据库调用的同步版本吗?

答案 1 :(得分:1)

这取决于您对流程的意思。此时Web服务器已经完成为页面提供服务js将执行但是请求是同步的,因此javascript将继续将其用于您的函数,直到它返回,即使花费数年也是如此。 (希望在这一点上,浏览器会检测到你的脚本花了太长时间并让你有机会杀死它)。即使你仍然遭受用户不得不杀死你的javascript功能并且他们无法使用该页面的尴尬。

那么你如何解决这个问题呢?这个特别重要的时候是你的js出现问题的时候,因为在这一点上,一大堆东西都会出错。想象一下,您的用户位于地球的另一端。网络延迟可能会让你的js痛苦地缓慢。当使用ajax时,最好使用绕过它的异步请求。我个人建议使用jquery,因为它使异步ajax调用非常简单,并且侧面的文档非常简单。我推荐的另一件事是使返回输出变小。最好返回json输出并从中构建所需的html。