在c中解析XML与使用外部库解析和以后实现逻辑之间的性能差异?

时间:2017-08-23 15:51:12

标签: java python c xml

我正在开发一个个人项目,它要求我解析HTML4 / 5网页(通常是网页解析器),并应用某些过滤器和逻辑来收集工件。该项目不需要解析内容,我只对HTML标签及其关系感兴趣。

我现在有两个工作流程,

  1. 使用现有的库,例如JAVA SAX / C - libxml2 / Python-lxml with Beautiful Soup。我看到的问题是,如果我使用库,将会有一个初始操作来解析整个结构,(lxml能够根据标签的打开/关闭为事件提供迭代器/或SAX),其次我通过再次迭代每个标签并收集工件来添加逻辑。

  2. 在C中编写一个最小的解析器,它只解析我需要的东西。它将是从网页开始到网页结束的单个迭代。我将继续收集所有工件,如父 - >子关系,兄弟姐妹关系,标签中的属性,等等。当到达终端节点时,我应该有一个完整的数据结构,我可以将其导出。我也可以选择在单独的线程上编写其他逻辑操作,因为我正在解析主文件。

  3. 哪一个是理想的,哪一个会更快。

    我计划将性能和CPU周期部署到AWS云。

    我已经开始研究第二种方法了。我就像60%完成了开发。

    以下是一些效果统计数据

    测试页面:Yahoo主页(包含大量标签和参考链接)

    C程序(自定义解析器 - 不使用外部库):平均时间:0.01576秒。 Python美味汤(lxml):平均时间:0.003秒。 (混淆这怎么会更快?)

    我真的很困惑,这怎么会比c程序更快?如果我的方法是正确的,或者我在这里遗漏了什么,请告诉我。

0 个答案:

没有答案