javascript分块文件上传的巨大内存消耗(应该是内存高效的)

javascript分块文件上传的巨大内存消耗(应该是内存高效的),javascript,file-upload,Javascript,File Upload,我想把大文件上传到服务器上(几GB)。我把文件分成100MB的块,然后上传这些块 我希望,这将是非常有效的内存,因为我从来没有加载整个文件。然而,无论是在Chrome还是Firefox上,RAM都会填满,直到文件的大小 我的应用程序更复杂,但这个独立示例可以重现以下内容: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">

我想把大文件上传到服务器上(几GB)。我把文件分成100MB的块,然后上传这些块

我希望,这将是非常有效的内存,因为我从来没有加载整个文件。然而,无论是在Chrome还是Firefox上,RAM都会填满,直到文件的大小

我的应用程序更复杂,但这个独立示例可以重现以下内容:

<!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并不重要