2010-07-12 50 views
5

Tôi tự hỏi sự đồng thuận là bao nhiêu yêu cầu ajax không đồng bộ đồng thời thường được cho phép.Số lượng ajax đồng bộ, không đồng bộ yêu cầu

Lý do tôi hỏi, là tôi đang làm việc trên một ứng dụng web cá nhân. Đối với hầu hết các phần tôi giữ yêu cầu của tôi xuống một. Tuy nhiên có một vài tình huống mà tôi gửi tới 4 yêu cầu cùng một lúc. Điều này gây ra một chút chậm trễ, vì trình duyệt sẽ chỉ xử lý 2 tại một thời điểm.

Sự chậm trễ không phải là vấn đề về khả năng sử dụng, hiện tại. Và nó sẽ được một thời gian trước khi tôi phải lo lắng về khả năng mở rộng, nếu bao giờ hết. Nhưng tôi đang cố gắng tuân theo các thực hành tốt nhất, nhiều như là hợp lý. Quan điểm của bạn là gì? 4 có yêu cầu một số hợp lý không?

Trả lời

2

Điều đó thực sự phụ thuộc vào nếu nó hoạt động như thế đúng cách. Nếu logic của ứng dụng được xây dựng mà 4 yêu cầu đồng thời có ý nghĩa, hãy làm như thế này. Nếu logic không bị xáo trộn bằng cách đóng gói nhiều yêu cầu vào một yêu cầu, bạn có thể làm điều đó, nhưng chỉ khi nó không làm cho mã phức tạp hơn. Giữ nó đơn giản và thẳng về phía trước cho đến khi bạn gặp vấn đề, sau đó bạn có thể bắt đầu tối ưu hóa.

Nhưng bạn có thể tự hỏi liệu thiết kế của ứng dụng có thể được cải thiện mà không cần nhiều yêu cầu.

Đồng thời kiểm tra kết nối thực sự chậm. Các yêu cầu http đồng thời không nhất thiết được thực hiện trên máy chủ theo thứ tự đúng và chúng cũng có thể trả về theo thứ tự khác. Điều đó có thể gây ra sự cố mà bạn sẽ chỉ gặp phải trên các dòng chậm hơn.

2

Thật khó để trả lời mà không biết một số chi tiết. Nếu bạn chỉ cần kích hoạt các yêu cầu và quên chúng, thì 4 yêu cầu có thể tốt, như có thể 20 - miễn là trải nghiệm người dùng không bị ảnh hưởng bởi hiệu suất chậm. Nhưng nếu bạn phải thu thập thông tin từ dịch vụ, thì việc điều phối những phản hồi đó có thể trở nên phức tạp. Đó có thể là một cái gì đó để xem xét.

Câu trả lời trước của Christian có điểm tốt - hãy kiểm tra kết nối chậm. Fiddler có thể giúp với điều đó vì nó cho phép bạn kiểm tra các kết nối chậm bằng cách mô phỏng các tốc độ kết nối khác nhau (56K trở lên). Bạn cũng có thể xem xét kích hoạt một yêu cầu không đồng bộ đơn lẻ có thể chứa một hoặc nhiều tin nhắn đến một dịch vụ kiểm soát, sau đó có thể đưa tin nhắn đến các dịch vụ thích hợp, thu thập kết quả và sau đó quay lại máy khách. Có nhiều yêu cầu không đồng bộ được kích hoạt và sau đó quay trở lại vào các thời điểm khác nhau có thể mang đến trải nghiệm cho người dùng vì mỗi phản hồi sẽ được hiển thị trên trang tại các thời điểm khác nhau.

0

Tôi không phải là chuyên gia về mạng, nhưng có lẽ bốn sẽ không có nhiều vấn đề đối với ứng dụng vừa và nhỏ, tuy nhiên, càng lớn thì tải máy chủ càng cao, điều này có thể gây ra sự cố. Điều này thực sự không trả lời câu hỏi của bạn, nhưng đây là một gợi ý. Nếu chậm trễ không phải là một vấn đề tại sao bạn không sử dụng hàng đợi.

var request = []//a queue of the requests to be sent to the server 

request[request.length] = //whatever you want to send to the server 
startSend(); 

function startSend(){//if nothing is in the queue go ahead and send this one 
    if(request.length===1){ 
    send(); 
    } 
} 

function send(){//the ajax call to the server using the first request in queue 
    var sendData = request[0]; 
    //code to send the data 
    //then when you get the response (I can't remember exactly the code for it) 
    //send it to a function to process the data 
} 

function process(data){ 
    request.splice(0,1); 
    if(request.length>0){//check to see if you need to do another ajax call 
    send(); 
    } 
    //process data 
} 

Đây có lẽ không phải là cách tốt nhất để làm điều đó, nhưng đó là ý tưởng bạn có thể sửa đổi nó để thực hiện 2 yêu cầu thay vì chỉ một. Ngoài ra, có thể bạn có thể sửa đổi nó để gửi bao nhiêu yêu cầu vì chúng nằm trong hàng đợi như một yêu cầu. Sau đó, máy chủ chia tách chúng và xử lý từng máy chủ và gửi lại dữ liệu. Tất cả cùng một lúc hoặc ngay cả khi nó được nó kể từ khi máy chủ có thể tuôn ra dữ liệu nhiều lần. Bạn chỉ cần đảm bảo rằng bạn đang phân tích cú pháp văn bản phản hồi chính xác.

0

Trong kinh nghiệm của tôi 1 là số tốt nhất, nhưng tôi sẽ đồng ý có thể có một số trường hợp hiếm hoi có thể yêu cầu các cuộc gọi đồng thời.Nếu tôi gọi lại, IE là trình duyệt duy nhất vẫn giới hạn kết nối đến 2. Điều này làm cho các yêu cầu của bạn được xếp hàng và nếu 2 yêu cầu đầu tiên của bạn mất nhiều thời gian hơn dự kiến ​​hoặc thời gian chờ, hai yêu cầu khác sẽ tự động bị lỗi. Trong một số trường hợp, bạn cũng nhận được hộp thoại "cho phép tập lệnh tiếp tục" gây phiền nhiễu trong IE.

Nếu người dùng của bạn không thể thực hiện bất cứ điều gì cho đến khi tất cả 4 yêu cầu quay trở lại (đặc biệt với hiệu năng JavaScript của IE), tôi sẽ tạo đối tượng truyền tải chứa dữ liệu cho tất cả yêu cầu và sau đó là đối tượng truyền tải có thể được phân tích cú pháp và ủy nhiệm khi trả lại.

4

Tôi chắc chắn trình duyệt giới hạn số lượng kết nối bạn có thể có.

Nếu bạn có Firefox, hãy nhập about:config và tìm kiếm network.http.max-connections-per-server và điều đó sẽ cho bạn biết số tiền tối đa của bạn. Tôi gần như tích cực rằng đây sẽ là giới hạn cho các kết nối AJAX. Tôi nghĩ IE bị giới hạn ở 2. Tôi không chắc về Chrome hay Opera.

Edit:

Trong Firefox 23 sở thích với tên network.http.max-connections-per-server không tồn tại, nhưng có một network.http.max-persistent-connections-per-server và giá trị mặc định là 6.

Các vấn đề liên quan