2013-06-05 29 views
20

Khi bạn đang sử dụng ngView với 100 lượt xem khác nhau, mỗi chế độ có phạm vi khác nhau. Liệu Angular có tự động xử lý việc phá hủy các mẫu/phạm vi cũ hoặc chúng có trong bộ nhớ không? Tôi chỉ tò mò nếu Angular xử lý này trước khi tôi đi và bắt đầu viết mã tùy chỉnh để giảm tải bộ nhớ. Tính đến thời điểm hiện tại, mỗi khung nhìn mới tôi sẽ chỉ xếp chồng lên trong bộ nhớ.Angularjs xử lý việc quản lý bộ nhớ bằng ngView như thế nào?

Đây là câu hỏi cụ thể về AngularJS. Tôi biết cách hoạt động của bộ sưu tập rác trong javascript.

+5

Có, js có bộ sưu tập rác. Nhưng nó sẽ không thu thập bất cứ điều gì mà nó tin rằng đang được sử dụng. Với góc cạnh, nó giả định rằng các phạm vi $ vẫn được sử dụng, do đó nó sẽ không bao giờ thu thập nó. Vì vậy, tôi hỏi làm thế nào để tôi cần phải làm gì trong Angular để đảm bảo nó có thể được thu thập. – mfrancis107

+0

Bạn luôn có thể sử dụng "xóa"? –

+0

@KGChristensen Đó không phải là cách 'xóa' hoạt động? – rounce

Trả lời

22

Một trong những quyết định thiết kế đằng sau giới thiệu phạm vi là để giảm bớt khả năng quản lý bộ nhớ. Bằng cách phân vùng không gian của mô hình thành các phần phụ (phạm vi), chúng ta có thể loại bỏ các phần không cần thiết của mô hình (phạm vi) và thêm mới khi cần thiết. Vì vậy, có, phạm vi là một phần quan trọng của toàn bộ câu đố quản lý bộ nhớ.

Khi nói đến câu hỏi cụ thể của bạn về ng-view - chỉ thị này sẽ chỉ giữ phạm vi cho chế độ xem hiện hoạt hiện đang hoạt động. ng-view là một trong các chỉ thị tạo phạm vi (và phạm vi hủy!). Nó sẽ tự động tạo một phạm vi mới khi chế độ xem mới được điều hướng đến và sẽ tự động hủy một phạm vi được kết nối với chế độ xem cũ. Điều này có thể dễ dàng xác minh trong AngularJS source code.

Phần bộ nhớ duy nhất cần xem xét là các mẫu được tìm nạp qua mạng. Tất cả các mẫu được tham chiếu trong một tuyến đường được lưu trong bộ nhớ cache trong số $templateCache. Bạn có thể loại bỏ các mẫu sử dụng một cách tiết kiệm nếu bạn xác định rằng nó xử lý một nút cổ chai hoàn hảo cụ thể trong ứng dụng của bạn. Chúng ta chỉ cần nhận ra rằng đó là thời gian giao dịch (thời gian mạng) để tiêu thụ bộ nhớ.

Tóm lại: không cần phải triển khai phạm vi quản lý của riêng bạn cho ng-view - nếu bạn thấy bất kỳ lưu giữ phạm vi nào, báo cáo sẽ bị báo cáo là lỗi.

+0

Còn về html của mẫu thì sao? Tôi biết nó là giữ rằng bởi vì nó không bao giờ thực hiện một yêu cầu ajax cho mẫu? – mfrancis107

+0

Có, tất cả các mẫu đã tải được đưa vào '$ templateCache': http://docs.angularjs.org/api/ng.$templateCache Bạn có thể gỡ bỏ các mẫu đó trên sự kiện thay đổi tuyến đường. Đã cập nhật câu trả lời. –

+1

hi @ pkozlowski.opensource điều gì về các chỉ thị do người dùng xác định tạo ra phạm vi độc lập? –

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