2016-10-07 15 views
7

Tôi tự hỏi về tác động hiệu suất của các biến thể mã dưới đây dưới dạng các thang phức tạp. Một phần của câu trả lời cho điều này (những thuộc tính sử dụng) đã được giải quyết trong AngularJS : Why ng-bind is better than {{}} in angular? nhưng tôi muốn hiểu tác động của việc sử dụng các hàm thay vì các thuộc tính. Nó có vẻ như với tôi rằng với các thuộc tính Angular "biết" theo nghĩa khi có sự thay đổi, trong khi một hàm mờ đục nên Angular sẽ không biết, và sẽ phải đánh giá mọi lúc. Tuy nhiên, theo câu hỏi SO khác được đề cập ở trên, Angular đã được đánh giá mỗi lần với templating trực tiếp anyway. Vì vậy, có thực sự bất kỳ hình phạt hiệu suất cho việc sử dụng một chức năng thay vì một tài sản? Và những ưu và nhược điểm của từng cái này là gì?Hiệu suất của các tùy chọn liên kết AngularJS

1 khuôn mẫu Direct với tài sản

<div>Hello, {{user.name}}</div> 

2 ng-bind-mẫu với tài sản

<div ng-bind-template="Hello, {{user.name}}"</div> 

3 ng-bind với tài sản

<div>Hello, <span ng-bind="user.name"></span></div> 

4 Direct khuôn mẫu với chức năng

<div>Hello, {{GetUserName()}}</div> 

5 ng-bind-mẫu với chức năng

<div ng-bind-template="Hello, {{GetUserName()}}"</div> 

6 ng-bind với chức năng

<div>Hello, <span ng-bind="GetUserName()"></span></div> 
+0

Cuộc gọi chức năng bổ sung có nghĩa là phụ phí.Ngoài ra bạn không bao giờ muốn sử dụng một chức năng trong xem mà gây ra một yêu cầu async trừ khi nó là sự kiện dựa ... rất nhiều thử nó mặc dù – charlietfl

+0

Vâng, tôi nghĩ rằng bạn đã trả lời hầu hết các câu hỏi quan trọng. Ý tôi là, tôi nghĩ bạn không nên sử dụng các chức năng cho những thứ như vậy, nó là một chi phí không cần thiết. Hàm nên được sử dụng khi liên kết xuất phát từ khung nhìn và thuộc tính khi liên kết xuất phát từ mô hình. –

+0

@LenilsondeCastro: Bạn có nghĩa là "... chức năng nên được sử dụng khi các ràng buộc đến từ _controller_? –

Trả lời

0

3) . ng-ràng buộc với thuộc tính

Hãy xem. Lựa chọn tốt nhất là ng-bind='user.name' vì chỉ thị này sẽ chỉ xem xét biến được chỉ định và cập nhật chế độ xem, chỉ sau khi nó được thay đổi.

1). Templating trực tiếp với thuộc tính & 2). ng-ràng buộc-mẫu với thuộc tính

Hai tùy chọn này sẽ kích hoạt trên mỗi chu kỳ làm mới $ digest. Không cần thiết ng-ràng buộc với biểu thức hoặc chỉ biểu hiện, không có cách nào để tăng tốc độ bằng cách kiểm tra giá trị cụ thể.

4), 5), 6)

Về mặt lý thuyết, tất cả những trường hợp này sẽ là tốc độ như nhau mà sẽ chậm hơn nhiều so với ví dụ trên. Trên mỗi chu kỳ $ digest, nó sẽ gọi hàm liên quan, điều làm cho thậm chí còn chậm hơn biểu thức chỉ.

Vẫn còn thú vị khi thực hành kiểm tra xem nó sẽ giảm tốc độ về số lượng như thế nào.

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