2012-06-18 42 views
6

Tôi đang làm việc trên một số loại giao diện người dùng đa biên tập/coop trực tuyến, sẽ thực hiện rất nhiều (như trong, hàng nghìn) yêu cầu ajax trong suốt thời gian tồn tại của một trang.Trang chuyên sâu Ajax: sử dụng lại cùng một đối tượng XMLHttpRequest hoặc tạo một đối tượng mới mỗi lần?

gì sẽ là tốt nhất: (tránh 'tốt nhất' về sự ổn định, tính tương thích, rắc rối)

  1. Tạo một đối tượng XMLHttpRequest và tái sử dụng mà cho mọi yêu cầu HTTP

  2. Tạo một XMLHttpRequest mới đối tượng cho mọi yêu cầu HTTP

  3. Quản lý 'hồ bơi' động của các đối tượng XMLHttpRequest, tạo đối tượng mới khi bắt đầu yêu cầu HTTP và không có đối tượng hiện có nào và gắn thẻ cho một ô được tạo trước đó bject là 'available' khi yêu cầu cuối cùng của nó được hoàn tất thành công

Tôi nghĩ 1 không phải là một tùy chọn, có thể yêu cầu mới, trong khi yêu cầu mới vẫn chưa hoàn thành, v.v.

Đối với 2, tôi đoán đây là rò rỉ bộ nhớ hoặc có thể dẫn đến việc sử dụng bộ nhớ/tài nguyên mất trí. Hoặc tôi có thể bằng cách nào đó đóng hoặc xóa một đối tượng khi yêu cầu của nó được hoàn thành? (ở đâu/như thế nào?) Hoặc bộ thu gom rác JS có thực hiện đúng cách này không?

Không bao giờ thử 3 trước đây nhưng nó cảm thấy như là tốt nhất của cả hai thế giới. Hoặc là một cách tiếp cận như vậy không cần thiết, hoặc tôi vẫn còn thiếu các vấn đề tiềm năng? Chính xác khi nào tôi có thể giả định một yêu cầu được hoàn thành (do đó, đối tượng có sẵn cho một yêu cầu mới), đó là khi nhận readyState 4 và trạng thái http 200? (ví dụ: tôi có thể chắc chắn không có thêm cập nhật hoặc gọi lại nào sau đó không?)

+0

Chỉ cần tự hỏi những gì máy chủ bạn có kế hoạch sử dụng và những gì internet bạn đã nối với điều này bởi vì kịch bản này nếu bạn là chính xác với hàng ngàn yêu cầu là vô cùng tài nguyên sử dụng – gabeio

+0

Tôi đã có một máy chủ chuyên dụng tàn bạo sẵn cho việc này. Nhưng hàng ngàn yêu cầu chỉ được dự kiến ​​sẽ được thực hiện trong quá trình vài giờ, nó không giống như một yêu cầu mỗi giây hoặc lâu hơn. Giống như một vài phút, nhưng nó có thể tiếp tục làm điều đó trong nhiều giờ. –

+0

cũng tốt javascript sẽ làm tốt nếu bạn cần thậm chí nhanh hơn tức là một yêu cầu mỗi giây tôi sẽ đề nghị sử dụng flash hoặc applet java – gabeio

Trả lời

3

Tạo tài khoản mới khi bạn cần. GC sẽ đối phó với những cái cũ một khi họ không cần thiết nữa.

Tuy nhiên, đối với một thứ như trình soạn thảo hợp tác, bạn có thể cân nhắc sử dụng WebSockets thay vì gửi yêu cầu mọi lúc. Chi phí của một yêu cầu HTTP nhỏ là rất lớn trong khi hầu như không có chi phí với kết nối WebSocket.

+0

Cảm ơn, tôi sẽ đi một cách dễ dàng (chỉ đơn giản là tạo một đối tượng mới mọi lúc) và xem vào WebSockets. Chỉ cần chắc chắn, bạn đang đề cập đến điều HTML5 websocket HTML5 mới, phải không? –

+1

Có, và có thể là một thư viện như 'socket.io' để xử lý dự phòng XHR một cách tự động nếu cần. – ThiefMaster

+0

Ah, chưa bao giờ nghe nói về điều đó trước đây, cảm ơn! Một điều mặc dù, trong các ví dụ mã trên http://socket.io/ nó có vẻ như sử dụng mã JavaScript phía máy chủ? Ai hoặc những gì được cho là để thực thi mã đó? –

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