首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

AJAX 同步與非同步請求優缺點對比:回調地獄與阻塞 UI 的權衡

     編輯:程式設計疑難解答

同步(async: false)

優點缺點
代碼線性,易讀寫
直接返回值,無需回調
阻塞主執行緒,頁面假死
瀏覽器可能彈出「腳本無響應」
無法並發多個請求
已被標準廢棄(主執行緒除外)

非同步(async: true)

優點缺點
不阻塞 UI,用戶可繼續操作
可並發多請求
符合現代 Web 標準
回調地獄(Callback Hell)
錯誤處理分散
變量作用域易出錯

代碼對比

同步

function getRst() {
  var xhr = new XMLHttpRequest();
  xhr.open('GET', 'url', false); // 同步
  xhr.send(null);
  return xhr.responseText;
}
var r = getRst();
alert(r);

非同步 + 回調

function getRst(callback) {
  var xhr = new XMLHttpRequest();
  xhr.open('GET', 'url', true);
  xhr.send(null);
  xhr.onreadystatechange = function() {
    if (xhr.readyState === 4) callback(xhr.responseText);
  };
}
getRst(function(r) { alert(r); });

現代最佳實踐:async/await + fetch

async function getRst() {
  const resp = await fetch('url');
  return resp.text();
}
getRst().then(r => alert(r)).catch(console.error);

總結

**生產環境嚴禁同步 AJAX**。統一使用 fetch/axios + async/await,配合統一錯誤處理攔截器,代碼既線性又非阻塞。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved