欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript多并發(fā)問題如何處理

 更新時間:2015年10月28日 10:57:57   投稿:mrr  
這篇文章給大家介紹javascript多并發(fā)問題處理方法,涉及到js多并發(fā)處理方法相關知識,對js多并發(fā)處理方法感興趣的朋友可以參考下本文

經常在寫代碼的時候碰到這樣的場景:頁面初始化時顯示loading頁,同時啟動多個ajax并發(fā)請求獲取數據,當每個ajax請求返回時結束loading。

舉個例子,一個下訂單的頁面,要查詢常用地址信息、商品信息、地市信息…而這些請求都是異步的,希望等到所有數據加載完成后再允許用戶操作。

要實現這個場景容易碰到的一個問題就是多并發(fā)怎么控制?下面是一些解決方法和思路:

并行改為串行

如果業(yè)務邏輯本身是串行的,但是提供的請求方式又是異步的,可以考慮此方法。
但本場景顯然不是這種情況,這樣做大大降低了頁面性能,延長了加載速度。

回調

只適合并發(fā)數少的情況,多層嵌套回調會讓代碼的可讀性大大降低

function async1(){
  //do sth...
}
function async2(){
  //do sth...
  async1();
}
async2();

ajax改為同步

如在jquery中將async參數設置為false

$.ajax({
  url:"/jquery/test1.txt",
  async:false
});

設置結束標識

簡單一點的可以設置計數器,每完成一個異步函數加1,或者設置一個數組,每執(zhí)行完一個異步函數更新數組。

回調計數

var cnt = 0;
function async1(){
  //do sth...
  callback();
}
function async2(){
  //do sth...
  callback();
}
function callback(){
  cnt++;
  if(2==cnt) console.log('都已執(zhí)行完畢');
}

循環(huán)阻塞

var cnt = 0;
function async1(){
  //do sth...
  cnt++;
}
function async2(){
  //do sth...
  cnt++;
}
while(2>cnt){}

循環(huán)非阻塞

不建議過多使用,以免影響性能

var cnt = 0;
function async1(){
  //do sth...
  cnt++;
}
function async2(){
  //do sth...
  cnt++;
}
var interval = setInterval(function(){
  if(2===cnt){
    console.log('已執(zhí)行完成');
    clearInterval(interval)
  }
}

第三方框架實現

jquery

目前我在項目中采用的方式

var d1 = $.Deferred();
var d2 = $.Deferred();
function async1(){
  d1.resolve( "Fish" );
}
function async2(){
  d2.resolve( "Pizza" );
}
$.when( d1, d2 ).done(function ( v1, v2 ) {
  console.log( v1 + v2 + '已完成');
});

以上內容是小編給大家介紹的關于JavaScript多并發(fā)問題如何處理的相關知識,希望對大家有所幫助。

相關文章

  • Javascript絕句欣賞 一些經典的js代碼

    Javascript絕句欣賞 一些經典的js代碼

    Javascript絕句欣賞 一些經典的js代碼整理,學習js的朋友可以參考下
    2012-02-02
  • 淺談小程序 setData學問多

    淺談小程序 setData學問多

    這篇文章主要介紹了淺談小程序 setData學問多,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • js給onclick賦值傳參數的兩種方法

    js給onclick賦值傳參數的兩種方法

    這篇文章主要介紹了js給onclick賦值傳參數的兩種方法,有需要的朋友可以參考一下
    2013-11-11
  • DIV菜單層實現代碼

    DIV菜單層實現代碼

    昨天我問一美工jQuery怎么樣了,他說簡單的還可以,復雜的就不行了,我又問是哪種程度的復雜?
    2010-11-11
  • 通過button將form表單的數據提交到action層的實例

    通過button將form表單的數據提交到action層的實例

    下面小編就為大家?guī)硪黄ㄟ^button將form表單的數據提交到action層的實例。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • JS利用cookie記憶當前位置的防刷新導航效果

    JS利用cookie記憶當前位置的防刷新導航效果

    這篇文章主要介紹了JS利用cookie記憶當前位置的防刷新導航效果,涉及JavaScript操作cookie及導航樣式布局的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • WordPress 單頁面上一頁下一頁的實現方法【附代碼】

    WordPress 單頁面上一頁下一頁的實現方法【附代碼】

    下面小編就為大家?guī)硪黄猈ordPress 單頁面上一頁下一頁的實現方法【附代碼】。小編覺得非常不錯。給大家分享一下。希望能給大家一個參考。
    2016-03-03
  • js canvas實現擦除動畫

    js canvas實現擦除動畫

    在移動設備上將某張圖片擦掉顯示另一張圖片,利用canvas來實現這篇文章就為大家詳細介紹了js canvas實現擦除動畫的相關資料,感興趣的小伙伴們可以參考一下
    2016-07-07
  • ES6中參數的默認值語法介紹

    ES6中參數的默認值語法介紹

    這ES6允許為函數參數設置默認值,即直接寫在參數定義后面。下面篇文章主要介紹了ES6中參數默認值語法的相關資料,對大家具有一定的參考價值,需要的朋友下面來一起看看吧。
    2017-05-05
  • js判斷當前頁面用什么瀏覽器打開的方法

    js判斷當前頁面用什么瀏覽器打開的方法

    這篇文章主要介紹了js判斷當前頁面用什么瀏覽器打開的方法,需要的朋友可以參考下
    2016-01-01

最新評論