Rõ ràng AJAX cải thiện giao diện người dùng nhưng điều này cũng làm giảm tải máy chủ? Bạn sẽ nghĩ như vậy bởi vì toàn bộ trang sẽ không phải được phục vụ mỗi lần, nhưng có thể có những biến khác mà tôi không xem xét.
Rõ ràng AJAX cải thiện giao diện người dùng nhưng điều này cũng làm giảm tải máy chủ? Bạn sẽ nghĩ như vậy bởi vì toàn bộ trang sẽ không phải được phục vụ mỗi lần, nhưng có thể có những biến khác mà tôi không xem xét.
Câu trả lời:
Nó phụ thuộc vào những gì bạn đang làm và cách bạn đang làm nó.
Nếu bạn thay thế tải trang đầy đủ bằng các yêu cầu AJAX (nghĩa là chỉ thực hiện các cuộc gọi AJAX khi người dùng nhấp vào tải trang đầy đủ) thì AJAX sẽ giảm tải máy chủ vì có lẽ bạn đang xử lý ít hơn và trả lại ít hơn dữ liệu.
Mặt khác, nếu bạn thêm loại AJAX tự động cập nhật, thăm dò máy chủ cứ sau vài giây thì có thể tăng tải tùy theo người dùng (dù sao thì người dùng vẫn không thể tăng F5 để làm mới thủ công, nhưng dù sao thì người dùng vẫn nhấn F5 để làm mới thủ công, nhưng hầu hết mọi người thường không làm điều đó trong nhiều giờ)
Một tối ưu hóa AJAX khác là chỉ tải thêm dữ liệu khi bạn cuộn. Trong trường hợp đó, nếu người dùng không cuộn xuống hết, điều đó gây lãng phí cho quá trình xử lý.
Tất nhiên thực tế thực hiện có thể sai lệch kết quả theo một trong hai cách, đây là những kết quả điển hình giả định thực hiện hợp lý tốt.
Tất nhiên nó phục vụ để giảm tải máy chủ. Hãy xem bản trình bày này @ jsconf'09 - để biết cách Facebook sử dụng ajax để làm điều đó.
Ajax không đồng bộ. giao tiếp máy chủ - và bạn có thể sử dụng nó theo vô số cách. Mọi người sử dụng nó để tải JSON đơn giản lên Web thời gian thực và mọi thứ ở giữa.
Hãy nhớ rằng - thách thức thực sự là sự cân bằng giữa máy khách và máy chủ. Cố gắng làm cho mỗi bên thực hiện công việc sao cho hệ thống được tối ưu hóa và bạn nhận được lợi ích rõ ràng của Phản hồi nhận thức và Tốc độ thực.
Có những yếu tố khác mà bạn không xem xét - trong hầu hết các trường hợp, AJAX sẽ tăng tải máy chủ. Trong một kịch bản điển hình, không phải ajax, người dùng sẽ tải một trang lớn cứ sau vài giây hoặc vài phút. Vâng, trang đơn đó là một công việc nhiều hơn cho máy chủ, nhưng nó có nhiều thời gian giữa các yêu cầu để phục hồi và phục vụ các yêu cầu khác. Trong một kịch bản AJAXified, tải trang đơn lẻ đó hiện có hàng chục lượt truy cập nhỏ, liên tục đập vào máy chủ và chờ phản hồi.
Nó giống như cái chết từ 1000 vết cắt - không có yêu cầu nào lớn và bản thân họ, nhưng tổng trọng lượng là một kẻ giết người. Đặc biệt là khi bạn bắt đầu xem xét rằng những yêu cầu nhỏ này chỉ tốn kém để phục vụ như một yêu cầu toàn trang. Trong cả hai trường hợp, có lẽ bạn đang chạy qua toàn bộ đường ống ứng dụng web, nhấn cơ sở dữ liệu và chờ câu trả lời trong khi ngồi trên kết nối HTTP quý giá.
Dưới đây là một ví dụ về cách ajax có thể trở nên xấu xí trên máy chủ thực sự nhanh chóng. Chúng ta hãy lấy một "bảng điều khiển" điển hình có 4 khe cho các vật dụng. Giả sử CEO thích một báo cáo bán hàng đầy đủ ở phía bên phải, danh sách 10 người kiếm tiền hàng đầu ở giữa và báo cáo giá cổ phiếu của công ty ở bên phải. Và giả sử chúng ta sẽ thực hiện điều này thông qua các yêu cầu từ xa ajax đơn giản. Không tính đến các bảng định kiểu tài khoản, hình ảnh và các tài sản khác, trang của bạn hiện yêu cầu 4 chuyến đi vòng HTTP (trang chính, mỗi báo cáo bảng điều khiển) đối với máy chủ. Mỗi trong số này yêu cầu một ngăn xếp web đầy đủ để thực thi - bạn sẽ truy cập cơ sở dữ liệu và hiển thị HTML bằng khung web của mình, phải không? Bây giờ nhân một CEO duy nhất với 2000 người dùng từ xa, một số người trong số họ có kết nối không chính xác.
Ngược lại, bạn có thể có một trang phía máy chủ thực thi và trả về bộ xương HTML cũng như dữ liệu (có trong JSON trong trang) để hiển thị các báo cáo. Tổng cộng, kết nối lớn hơn nhưng ít đập hơn trên máy chủ web vì bạn không xử lý 4 yêu cầu và quay 4 đường ống, v.v.
Nếu bạn đang sử dụng AJAX để thay thế công việc mà máy chủ sẽ thực hiện thì có, điều đó sẽ cải thiện hiệu suất của máy chủ. Tuy nhiên, bạn có thể đã thiết kế mọi thứ để máy chủ vẫn hoạt động nhiều như vậy và bây giờ bất cứ điều gì đang xảy ra với AJAX đều nằm trên những gì máy chủ đã làm.
Chủ yếu đây là về công cụ UI, vì bạn không nên làm bất cứ điều gì khác ở phía máy khách. Về cơ bản, bất cứ điều gì máy chủ đang làm để hỗ trợ UI (ví dụ: tải lại trang với bố cục khác để đáp ứng với đầu vào của người dùng) thay vào đó bằng JavaScript.
Nếu kết xuất HTML là một phần rất lớn trong hồ sơ hiệu suất của máy chủ ứng dụng của bạn, thì việc di chuyển kết xuất HTML sang máy khách có thể là một chiến thắng về hiệu suất trên máy chủ ứng dụng.
Tuy nhiên, nếu kết xuất HTML là một phần nhỏ trong hồ sơ hiệu suất của máy chủ ứng dụng của bạn, thì nhiều yêu cầu hơn thường có nghĩa là nhiều chuyến đi hơn trong ngăn xếp, nhiều truy vấn hơn, nhiều thứ hơn trên máy chủ ứng dụng, làm giảm hiệu suất.
Tất nhiên, cách duy nhất để biết trong trường hợp cụ thể của bạn là dùng thử.
Bạn phải xem xét cách tốt nhất để thực hiện giải pháp của bạn. Một hình thức không năng động đơn giản không cần ajax và thêm nó thực sự có thể gây hại cho sự hoàn hảo. Nếu vấn đề của bạn là các truy vấn xấu, tất cả tối ưu hóa ajax trên thế giới sẽ không giúp bạn tăng hiệu suất sẽ được chấp nhận.
Nếu máy chủ của bạn làm việc quá sức, bạn cần tìm hiểu tại sao.
Nếu bạn nhận được rất nhiều lượt truy cập thì ajax sẽ không khắc phục vấn đề đó mà bạn cần thêm dung lượng. Thêm ajax sẽ chỉ tăng số lượng yêu cầu mà máy chủ của bạn phải xử lý.
Nếu bạn có một trang phức tạp, bạn nên xem liệu có bất cứ điều gì bạn có thể làm phía máy khách để giảm tải cho máy chủ của mình không. Nếu trang của bạn động nhưng thực sự có bộ nhớ đệm gói dữ liệu hạn chế mà việc điều chỉnh phía máy khách có thể mang lại kết quả tốt hơn.
Và đôi khi Ajax sẽ giúp. Khi bạn có các hình thức phức tạp với dữ liệu động, ajax sẽ thắng trong ngày. Nhưng nếu bạn truy vấn phức tạp và mất nhiều thời gian để chạy thì ajax vẫn không giải quyết được vấn đề của bạn.