Cách thêm tất cả các giá trị vào observableArray
trong một lần? Thêm giá trị trong vòng lặp hoạt động rất chậm trong trường hợp của tôi. Đây là ví dụ jsfiddle. jsfiddleknockout observableArray performance
Trả lời
Vì bạn đang giải phóng ra toàn bộ mảng thể quan sát được, một cách để bạn có thể thực hiện điều này là:
var viewModel = {
name: "base",
addingValue:new ko.observable(),
someArr: new ko.observableArray(["123","432","sdafasd","xrere"]),
add: function()
{
this.someArr.push(this.addingValue());
},
updateSomeArr:function()
{
var temp = [];
for(var i=0;i<5;i++)
{
temp.push("555565");
}
this.someArr(temp);
}
}
haha khá đơn giản. Cảm ơn – Neir0
Không sao cả. Ngoài ra còn có một cách để "tắt" các hành vi quan sát, cập nhật mô hình của bạn, và sau đó bật nó trở lại - nhưng tôi dường như không thể tìm thấy trang cho nó. –
sử dụng array_name [array_name.length-1] = item; là nhanh hơn so với phương pháp push – Marwan
Hiện đã là một câu trả lời được lựa chọn, nhưng tôi nghĩ rằng sau đây sẽ giúp đỡ. Bạn có thể vô hiệu hóa các hành vi quan sát bằng cách thực hiện mảng quan sát của bạn để có được việc thực hiện mảng cơ bản:
var underlyingArray = viewModel.someArr();
Sau đó bạn có thể thêm các mục vào underlyingArray
mà không bắn ra someArr
sự kiện. Một khi bạn đã hoàn tất thêm các mục, hãy gọi:
viewModel.someArr.valueHasMutated();
Điều này sẽ gây ra sự kiện để bắn thông báo cho tất cả các quan sát phụ thuộc vào viewModel.someArr().
var myArray = ko.observableArray([]);
var valuesToInsert = [1,2,3];
myArray.push.apply(myArray, valuesToInsert);
đó là nó
Muốn biết lý do tại sao câu trả lời đã được giảm giá. – AGS
Vẫn không hiểu tại sao câu trả lời chính xác và thanh lịch nhất lại bị bỏ qua :). Xin cảm ơn vì lời giải thích. – AGS
Đây thực sự là cách tiếp cận tốt nhất để đẩy tất cả các mục vào một mảng cùng một lúc. Đây là bài đăng về cách sử dụng của nó http://www.knockmeout.net/2012/04/knockoutjs-performance-gotcha.html –
- 1. Activator.Create Performance Performance Alternative
- 2. NLTK Performance
- 3. Tạo ko.observableArray từ JSON Object trong knockout
- 4. Truyền đối tượng knockout.js observablearray tới MVC Controller Action?
- 5. Knockout afterRender, nhưng chỉ một lần
- 6. Thay thế mục trong observableArray
- 7. Generics vs Object performance
- 8. ReaderWriterLockSlim Extension Method Performance
- 9. linq foreach performance
- 10. JQuery Tìm Performance
- 11. Neo4J Performance Benchmarking
- 12. RowVersion and Performance
- 13. ConfigurationManager.AppSettings Concerns Performance
- 14. SimpleXML vs DOMDocument performance
- 15. Performance Monitoring: hạch vs Graphite
- 16. Racket Interactive vs Compiled Performance
- 17. PHP 5 Reflection API performance
- 18. Neo4j cypher query slow performance
- 19. Indexing Performance bigint vs VARCHAR
- 20. http HEAD with GET performance
- 21. tải observable.js observableArray() từ .ajax() gọi
- 22. Knockout và MVC 2.0
- 23. Knockout JS: FileUpload kiện
- 24. Knockout JS Model Inheritance
- 25. knockout - HTML href
- 26. Knockout 'for' binding?
- 27. Performance text/html vs application/json
- 28. Android Performance - 'Tránh nội Getters/setters'
- 29. Performance Benchmark CouchDB x Relational Databases
- 30. Interpreting Multicore Performance Trace (Eclipse/Android)
tôi có một lưu ý về các mục thêm vào một vấn đề hiệu suất mảng mà bạn nên sử dụng array_name [array_name.length-1] = hàng của bạn; dòng này là nhanh hơn so với phương pháp đẩy – Marwan
Sự khác biệt thực sự lớn? – Neir0
Tôi nghĩ vậy hãy xem bài viết này http://www.scottlogic.co.uk/2010/10/javascript-array-performance/ và xin lỗi tôi đã nhầm lẫn array_name [array_name.length] = mục của bạn – Marwan