2010-06-29 9 views
6

Chúng tôi đang phát triển một ứng dụng web Java sử dụng JSF (Richfaces qua Seam) cho giao diện người dùng của nó. Tôi đã đọc một số bài báo chỉ ra rằng việc sử dụng thuộc tính "rendered =" trên các thành phần giao diện người dùng sẽ dẫn đến một hiệu suất khá đáng kể. Chúng tôi có một số thành phần mà chúng tôi muốn bật hoặc tắt dựa trên việc liệu giá trị của chúng có được đặt hay không. Ví dụ: nếu chúng tôi đang hiển thị một mặt hàng để bán, chúng tôi sẽ không có một loạt các trường trống cho các thuộc tính không được đặt.JSF - Thay thế cho "rendered ="?

Với hiệu suất này, tuy nhiên, chúng tôi e ngại về việc sử dụng nhiều trường "được hiển thị". Có một lựa chọn thực hiện tốt hơn cho điều này? Có điều gì chúng tôi có thể làm để cải thiện hiệu suất sử dụng trường này không?

+3

Tôi muốn được quan tâm đến các liên kết đến các bài viết minh họa về hiệu suất hit của thuộc tính 'rendered' ... – Dolph

+0

Tôi cũng muốn được quan tâm đến kết quả profiler của webapp của bạn. Gợi ý: [VisualVM] (https://visualvm.dev.java.net/) + [JMeter] (http://jakarta.apache.org/jmeter/). – BalusC

+0

Sau khi bài viết đó có ở đây, đặc biệt là phần "Chi phí của việc hiển thị có điều kiện" ... http://www.jsfcentral.com/articles/speed_up_your_jsf_app_1-2.html Chúng tôi chưa thực hiện bất kỳ hồ sơ đáng kể nào chính chúng ta. Chúng tôi chưa nhận được nhiều chương trình giao diện người dùng, nhưng muốn đảm bảo rằng chúng tôi đang giải quyết nó đúng cách khi chúng tôi làm. – Shadowman

Trả lời

4

Nếu trình thu thập không có gì khác ngoài việc chỉ trả lại thuộc tính boolean (được lưu trong bộ nhớ cache), thì tôi thực sự không thấy bất kỳ sự đau đớn nào. Không có thay thế cho nó. Tốt nhất những gì bạn có thể để cải thiện hiệu suất là để lưu nó vào một trong hai mô hình (tải lười) hoặc xem (c:set). Chi phí gọi phương thức getter lần lượt là hoàn toàn không đáng kể.

+1

nhưng hãy cẩn thận với '' - nó có thể không hoạt động như mong đợi trên một số phiên bản và một số trường hợp (lặp lại) – Bozho

+0

Cảm ơn bạn đã nhập. Nếu hiệu suất đạt được là không đáng kể, thì chúng ta sẽ tận dụng nó. – Shadowman

0

Bất kỳ cách nào khác sẽ không được miễn phí anyways .. vì vậy tôi sẽ chỉ sử dụng cách JSF tiêu chuẩn để ẩn/hiển thị các thành phần.

0

Bạn có thể sử dụng thẻ style="display : (#{bean.booleon} ? block : none)" JSF.

+0

Nhưng sau đó mã của nó nằm trong trang html. Với thuộc tính rendered nó thậm chí không có trong mã html! – marcel