js异步加载

js是单线程,就是说一次只能执行一个任务,若是须要执行多个须要排队依次执行(同步加载),但有时候任务须要长时间执行,js顺序加载执行的话,会至关慢,形成卡死、无响应等现象,浏览器端,耗时长的操做都应该考虑异步加载。javascript

js单线程执行,因此异步请求是由浏览器新开一个线程请求,当请求的状态变动时,若是先前已设置回调,这异步线程就产生状态变动事件放到JavaScript引擎的处理队列中等待处理。java

一,回调函数

最经常使用的就是ajax异步请求,向服务器端发POST/GET请求,服务器完成操做后回调js中函数ajax

假定有两个函数f1和f2,后者等待前者的执行结果。  浏览器

f1();

f2();

若是f1是一个很耗时的任务,能够考虑改写f1,把f2写成f1的回调函数。服务器

  function f1(callback){

    setTimeout(function () {

      // f1的任务代码

      callback();

    }, 1000);

  }

    function f2(){

        alert('f2');

    }

    //执行代码就变成下面这样:

  f1(f2);

采用这种方式,咱们把同步操做变成了异步操做,f1不会堵塞程序运行,至关于先执行程序的主要逻辑,将耗时的操做推迟执行。异步

二,事件

为页面元素或者方法绑定事件,当元素或事件知足触发操做时,调用事件的函数函数

f1.on('done', f2);

上面这行代码的意思是,当f1发生done事件,就执行f2。而后,对f1进行改写:  spa

function f1(){

    setTimeout(function () {

      // f1的任务代码

      f1.trigger('done');

    }, 1000);

  }
相关文章
相关标签/搜索