Người Viết : ViKiMi Editor

Những điều bạn cần nắm bắt về xử lý đồng bộ và bất đồng bộ với Ajax .
Như chúng ta đã biết sự tối ưu của dùng Ajax chính là việc xử lý dữ liệu bất đồng bộ với Server. Chính dữ liệu được xử lý đi bất đồng bộ giúp tiết kiệm thời gian và tài nguyên máy. Khi thực hiện hiện công việc thì mã Code xử lý tại giao diện người dùng ( Ở đây là Javascript) và xử lý của Server sẽ không phải dành thời gian để thực hiện 1 công việc cho xong rồi mới chuyển sang thực hiện công việc khác, mà khi đó mã Code xử lý tại giao diện người dùng và xử lý của Server sẽ chọn cách thực hiện công việc tuần tự thành các phiên khác nhau, công việc sẽ được hoàn thành qua nhiều phiên làm việc. Các phiên làm việc là các lần trao đổi dữ liệu giữa Browser phía người dùng và máy chủ Server.
Chúng ta giả sử rằng nếu không có xử lý bất đồng bộ như trên thì Mã Code phía Browser và Server sẽ hoạt động như thế nào? Chắc chắn Mã Code phía Browser và Server sẽ dành thời gian để thực hiện một công việc cho xong, tiếp đến mới thực hiện một công việc mới. Nếu công việc đang thực hiện xảy ra lỗi khiến Server phải tốn thời gian vĩnh cửu để làm thì thật tai hại, Server sẽ gặp sự cố khiến nó bị rơi vào trạng thái Busy hoặc chậm. Tất nhiên là nhà sản xuất đã tính toán rất kỹ điều này. Nếu Server dành thời gian quá lâu vượt thời gian timeout để làm một công việc thì tự động Server sẽ kết thúc công việc và thông báo lại rằng Công Việc đã quá thời gian Timeout, Lỗi đã phát sinh. Nhưng điều này cũng thật tai hại vì chúng ta đã gặp phải tình huống là:
+ Browser phía người dùng bị treo do Javacript sẽ chờ phản hồi của máy chủ và không thực hiện công việc nào khác nữa. Nếu không có phản hồi nào thì nó vẫn chờ. Khi có lỗi xảy ra thì chúng ta chỉ có thể throw một ngoại lệ Exception InvalidAccessError để khiến cho Javascript tiếp tục công việc trong throw Exception là đưa ra thông báo đến người dùng là đã có lỗi phát sinh cùng nguyên nhân của lỗi. Khi đó giúp giải thoát Browser phía người dùng khỏi tình trạng treo.
+ Máy chủ Server bị rơi tình trạng Busy hoặc chậm.

Trong xử lý của Ajax cũng cho phép chúng ta có 2 xử lý là :
+ Xử lý Bất đồng bộ . Xử lý được dùng chủ yếu
+ Xử lý đồng bộ . Xử lý chỉ dùng trong các trường hợp thực hiện Test kiểm tra
XỬ LÝ BẤT ĐỒNG BỘ
Để thực hiện xử bất đồng bộ thì tham số truyền vào function OPEN sẽ là TRUE. Chúng ta có như sau:
var xhttp = new XMLHttpRequest();
……
xhttp.open("GET", "ajax_service.php", true);
xhttp.send();
XỬ LÝ ĐỒNG BỘ
Để thực hiện xử bất đồng bộ thì tham số truyền vào function OPEN sẽ là FALSE. Chúng ta có như sau:
xhttp.open("GET", "ajax_service.php", false);
xhttp.send();
document.getElementById("id_HTML_Covert_Name_Worker").innerHTML = xhttp.responseText;
Chú ý rằng khi thực hiện xử lý đồng bộ chúng ta sẽ không cần xử lý hàm của onreadystatechange. Tại sao lại như vậy? Câu trả lời vì khi thực hiện xử lý đồng bộ thì mã code sẽ chờ Server hoàn thành. Vì vậy sẽ chỉ có một xử lý mà thôi. Chính vì thế chúng ta có trình tự code như trên.
Chúng ta không nên sử dụng xử lý đồng bộ vì Code Javascipt của chúng ta sẽ ngừng hoạt động cho tới khi Server hồi đáp. Giả sử Server bị quá busy hoặc chậm, khi đó ứng dụng sẽ bị chậm hoặc treo.
Hiện nay, xử lý đồng bộ đang bị xoá khỏi web tiêu chuẩn. Tất cả các Công cụ lập trình hiện đại hiện nay đều đưa ra cảnh báo khi bạn sử dụng xử lý đồng bộ trong lập trình.
Nếu xử lý đồng bộ xảy ra lỗi thì có thể throw một ngoại lệ / Exception là
InvalidAccessError. Với throw Exception này chúng ta có thể đưa ra các thông báo về lỗi đã xảy ra để người dùng nhận biết.

Image : AJAX how to work .