据我所知,HTML解析由于其强烈的依赖性而难以并行化。
是否存在或在设计中存在任何并行HTML解析器,以便可以并行解析单个HTML文档并最终生成单个DOM树?
可以是早期的HTML版本,也可以是最新的HTML5。
答案 0 :(得分:3)
HTML中的“强依赖关系”与解析的观点相比,与您可能解析的任何其他语言中的强依赖关系没有太大差别。真正的问题是解析文件的一部分通常取决于左上下文。并行解析器的问题是如何获得左上下文?
有general theory关于如何构建并行解析器,将文本分成块,单独解析它们以及将这些部分拼接在一起。 McKeeman的论文(引用)声称N处理器的速度为.85N。
我似乎记得有一篇论文建议从两端解析一个文件,在中间会面。正确的解析器生成左上下文;左侧解析器生成了正确的上下文。您可以通过反转语法相对容易地进行双向扫描,并将前向和后向语法提供给解析器生成器。将它粘合在一起可能需要参考文献中描述的各种技术。
我们的DMS软件重组工具包有一个GLR解析器,它使用管道将lexing阶段与解析分开,并提供完整的HTML4解析器。 (DMS建立在并行基础之上;配置它以相对容易并行解析单个文件。)HTML4解析器可能使用DMS对语言方言的支持扩展到HTML5。
作为一般规则,如果您只解析一个程序(或HTML)文件,这种并行性实际上并不重要,因为它不会对您的整体性能产生太大影响。大多数解析器都非常快,并且它们的时间主要由处理单个字符的努力所覆盖。您可能通过将文件分成块来获得大部分加速,并且单独 lexing 块,特别是因为大部分HTML文件都浪费了空白。
如果您必须处理批次的HTML文件,那么每个文件被解析后,您可能会更好。然后,您可以在每个线程中使用非常传统的解析器技术。