javascript分块文件上传的巨大内存消耗(应该是内存高效的)
我想把大文件上传到服务器上(几GB)。我把文件分成100MB的块,然后上传这些块 我希望,这将是非常有效的内存,因为我从来没有加载整个文件。然而,无论是在Chrome还是Firefox上,RAM都会填满,直到文件的大小 我的应用程序更复杂,但这个独立示例可以重现以下内容:javascript分块文件上传的巨大内存消耗(应该是内存高效的),javascript,file-upload,Javascript,File Upload,我想把大文件上传到服务器上(几GB)。我把文件分成100MB的块,然后上传这些块 我希望,这将是非常有效的内存,因为我从来没有加载整个文件。然而,无论是在Chrome还是Firefox上,RAM都会填满,直到文件的大小 我的应用程序更复杂,但这个独立示例可以重现以下内容: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form id="files">
<input type="file" multiple id="file-input">
<input type="submit">
</form>
<script>
const form = document.getElementById('files');
form.addEventListener('submit', async (e) => {
e.preventDefault();
const input = document.getElementById('file-input');
for (let file of input.files) {
const chunkSize = 100 * 1024 *1024;
let start = 0;
const nChunks = Math.ceil(file.size / chunkSize);
for (let i=0;i < nChunks; i++) {
let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(e) {
if ( 4 === this.readyState ) {
console.log([`${i} xhr upload complete`, e]);
}
};
const slice = await file.slice(start, start + chunkSize).arrayBuffer();
start += chunkSize;
xhr.open('POST', '/test_memory');
xhr.send(slice);
}
}
})
</script>
</body>
</html>
标题
const form=document.getElementById('files');
form.addEventListener('submit',异步(e)=>{
e、 预防默认值();
常量输入=document.getElementById('file-input');
for(让输入文件中的文件为input.files){
常量chunkSize=100*1024*1024;
让start=0;
const-nChunks=Math.ceil(file.size/chunkSize);
for(设i=0;i
为什么浏览器或垃圾收集器不能再次释放内存
如果在ChromeDevTools中下载之后单击手动垃圾收集,内存就会释放。但之前从未使用过,也从未自动使用过。顺便说一句,使用XHTMLRequest或更新的fetch API并不重要