博客列表 >Ajax理论(任务队列、事件循环、同步与异步)--2019年5月14日

Ajax理论(任务队列、事件循环、同步与异步)--2019年5月14日

ChenPJ的博客
ChenPJ的博客原创
2019年05月15日 14:38:321165浏览

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 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议