【发布时间】:2019-03-09 20:57:21
【问题描述】:
我们的代码显然做错了什么,但我们似乎无法理解是什么。如果我们想在特定的时间间隔内获取文件,为什么我们不能使用这段代码?
<html>
<head>
<script>
let interval = 2
function fetchSource(source) {
fetch(source, { cache: 'no-cache' })
.then(response => {
console.log('Memory-bloating')
})
}
function test() {
fetchSource('https://upload.wikimedia.org/wikipedia/commons/3/3d/LARGE_elevation.jpg')
}
setInterval(test, interval * 1000)
</script>
</head>
<body>
Memory-bloating in chrome
</body>
</html>
这里的问题是,每次获取时,我们都会随着图像的大小增加内存,而且似乎永远不会被垃圾收集。当网站启动大约 2-3 小时后,我们的计算机中就填满了这张图片。
我们应该如何构建这个函数来避免这种相当大的内存泄漏?
【问题讨论】:
-
我预计泄漏是在
fetch()函数本身,你没有包括在内。 -
“我预计泄漏是在 fetch() 函数本身中,你没有包括在内。”@Alnitak 我假设 fetch 在这个问题中是一个本机 javascript 函数。
-
@RaymondNijland 完全正确。如果您在浏览器中运行此 html 文件,则您的浏览器具有 fetch-support 和 setInterval-support。我自己,我在 MacOS 上运行 Chrome。我猜(并希望)他们实现了:developer.mozilla.org/en-US/docs/Web/API/Fetch_API
-
顺便说一句,您不能使用浏览器插件或原生 javascript 性能 api 来更好地了解代码的哪一部分是内存泄漏吗?
-
实际上,当使用 chromes memory-tool 时,您会发现该站点只需要几 MB,而 chromes 任务管理器告诉您需要几 GB。
标签: javascript fetch setinterval fetch-api