Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

关于异步函数的一些随想

  在很多现有的前端框架中,大部分方法的封装都是同步的。甚至不仅是JavaScript在大部分语言中,同步方法都占了绝大部分。但我觉得,同步方法虽然使用方便,但也有它的不足之处。所以应该提供一个与之对应的异步版本,就像NodeJS对外部资源操作那样。
  举个不太恰当的例子。document.querySelector这个方法如果遇上复杂的表达式,它的效率就会很低(当然,很少有这么奇葩的表达式存在,这里只是举个例子)。所以我希望这个方法有一个异步版本。我们都知道,DOM操作速度是Web性能的一个瓶颈,在存在大量DOM操作的程序中,程序总是在等待DOM操作完成,那为何不把DOM操作做成异步,让主线程做更有意义的事情呢?
  当然,异步方法的使用比较繁琐。很多时候同步执行会非常方便。因为我们都知道程序是顺序执行的,如果上一行代码可以在完成它的任务后再执行下一行代码,这些代码就可以一行行顺序地写下来。如果是异步代码,就需要在上一个操作完成后通过一个回调函数来触发之后要做的动作。如果所有函数都是异步的,那么整个代码就是一个回调地狱,看起来整个代码都挂满了回调函数。如果真是这样的话,所有函数都异步是非常让人讨厌的。
  但是一些东西可以简化这样层叠的回调函数。比如ES6的Generator、Promise等。Generator在浏览器上暂时没法使用,而且我本身也不喜欢Generator的设计,所以暂时不扯它。除了Generator之外,我们还有Promise可以用。但比起同步代码,Promise依然是大堆回调函数,只不过他们的关系由原来的层叠变成了并列而已。jQuery的封装中,对一些东西已经使用了类似Promise的思想,它也只是把烦人的嵌套回调改成平行回调而已。但是Promise的设计理念,非常好,说它麻烦只是因为JavaScript的函数定义太麻烦,回调要用到函数,所以麻烦。但这不必担心,因为ES6的ArrowFunctions解决了函数定义麻烦的问题。我觉得把Promise和ArrowFunctions结合起来,异步方法的使用就可以方便很多。
  其实这篇文章起草时我自己的中心思想都不明确。想抱怨一下DOM操作的同步,又想推广下异步操作与一些新概念。甚至脑子里有一种封装一个纯异步操作框架的想法。因为我厌倦了函数以返回值形式传递数据的做法,觉得Promise的设计理念也许比传统的函数设计更科学。
网名:
52.91.185.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^