2

我在我的 Web 应用程序中使用了第三方 flash 组件(用 Javascript 封装),从中我得到逗号分隔的值和 base64 数据:

获取 csv 字符串作为数组函数:

// Get the csv as array function
var buff = $wnd.MyFlashComp.getData();
var strBuff = buff.toString();
var arr = strBuff.split(',');

获取base64数据函数:

// Get the data as base64 function
var buff64 = $wnd.MyFlashComp.getData64();

当我使用 buff64 并将其作为 base64src数据插入 HTML 标记时,数据会在浏览器中正确呈现,即页面仍然很流畅。而且我没有看到该页面有任何性能问题。

但是,将 csv 获取为数组的函数非常慢,如果不滞后,就会使页面挂起。我从闪存获得的数据大小(最大)从 500KB 到 1MB 不等。

有没有办法提高这段代码的性能?

4

1 回答 1

3

假设主要问题是split因为您要拆分 1MB 的数据,并且由于 base64 而使用的是 HTML5 兼容(或现代)浏览器,为什么不尝试在web worker中进行拆分。


或者,如果不在 HTML5 浏览器上,请执行一些手动异步循环(setTimeout延迟 1 毫秒的循环)和字符串操作。通过在每次迭代中截断字符串的逗号分隔部分来做到这一点,直到没有留下任何东西。

setTimeout应该可以帮助您进行非阻塞操作,但我不知道以这种方式切断整个 1MB 需要多长时间。这并不是真正的“异步”。它只是根据超时安排任务,因此操作不会阻塞 UI。此外,每次迭代,您可以为进度条制作“进度报告”,但检查剩余 1MB 的大小。

于 2012-10-27T01:50:40.400 回答