Khi so sánh hiệu suất của các liên kết trôi chảy với các biểu thức liên kết Thụy Sĩ/Tây Tạng trong MVVMCROSS, một số yếu tố xuất hiện. Đây là một sự cố chi tiết:
Tổng quan về các loại ràng buộc
- Influent ràng buộc: Đây là các biểu thức ràng buộc an toàn kiểu được tạo trong mã C#. Chúng đặc biệt hữu ích trên các nền tảng như iOS và UWP nơi các tệp bố cục XML không dễ dàng chỉnh sửa. Các ràng buộc trôi chảy cung cấp một cách rõ ràng, được gõ mạnh để liên kết các thuộc tính xem để xem các thuộc tính mô hình, có thể giúp giảm lỗi thời gian chạy bằng cách bắt các loại không khớp loại tại thời điểm biên dịch [1] [4].
- Các biểu thức liên kết Thụy Sĩ/Tây Tạng: Đây là các biểu thức liên kết dựa trên chuỗi thường được sử dụng trong các tệp Bố cục XML (ví dụ: AXML của Android). Các ràng buộc của Thụy Sĩ linh hoạt hơn và cho phép các biểu thức phức tạp như cách ghép và logic có điều kiện. Liên kết Tây Tạng mở rộng điều này bằng cách hỗ trợ cú pháp nâng cao hơn tương tự như ngôn ngữ nhỏ cho các biểu thức liên kết [1] [6].
So sánh hiệu suất
Biên dịch thời gian so với đánh giá thời gian chạy
- Các ràng buộc trôi chảy: Vì các ràng buộc trôi chảy được xác định trong C#, chúng được đánh giá tại thời gian biên dịch. Điều này có nghĩa là bất kỳ loại lỗi hoặc vấn đề ràng buộc nào đều bị bắt sớm, có khả năng cải thiện hiệu quả phát triển. Tuy nhiên, hiệu suất thực tế trong thời gian chạy thường tương tự như các phương thức ràng buộc khác vì thiết lập liên kết vẫn được thực hiện khi chạy.
- Các ràng buộc của Thụy Sĩ/Tây Tạng: Các ràng buộc này được đánh giá trong thời gian chạy vì chúng được định nghĩa là các chuỗi trong các tệp XML. Điều này có nghĩa là bất kỳ lỗi nào trong các biểu thức ràng buộc chỉ được phát hiện khi ứng dụng chạy, điều này có thể dẫn đến các chu kỳ phát triển chậm hơn nếu không được kiểm tra đúng. Tuy nhiên, việc đánh giá thời gian chạy vốn dĩ không làm cho chúng chậm hơn các ràng buộc trôi chảy sau khi các ràng buộc được thiết lập.
Chi phí thời gian chạy
- Các ràng buộc trôi chảy: Chi phí của các ràng buộc trôi chảy là tối thiểu vì chúng trực tiếp tạo ra các đối tượng ràng buộc cần thiết trong mã. Cách tiếp cận trực tiếp này có thể hiệu quả hơn một chút so với các biểu thức chuỗi phân tích cú pháp trong thời gian chạy.
- Các ràng buộc của Thụy Sĩ/Tây Tạng: Chúng yêu cầu phân tích các biểu thức liên kết từ XML khi chạy, trong đó giới thiệu một số chi phí so với các ràng buộc trôi chảy. Tuy nhiên, chi phí này thường nhỏ trừ khi xử lý rất phức tạp hoặc nhiều ràng buộc.
Hiệu quả phát triển và xử lý lỗi
- Influent ràng buộc: Cung cấp hiệu quả phát triển tốt hơn do kiểm tra thời gian biên dịch, có thể gián tiếp cải thiện hiệu suất bằng cách giảm thời gian gỡ lỗi các vấn đề ràng buộc thời gian chạy.
- Các ràng buộc của Thụy Sĩ/Tây Tạng: Mặc dù linh hoạt hơn cho các biểu thức phức tạp, chúng yêu cầu kiểm tra thời gian chạy nhiều hơn và có thể dẫn đến sự phát triển chậm hơn nếu không được kiểm tra đúng.
Phần kết luận
Về hiệu suất thô, cả ràng buộc Fluent và Thụy Sĩ/Tây Tạng thường có thể so sánh được sau khi được thiết lập. Tuy nhiên, các ràng buộc trôi chảy mang lại lợi thế về hiệu quả phát triển và phát hiện lỗi thời gian biên dịch, điều này có thể gián tiếp cải thiện hiệu suất ứng dụng tổng thể bằng cách giảm thời gian gỡ lỗi. Các ràng buộc Thụy Sĩ/Tây Tạng cung cấp sự linh hoạt hơn trong các kịch bản phức tạp nhưng yêu cầu kiểm tra thời gian chạy nhiều hơn. Sự lựa chọn giữa chúng thường phụ thuộc vào các nhu cầu cụ thể của dự án và sở thích của nhà phát triển đối với các định nghĩa ràng buộc dựa trên mã so với XML.
Trích dẫn:[1] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
[2] https://stackoverflow.com/questions/46522577/mvvmcross-issues-with-fluent-binding
[3] https://stackoverflow.com/questions/48422489/mvvmcross-tibet-binding-to-viewmodel-itself
[4] https://www.mvvmcross.com/documentation/fundaments/data-binding
[5] https://www.youtube.com/watch?v=3-ct97sbmxm
[6] https://stackoverflow.com/questions/48824612
[7] https://github.com/mvvmcross/mvvmcross/issues/1342
[8] https://github.com/mvvmcross/mvvmcross
[9] https://www.mvvmcross.com/Documentation
[10] https://stackoverflow.com/questions/48066268/xamarin-mvvmcross-fluent-binding-on-uwp
[11] https://crosscuttingconcerns.com/MvvmCross-Fluent-Databinding