2009-06-04 39 views
5

Tôi có tình huống sau đây trên một webapp:Caching quang cảnh một phần trong asp.net MVC

Một bảng "Employees" chứa cột "cục" và "Chức năng". Cả hai đều là danh sách thả xuống.

Tùy chọn danh sách thả xuống "Chức năng" phụ thuộc vào "bộ phận" đã chọn. (do đó, mỗi bộ phận có danh sách các chức năng riêng)

Khi thay đổi bộ phận, tôi thực hiện cuộc gọi ajax đến một hành động điều khiển với tham số "DepartmentId". Có một thuộc tính [outputcache] trên controlleraction để các hàm mà nó trả về được lưu trữ cho mỗi ID của bộ phận.

Sự cố của tôi là tải ban đầu của trang. Bạn có thể gọi một bộ điều khiển trong chế độ xem và tận dụng bộ đệm ẩn không?

Bất kỳ ai? 30 lượt xem và không có câu trả lời .. Bất kỳ nhận xét nào về câu hỏi của tôi? Quá rõ ràng? quá khó? quá lạ? một cái gì đó cho google (altho tôi đã không tìm thấy một giải pháp có)?

Trả lời

4

Phil Haack đã viết một bài đăng trên blog ngắn về một chủ đề tương tự được gọi là Donut Hole Caching. Nó phục vụ như là một điểm khởi đầu tốt.

+0

không chắc chắn nếu điều này khắc phục được nhưng tôi vẫn đánh dấu là câu trả lời .. –

0

Bạn có nghĩa là bạn muốn gọi hành động bộ điều khiển tạo ra các chức năng trực tiếp trong khi tạo chế độ xem chứ không phải với ajax? Nếu tôi hiểu điều đó một cách chính xác, tôi không nghĩ rằng nó có thể nhận được tại các dữ liệu trong bộ nhớ cache đầu ra (tôi có thể là sai mặc dù). Dù sao, nếu bạn có thể nhận được nó, bạn vẫn phải giải mã dữ liệu một lần nữa.

Bạn cũng có thể cố gắng

  • cache bộ phận Id mình trong HttpContext.Cache và sử dụng chúng trong cả hai hành động (có thể đó là quá nhanh, bạn không cần các OutputCache nữa và không có đôi bộ nhớ đệm)
  • Hoặc nếu số lượng phòng ban/chức năng không lớn, bạn có thể tạo cấu trúc json với tất cả các chức năng, lưu trữ chúng trong chế độ xem và không sử dụng ajax.
4

Tôi sẽ sử dụng các điều khoản con hoặc yêu cầu một phần vẫn còn tốt hơn để làm những gì bạn đang yêu cầu. Trong một trang điển hình, tôi có xu hướng không lưu toàn bộ trang nhưng thay vào đó chia nhỏ các khu vực thành các phương thức hành động khác nhau được gọi thông qua các yêu cầu một phần. Bằng cách đó tôi có thể có bộ nhớ đệm đầu ra trên mỗi khu vực với các thời hạn khác nhau. Đó là vòng đời trang nhiều hơn nhưng khi chúng được lưu trữ, chúng thực sự không phải là thuế về hiệu suất. Nó cũng dễ dàng hơn để duy trì và tối ưu hóa một khu vực cụ thể nếu nó bắt đầu được thực hiện.

Trong kinh nghiệm của tôi, điều này cũng phù hợp rất độc đáo với các mẫu ajax vì bạn chỉ có "lấy" dữ liệu của bạn từ một phương thức hành động.

yêu cầu từng phần sẽ được thảo luận here và subcontrollers here

Hope this helps.

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