Blogger Information
Blog 32
fans 0
comment 0
visits 28179
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
Ajax理论(任务队列、事件循环、同步与异步)--2019年5月14日
ChenPJ的博客
Original
1167 people have browsed it

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;
        }
    }

运行实例 »

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

Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments