2012-07-09 30 views
8

Tôi đoán câu hỏi là loại tải, nhưng tôi muốn có một số phản hồi. Hiện tại tôi đang xây dựng các đối tượng lớp poco từ các dịch vụ web thông qua dtos. Tôi tải trước tất cả các giá trị vô hướng và tải xuống tất cả các bộ sưu tập/mảng, bao gồm cả các tệp nhị phân của khóa học.Tôi có nên thực hiện các cuộc gọi nhỏ hơn, thường xuyên hơn hay không; hoặc các cuộc gọi lớn hơn thường xuyên hơn?

Rõ ràng, tôi đã làm điều này để cải thiện thời gian phản hồi, vì thư viện này là những gì thúc đẩy ứng dụng web. Tuy nhiên, để giữ cho dịch vụ có thể tái sử dụng được, tôi đã chuẩn hóa từng hàm GET thành một hành động đơn lẻ (S). Vì vậy, ví dụ, lấy thông tin người dùng từ thư mục hoạt động là một (giá trị vô hướng như displayName và bộ phận, ví dụ), và lấy báo cáo trực tiếp của người này là một hành động tải riêng biệt, lười biếng. Vì vậy, những gì xảy ra, là khi bạn đang xây dựng một đối tượng, có rất nhiều cuộc gọi đến dịch vụ để xây dựng đối tượng này. Một số trang chỉ cần thông tin cơ bản, những trang khác sẽ gọi nhiều hơn các phương thức tải lười hoặc thậm chí toàn bộ đối tượng. Tôi không thấy một vấn đề với điều này, nhưng những gì tôi đang tự hỏi (và những người khác trong công việc đã chỉ trích) là nếu điều này sẽ là một vấn đề?

Câu hỏi của tôi là, tôi có làm điều này sai không? Tất cả đầu vào được đánh giá cao mặc dù. Cảm ơn

+1

Nó không phải là một mô hình thực sự, và nó mơ hồ, nhưng tôi gọi phương pháp sử dụng "rất nhiều cuộc gọi rất nhỏ/cụ thể" một cuộc gọi RPC'ish – STW

Trả lời

6

Số dư bạn cần thực hiện là chi phí thực hiện cuộc gọi HTTP, so với phí chuyển giao yêu cầu hoặc phản hồi lớn.

Không có viên đạn bạc. Ví dụ, nếu cuộc gọi đang được thực hiện từ một máy chủ khác trên một mạng LAN thì trọng tải lớn hơn không phải là vấn đề lớn. Nếu cuộc gọi đang được thực hiện từ một thiết bị di động thì việc cắt giảm tải trọng sẽ có nhiều lợi ích.

Cân bằng tốt nhất để bắt đầu là xem xét các phương pháp của dịch vụ web của bạn dưới dạng các bước trong quy trình làm việc. Hãy suy nghĩ về "Nếu tôi muốn đạt được X, tôi cần những dữ liệu nào?"; cố gắng thu thập các yêu cầu của bạn phản hồi xung quanh những suy nghĩ đó và sau đó phân tích kết quả. Nó chỉ là một điểm khởi đầu, nhưng nó tốt hơn là bắt đầu với "một phương pháp cho từng chi tiết nhỏ" hoặc "một phương pháp cho phép mọi thứ".

3

Tôi không thấy vấn đề gì với điều này, nhưng điều tôi đang tự hỏi (và những người khác trong công việc đã phê bình) là liệu đây có phải là vấn đề không?

Vấn đề là mỗi cuộc gọi đến dịch vụ đều cung cấp phí. Bạn sẽ nhận được tổng số thông lượng tốt hơn với ít hơn, các cuộc gọi lớn hơn.

Luôn có giao dịch ở đây và cân bằng để tiếp cận. Các cuộc gọi lớn hơn có nguy cơ kéo dữ liệu nhiều hơn mức cần thiết, điều đó cũng làm lãng phí tài nguyên.

+0

Đây là loại cảm giác của tôi. Có rất nhiều dữ liệu phải được kéo về một người dùng để chúng tôi sử dụng.Ví dụ, lấy các báo cáo trực tiếp cho người dùng vào một đối tượng đầy đủ không phải là hoạt động nhanh nhất để thực hiện, vì vậy tôi đã tải nó xuống chỉ để xây dựng khi được yêu cầu. Ngoài thời gian xử lý, danh sách các đối tượng lên đến khoảng 400k +. Có vẻ như cầu kỳ, nhưng các ông chủ muốn các trang này tải trong 1 giây. Thats 1 giây để tham gia các cuộc gọi cơ sở dữ liệu với các truy vấn thư mục hoạt động. Không có nhiều để làm việc với đó! – Sinaesthetic

1

Tôi bỏ phiếu cho các cuộc gọi ít thường xuyên hơn.

Vì bạn đang ở trong bối cảnh web, hoạt động tốn kém của dữ liệu để chuyển từ lưu trữ dữ liệu sang tầng ứng dụng của bạn và sau đó đến cấp web của bạn, tôi tin rằng mạng truyền tải có nhiều tài nguyên nhất. Vì vậy, các cuộc gọi ít thường xuyên hơn (thông qua cơ chế bộ nhớ đệm trong tầng web) có quy mô tốt hơn và điều này đến từ trải nghiệm cá nhân.

Ngoài ra, những gì bạn xác định là 'lớn' tùy thuộc vào việc sử dụng ứng dụng của bạn. Ví dụ. Nếu đa số người dùng của bạn chỉ xem thông tin cơ bản của họ và chỉ một số ít người được chọn đi sâu vào báo cáo trực tiếp, bạn có thể sử dụng 2 cuộc gọi riêng biệt. Khác, gắn bó với một.

Hy vọng điều này sẽ hữu ích.

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