上下文: 我有一个处理和显示大量日志文件的 Web 应用程序。它们通常只有大约 100k 行,但可以达到 400 万行或更多。为了能够滚动浏览该日志文件(用户启动和通过 JavaScript)并过滤具有良好性能的行,我在数据到达后立即为每一行创建一个 DOM 元素(通过 ajax 在 JSON 中)。我发现这比在后端构建 HTML 性能更好。之后我将元素保存在一个数组中,我只显示可见的行。
对于最多 100k 行,这只需大约几秒钟,但对于 500k 行(不包括下载),任何更多都需要一分钟。我想进一步提高性能,所以我尝试使用 HTML5 Web Workers。现在的问题是我无法在 Web Worker 中创建元素,甚至在 DOM 之外。所以我最终只在 Web Workers 中进行 json 到 HTML 的转换,并将结果发送到主线程。它在那里被创建并存储在一个数组中。不幸的是,这使性能恶化,现在至少需要多花 30 秒。
问:那么有什么我不知道的方法可以在 DOM 树之外的 Web Worker 中创建 DOM 元素吗?如果不是,为什么不呢?在我看来,这不会产生并发问题,因为创建元素可以并行发生而不会出现问题。