JavaScript多线程详解

 更新时间:2015年08月12日 11:08:43   作者:dsq1030  
虽然有越来越多的网站在应用AJAX技术进行开发,但是构建一个复杂的AJAX应用仍然是一个难题。接下来小编给大家介绍JavaScript多线程,需要的朋友可以参考下

虽然有越来越多的网站在应用AJAX技术进行开发,但是构建一个复杂的AJAX应用仍然是一个难题。

造成这些困难的主要原因是什么呢?是与服务器的异步通信问题?还是GUI程序设计问题呢?通常这两项工作都是由桌面程序来完成的,那究竟为何开发一个可以实现同样功能的AJAX应用就这么困难呢?

大家都知道javascript是单线程执行的,但是又可以通过setTimeout或者setInterval定时执行一个方法,通过Ajax可以在向服务器端发送请求没有收到回应可以继续执行主逻辑。这些是如何做到的呢,下面就来探讨下。

先看如下一段代码:

<html>
  <body>
  <script type="text/javascript">
    function printHello()
    {
      console.time("hello");
    }
    function printHello1()
    {
      console.timeEnd("hello");
    }
    setTimeout(printHello,1000);
    setTimeout(printHello1,5000);
    function wait(time)
    {
      var now = Date.now();
      while(Date.now() - now < time)
      {
      }
    }
    wait(5000);
  </script>
  </body>
</html>

以上代码得执行结果为

hello: 0.124ms

从代码可以看出,printHello 与printHello1几乎是同时执行的。如果对于多线程模型,应该执行间隔是4000ms。

以上的原因是setTimeout只是将事件到时间点压入队列,而不是立即执行。具体何时执行还要看浏览器的空闲程度。

其实虽然javascript是单线程的,但是浏览器是多线程的,典型的浏览器有如下线程:

javascript引擎线程
界面渲染线程
浏览器事件触发线程
Http请求线程

javascript单线程指的是javascript引擎线程单线程处理它的事件队列,而浏览器是事件驱动的,很多事件都是异步的,比如鼠标点击事件,setTimeout,Ajax回调事件,当这些事件发生时,浏览器会将这些事件放入执行队列,待浏览器空闲时再执行。

另外,值得一提的是,ajax调用确实是异步的,浏览器会启动一个新线程来想服务端发送请求,如果设置了回调事件,会根据服务端返回状态将回调事件放入事件队列。

以上所述是本人对JavaScript多线程的理解,个人理解能力有限,还望各位大侠提成宝贵意见,共同学习。希望以上介绍对大家有所帮助。

相关文章

  • JavaScript降低代码圈复杂度优化技巧

    JavaScript降低代码圈复杂度优化技巧

    当一个项目经过持续迭代,不断增加功能,逐渐变成一个复杂的产品时,新功能的开发变得相对困难,其中一个很大的原因是代码复杂度高,导致可维护性和可读性都很差,本文将从前端JavaScript的角度出发,介绍一些有效的方法和技巧来优化前端代码的圈复杂度
    2023-10-10
  • js实现点击切换和自动播放的轮播图

    js实现点击切换和自动播放的轮播图

    这篇文章主要为大家详细介绍了js实现点击切换和自动播放的轮播图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • 表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题

    表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题

    这篇文章主要介绍了表单input项使用label,同时引用Bootstrap库,导致input点击效果区增大问题的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • JS上传图片前的限制包括(jpg jpg gif及大小高宽)等

    JS上传图片前的限制包括(jpg jpg gif及大小高宽)等

    文件上传之前的检测,通常是通过文件名来判断文件类型是否合法,但是要想检测文件的大小很难办到,除非在本地或者使用控件。使用JS可以轻松解决词问题,js在上传图片前判断大小 这个可以用javascript实现,效果
    2012-12-12
  • 关于JSONP跨域请求原理的深入解析

    关于JSONP跨域请求原理的深入解析

    JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题,这篇文章主要给大家介绍了关于JSONP跨域请求原理的相关资料,需要的朋友可以参考下
    2022-01-01
  • js实现导航跟随效果

    js实现导航跟随效果

    这篇文章主要为大家详细介绍了js实现导航跟随效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • Jquery+javascript实现支付网页数字键盘

    Jquery+javascript实现支付网页数字键盘

    这篇文章主要为大家详细介绍了Jquery+javascript实现支付网页数字键盘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • 学习使用Bootstrap输入框、导航、分页等常用组件

    学习使用Bootstrap输入框、导航、分页等常用组件

    这篇文章主要教大家学习使用Bootstrap输入框、导航、分页等常用组件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • 理解javascript中的with关键字

    理解javascript中的with关键字

    这篇文章主要帮助大家理解javascript中的with关键字,学习with关键字的作用,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • 微信小程序滑块验证实现方法

    微信小程序滑块验证实现方法

    这篇文章主要介绍了微信小程序滑块验证方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01

最新评论