Vì rõ ràng bạn không thể thực sự phá hủy các phiên bản bản đồ, một cách để giảm vấn đề này nếu
- bạn cần hiển thị nhiều bản đồ cùng một lúc trên một trang web
- số lượng bản đồ có thể thay đổi với sự tương tác của người dùng
- các bản đồ cần được ẩn và hiển thị lại cùng với các thành phần khác (tức là chúng không xuất hiện ở một vị trí cố định trong DOM)
đang lưu giữ một nhóm các trường hợp bản đồ. Pool theo dõi các phiên bản đang được sử dụng và khi được yêu cầu một phiên bản mới, nó sẽ kiểm tra xem có bất kỳ phiên bản bản đồ nào có sẵn là miễn phí hay không: nếu có, nó sẽ trả về một phiên bản hiện có, nếu không, nó sẽ tạo phiên bản bản đồ mới và trả lại, thêm nó vào nhóm. Bằng cách này, bạn sẽ chỉ có số lượng bản đồ tối đa bằng với số lượng bản đồ tối đa bạn từng hiển thị đồng thời trên màn hình. Tôi đang sử dụng mã này (nó yêu cầu jQuery):
var mapInstancesPool = {
pool: [],
used: 0,
getInstance: function(options){
if(mapInstancesPool.used >= mapInstancesPool.pool.length){
mapInstancesPool.used++;
mapInstancesPool.pool.push (mapInstancesPool.createNewInstance(options));
} else {
mapInstancesPool.used++;
}
return mapInstancesPool.pool[mapInstancesPool.used-1];
},
reset: function(){
mapInstancesPool.used = 0;
},
createNewInstance: function(options){
var div = $("<div></div>").addClass("myDivClassHereForStyling");
var map = new google.maps.Map(div[0], options);
return {
map: map,
div: div
}
}
}
Bạn chuyển cho nó các tùy chọn bản đồ bắt đầu (theo đối số thứ hai của hàm tạo của google.maps.Map) và nó trả về cả phiên bản bản đồ (trên đó bạn có thể gọi các hàm liên quan đến google.maps.Map) và vùng chứa, bạn có thể tạo kiểu bằng cách sử dụng lớp "myDivClassHereForStyling" và bạn có thể tự động nối thêm vào DOM. Nếu bạn cần thiết lập lại hệ thống, bạn có thể sử dụng mapInstancesPool.reset (). Nó sẽ đặt lại bộ đếm về 0, trong khi vẫn giữ tất cả các phiên bản hiện có trong nhóm để sử dụng lại. Trong ứng dụng của mình, tôi cần xóa tất cả các bản đồ cùng một lúc và tạo một bộ bản đồ mới, vì vậy không có chức năng tái chế một bản đồ cụ thể: số dặm của bạn có thể thay đổi. Để xóa bản đồ khỏi màn hình, tôi sử dụng trình tách của jQuery, không phá hủy vùng chứa của bản đồ.
Bằng cách sử dụng hệ thống này và sử dụng
google.maps.event.clearInstanceListeners(window);
google.maps.event.clearInstanceListeners(document);
và chạy
google.maps.event.clearInstanceListeners(divReference[0]);
divReference.detach()
(trong đó divReference là đối tượng jQuery của div được trả về từ Nhóm đối tượng) trên mỗi div mà tôi đang xóa, tôi đã cố gắng giữ mức sử dụng bộ nhớ của Chrome ổn định hơn hoặc ít hơn, trái ngược với việc nó tăng lên mỗi khi tôi xóa bản đồ và thêm bản đồ mới.