shinena / myProject

1 stars 0 forks source link

《你不知道的Javascript》:异步和性能 #59

Open shinena opened 1 year ago

shinena commented 1 year ago

异步:现在与将来

Javascript程序总是至少分为两个块:第一块现在运行;下一块将来运行,以响应某个事件。 一旦有事件需要运行,事件循环就会运行,直到队列清空。事件循环的每一轮称为一个tick。用户交互、IO和定时器会向事件队列中加入事件。任意时刻,一次只能从队列中处理一个事件。执行事件的时候,可能直接或间接地引发一个或多个后续事件。 并发是指两个或多个事件链随时间发展交替执行,以至于从更高的层次来看,就像是同时在运行(尽管在任意时刻只处理一个事件)。

shinena commented 1 year ago

回调

回调函数是Javascript异步的基本单元。 但是随着Javascript原来越成熟,对于异步编程领域的发展,回调已经不够用了。

  1. 回调表达异步流程的方式是非线性、非顺序的,这使得正确推导代码的难度很大。(顺序性)
  2. 回调会受到控制反转的影响,因为回调暗中把控制权交给第三方来调用代码中的continuation。会造成信任问题,比如回调被调用的次数是否会超出预期。(信任性)
  3. 可以发明一些逻辑解决这些问题,但是难度高于应有水平,可能会产生更难以维护的代码,并且不容易被发现。