Tôi đã tự nghiên cứu về điều này. Tôi đang làm việc trên phần cứng khá cũ trong một trình duyệt không được hỗ trợ. Kết xuất ban đầu là một vấn đề. Công việc đầu tiên của tôi là lưu vào bộ nhớ cache các mẫu được biên dịch trước, như bạn đang cố gắng. Tôi thấy rằng điều này chỉ cung cấp một cải thiện tốc độ tối thiểu.
Nút cổ chai thực sự đến từ chỉ thị ng-lặp lại của tôi, số lượng các bản sao lưu kết quả và số lượng nút/trình theo dõi DOM tôi đã xây dựng trong mỗi lần lặp lại.
Một số nguồn đã đề xuất tạo một chỉ thị tùy chỉnh giúp lắp ráp thủ công và nối nó theo một lần. Kết quả là rất ít reflow và không có người theo dõi. Nhược điểm là rất lớn. Không có nhiều niềm vui góc cạnh và rất nhiều công việc không cần thiết. Quan trọng hơn, không ai trong số này cung cấp một cải tiến tốc độ đủ lớn để biện minh cho công việc.
Cuối cùng tôi nhận thấy rằng cải thiện tốc độ tốt nhất đến từ việc tăng tốc phần cứng cho mỗi lần lặp lại ng-lặp lại. Như đã đề xuất ở trên, chỉ thị ng-animate trong các phiên bản mới hơn góc làm cho điều này tương đối tầm thường.
Bạn sẽ thấy hiển thị trang ngay lập tức, với các trục trặc chỉnh lại nhỏ. ng-cloak không giúp gì ở đây. Do yêu cầu hoạt ảnh, trang không được phép bị che khuất trong khi lặp lại hiển thị.Tuy nhiên, chúng có thể được kết hợp tốt với một chút thông minh thú vị. Tôi đang thực sự ẩn ng-lặp lại cho đến khi $ vị trí thay đổi, hiển thị một chỉ số tiến độ trong khi chờ đợi, và sau đó toggling ng-show của tôi. Điều này hoạt động thực sự độc đáo.
Có nói tất cả điều đó, biên dịch trước các mẫu của bạn nên được thực hiện như sau.
1) Khi ứng dụng của bạn bắt đầu, hãy tạo bộ nhớ cache mới cho chính bạn. Xem http://docs-angularjs-org-dev.appspot.com/api/ng. $ CacheFactory
2) Điền bộ nhớ cache này với được biên dịch mẫu. Tiêm $ biên dịch và gọi nó trên mỗi mẫu. Biên dịch trả về một hàm mà sau này bạn sẽ gọi dựa vào phạm vi của bạn. Khóa chức năng này trong bộ nhớ cache của bạn khi bạn thấy phù hợp.
3) Tạo chỉ thị tùy chỉnh chấp nhận khóa bộ nhớ cache làm thuộc tính. Bên trong chỉ thị này, truy vấn bộ đệm biên dịch của bạn cho hàm biên dịch chính xác. Gọi hàm này với phạm vi hiện tại của bạn và thêm DOM kết quả vào phần tử được chuyển vào chỉ thị.
4) Sorta win :).
Bạn có thể ẩn/hiện các khu vực bằng [ng-show] (http://docs.angularjs.org/api/ng.directive:ngShow). bạn cũng có thể muốn xem [$ templateCache] (http://docs.angularjs.org/api/ng.$templateCache) để cho phép bạn lưu trữ các khung nhìn của bạn. –
Tôi đoán chúng tôi có thể ng-show, nhưng sau đó tôi sẽ không phải vứt bỏ bộ định tuyến lỗ và quản lý url mà Angular cung cấp? Không hoàn toàn chắc chắn làm thế nào để sử dụng $ templateCache, tôi có thể thiết lập mọi thứ để tất cả các mẫu được lưu trữ? –
Bạn có thể sử dụng hai ứng dụng ng để quản lý hai hành vi mà tôi đoán. – GnrlBzik