gpt4 book ai didi

javascript - 为什么 'file.size'需要很多时间,如何减少时间?

转载 作者:可可西里 更新时间:2023-11-01 02:47:45 29 4
gpt4 key购买 nike

我正在制作一个处理被拖到应用程序中的歌曲的应用程序。当我使用 file.size 获取文件大小时,获取该值大约需要 1500 毫秒(平均)。有没有更快的方法?我理解为什么这需要时间(和内存),但由于我是处理 HTML5 文件的新手,也许有一些我不知道的东西可以使这个过程更快。

文件系统 API 也是如此。如果我通过它调用文件并调用 file.size,则需要类似的时间。

PS 我是通过在我的代码中添加 console.time() 得出这个结论的。

这是代码(大量精简)

fileSystem.root.getFile(id, {}, function(fileEntry) {
fileEntry.file(function(audioTemp) {
console.time(1);
console.log(audioTemp.size);
console.timeEnd(1)
});
});

这是文件系统 API 示例。这(显然)需要名为 id 的文件才能正常工作。下面是D&D文件输入代码

function onChangeAddSongsInput() {
var files = document.getElementById('addSongsInput').files;
for(var i=0; i<files.length; i++) {
console.time(1);
console.log(files[i].size);
console.timeEnd(1)
}
}

编辑

我使用的是 AMD 等效双核处理器,2.7 GHz,2 GB 内存,win7 x64。我认为这些规范实际上足够好。因此,如果某件事确实在我的机器上花费了足够长的时间,我将不予考虑。

这是我应用程序中主要错误修复的阻止程序。我真的很想在很长一段时间内提供修复程序。我无法设置赏金(但)也许在设置赏金之前有最短时间。

编辑

我做了一些测试,事实证明,它花了这么长时间,因为 chrome 计算 大小而不是仅仅从一些元数据中读取它。 Here是测试结果。

文件越大,花费的时间越长,如果第二次调用它会使用一些缓存并且不会加载文件。所以现在..我怎样才能减少这个时间?大小在我的应用程序中是一个重要信息,但可能不足以使用户的每个文件的上传速度降低约 1.5 秒!我正计划导入库,这真的有助于减少添加 100 首左右歌曲的时间。这一次将对应用的响应时间产生重大影响。

最佳答案

这是一个准有根据的猜测:

查看the definition of the HTML5 File interface显示 FileBlob 并且 size 属性实际上是 Blob interface 的一部分.

因为 Blob 是对原始数据 block 的抽象,访问 size 属性实际上可能导致实现将整个文件加载到内存中。您可以编写一个实验来查看延迟是否随文件大小而变化,或者延迟是否仅发生在第一次读取 size 属性时。

编辑:

我真的觉得这种低效率是浏览器对 File 接口(interface)的实现的问题,但这里有两个解决方法,可以解决将大文件加载到内存中时如何避免延迟的问题:

Web worker( MDN reference , WHATWG Webapps Standard )将允许您将文件的缓慢加载基本上放到另一个线程中。我认为这是您最好的选择。

另一种方法是使用 slice method Blob 接口(interface)加载 File 的一小部分。如果 slice 的实现只加载文件的所需部分,它应该会更快。您必须为每个文件加载多个切片,并且您需要通过注意 slice< 返回的 Blob 的大小来检测何时到达文件末尾。您将通过取回比预期更小的 blob 来检测文件的结尾——来自规范:

The slice method MUST clamp on values of size if index arithmetic exceeds the bounds of size. In particular, this means that for a given slice call:

If start + length > size then a user agent MUST return a Blob object as if slice(start, size-start) was called.

If start > size then a user agent MUST return a Blob object of size 0

不幸的是,规范还提到了当您请求 Blob 的缓冲区大小之外的切片时抛出异常的可能性——在执行此操作的任何实现中,您都必须捕获一个检测文件结尾的异常。

关于javascript - 为什么 'file.size'需要很多时间,如何减少时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7325795/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com