我正在使用document.implementation.createHTMLDocument
方法解析大型HTML文件。我创建新文档,将HTML写入它们,然后使用标准文档方法迭代树。
这在浏览器上非常密集,我正在寻找其他选择。
我正在考虑将工作卸载到WebWorkers,但据我所知,他们无法访问DOMImplementation接口。
我的假设是对的吗?
我可以使用其他有效的替代方案吗?
答案 0 :(得分:1)
写完这个问题一分钟后,我在jsdom项目中找到了以下句子:
它甚至具有在浏览器中运行的实验性支持,使您能够在Web worker中创建整个DOM Document。
所以我想我会调查jsdom,并测试我是否可以通过这种方法获得性能提升。
任何其他建议/想法将不胜感激。
答案 1 :(得分:1)
这在浏览器上非常密集,我正在寻找其他选择。
做同样的事情,但在网络工作者中仍然是密集的,只是UI在执行时不会挂起,并且你有更多的胶水代码/行为来编写和维护以连接所有内容。
我创建新文档,将HTML写入它们,然后使用标准文档方法迭代树。
可能适合您的情况的替代方案是使用基于事件的解析,而不是像现在一样使用基于DOM的解析。 https://github.com/isaacs/sax-js或https://github.com/marko-js/htmljs-parser可能是合理的起点。根据您的迭代方式以及您对每个节点的处理方式,这可能会减少资源消耗。甚至可以在浏览器UI线程中完成它。
当然,如果它最终仍然过于密集,那么您可以将其移动到Web工作者,以避免在处理文档时挂起UI。