问题 :为什么下面代码会产生内存泄漏
注意:我的目标是每帧存储更新的对象,以便我可以同步这些对象 与网络工作者的对象。
免责声明:我正在使用设置间隔,如果我有任何其他方式通过邮件后传输此数量的对象我会。
替代:所以如果你有一个替代方法可以存储给定的对象数组,其中随机值是整数和字符串的集合,请举个例子我会同样兴奋和其他人会欣赏一种最终摆脱这种困境的方法,谢谢你:) ++。
<html>
<body>
<script type="text/javascript">
const dbName = "the_name";
var version=85;
var storeName= "store85";
var request = indexedDB.open(dbName, version);
let db
request.onsuccess= function(event){
db = event.target.result;
//open database
setInterval(build,1000/24)
};
request.onerror = function(event) {
// Handle errors.
};
request.onupgradeneeded = function(event) {
let db = event.target.result;
let objectStore = db.createObjectStore(storeName, {autoIncrement:true});
// Use transaction oncomplete to make sure the objectStore creation is
// finished before adding data into it.
objectStore.transaction.oncomplete = function(event) {
let customerObjectStore = db.transaction(storeName, "readwrite").objectStore(storeName);
//Initial add option here if prefered instead of if statements in open.
}
};
function build() {
var customerData = [];
for(let i=0;i<=50000;i++){
customerData.push({"minX":Math.floor(Math.random()*10+1),"minY":Math.floor(Math.random()*10+1),"maxX":Math.floor(Math.random()*10+1),"maxY":0,"id":Math.floor(Math.random()*10+1)})
}
window.t0 = performance.now();
let transaction = db.transaction( storeName,"readwrite").objectStore(storeName);
let additem =transaction.put(customerData);
additem.onsuccess= function (event){
window.t1 = performance.now();//alert(window.t1-window.t0);
}
}
</script>
</body>
</html>
原因:现在相对而言现在没有人使用网络工作者。帖子信息系统很棒,但除了让位于处理像图像blob之类的内容之外,它几乎没有什么用处。然后它使用脏方法。我的方法仍然使用一种脏方法,但增加了10倍的信息量,为使用网络工作者而不仅仅是这样做了一些合理性,但是制作一个可以拥有所需数量的变量的全局范围而不是使用内存。到目前为止,唯一的缺陷是由于硬盘读取速度和请求失败等导致的更新之间的不一致。到目前为止,所有这些方法都有效,到目前为止唯一错误的是内存泄漏。我相信如果这个问题得到解决,那么像thread.js这样的库可以在它们的代码中使用它,不仅可以内联代码,还可以跨线程动态共享数据。