博主信息
博文 32
粉丝 0
评论 0
访问量 34957
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
Ajax理论(任务队列、事件循环、同步与异步)--2019年5月14日
ChenPJ的博客
原创
1435人浏览过

1. 什么是单线程

单线程在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行。

单线程就是进程里只有一个线程

多线程就是进程里有多个线程

单线程处理的优点:同步应用程序的开发比较容易,但由于需要在上一个任务完成后才能开始新的任务,所以其效率通常比多线程应用程序低。如果完成同步任务所用的时间比预计时间长,应用程序可能会不响应。

多线程处理的优点:可以同时运行多个过程。由于多线程应用程序将程序划分成独立的任务,因此可以在以下方面显著提高性能:

 多线程技术使程序的响应速度更快,因为用户界面可以在进行其他工作的同时一直处于活动状态。 当前没有进行处理的任务可以将处理器时间让给其他任务。 占用大量处理时间的任务可以定期将处理器时间让给其他任务。

可以随时停止任务。

可以分别设置各个任务的优先级以优化性能。


2. 事件循环


事件循环是什么?JS是单线程的,但是像Ajax,或是DOM事件这种很耗时的操作,需要用并发处理,否则单线程会长时间等待,什么也做不了。而单线程循环就是并发的一种形式,一个线程中只有一个事件循环。

3. 任务队列


任务队列是什么?故名思意,排着任务的队列。任务队列是用来配合事件循环完成操作的,一个线程可以拥有多个任务队列。所谓任务是WebAPIs返回的一个个通知,让JS主线程在读取任务队列的时候得知这个异步任务已经完成,下一步该执行这个任务的回调函数了。主线程拥有多个任务队列,不同的任务队列用来排列来自不同任务源的任务。任务源是什么?像setTimeout/Promise/DOM事件等都是任务源,来自同类任务源的任务我们称它们是同源的,比如setTimeout与setInterval就是同源的。

4. 同步(Sync)

所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或继续执行后续操作。我们在说同步、异步的时候,一般而言是特指那些需要其他端协作或者需要一定时间完成的任务。简单来说,同步就是必须一件一件事做,等前一件做完了才能做下一件事。

例如:表单提交,具体过程是:客户端提交请求->等待服务器处理->处理完毕返回,在这个过程中客户端(浏览器)不能做其他事。

5. 异步(Async)

异步与同步相对,当一个异步过程调用发出后,调用者在没有得到结果之前,就可以继续执行后续操作。当这个调用完成后,一般通过状态、通知和回调来通知调用者。对于异步调用,调用的返回并不受调用者控制。

对于通知调用者的三种方式,具体如下:

状态
即监听被调用者的状态(轮询),调用者需要每隔一定时间检查一次,效率会很低。

通知
当被调用者执行完成后,发出通知告知调用者,无需消耗太多性能。

回调
与通知类似,当被调用者执行完成后,会调用调用者提供的回调函数。

例如:ajax请求,具体过程是:客户端发出ajax请求->服务端处理->处理完毕执行客户端回调,在客户端(浏览器)发出请求后,仍然可以做其他的事。

总结来说,同步和异步的区别:请求发出后,是否需要等待结果返回,才继续执行其他操作。


增加购物车的编辑按钮功能


实例

    function edit(ele) {
        var td = ele.parentElement.previousElementSibling;
        // 获取原始内容
        var oldContent = td.innerHTML;

        // 设置编辑对话框
        var  newContent = prompt('请输入新的内容:', oldContent);
        // 点击了确定
        if (newContent !== null) {
            td.innerHTML = newContent;
        } else {
            // null
            return false;
        }
    }

运行实例 »

点击 "运行实例" 按钮查看在线实例

批改状态:未批改

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学