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

  }
相關文章
相關標籤/搜索