2014-11-21 12 views
5

Chúng tôi đang sử dụng HATEOAS để có hiệu lực tuyệt vời tuy nhiên chúng tôi đã nhìn vào hiệu suất và nhận được kết quả rất nghèo từ việc xây dựng các liên kết, cụ thể là mã mà trông như thế nàyHATEOAS Link và Phương pháp hiệu suất

resource.add(linkTo(methodOn(SomeController.class).findAll())).withSelfRel()); 

Kết quả (I không như lo lắng về kích thước nhưng ghi dưới đây nào)

Enabled links - ~438ms - 201 kb 
Disable links - ~193ms - 84.6 kb 

Kích thước là do chúng tôi đưa ra 8 liên kết cho mỗi tài nguyên vì vậy chúng tôi dự kiến ​​quy mô, nhưng không phải là tốc độ chậm lại.

Khoảng 232ms được chi cho xây dựng liên kết khoảng 2ms mỗi đối tượng tôi trở lại (100 đối tượng trong thử nghiệm đặc biệt này)

Liệu có cách nào để tăng tốc độ này lên? Ví dụ: chúng tôi có thể nhận được URI trả trước cho tất cả yêu cầu trong cuộc gọi toResources và sau đó thưởng thức nó trong toResource không?

+0

chuyển sang không sử dụng methodOn và thay vào đó cung cấp Controller.class, Method, Params cắt giảm chi phí xuống ~ 306ms –

+0

Bạn đo chính xác điều gì? – zeroflagL

+0

Tôi nghĩ nó rõ ràng ở trên phải không? Lượng thời gian để tạo một liên kết đến một phương pháp điều khiển? –

Trả lời

1

Tôi đã xem mã xung quanh linkTo(methodOn()) và có vẻ như rất nhiều ma thuật AOP. Một proxy được tạo ra được tạo ra mỗi khi bạn gọi methodOn cho giao diện đích.

Cảm giác của tôi là điều này thật tuyệt vời khi thử nghiệm khi bạn muốn tránh các URI mã hóa cứng. EntityLinks cung cấp giải pháp thay thế hiệu quả hơn nhiều. Nhưng nó không mạnh bằng ControllerLinkBuilder.

Cách khác là sử dụng lớp Trợ giúp kết hợp với EntityLinks. Các dự án spring-restbucks có chứa một ví dụ hay - PaymentLinks class.

Nhưng thành thật mà nói - thật khó để cạnh tranh với sự tiện lợi được cung cấp bởi ControllerLinkBuiler.

EDIT: Vui lòng xem câu trả lời của tôi here để biết so sánh chi tiết hơn về hiệu suất của trình tạo liên kết.

+0

Vui lòng xem thêm http://stackoverflow.com/a/36326559/5371736 –

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