2009年3月25日星期三

[PerlChina] Firefox JS 版 X Hunter 抽取器与 Perl VDOM.pm 抽取器的性能对比 (Was Re: 寻 WWW::Baidu 的维护者)

2009/3/25 Question <wanliyou@gmail.com>:
>
> 原来的JS开上JIT和Perl有对跑过么?
> --

呵呵,在 firefox 3.1beta3pre 中 JS 打开 JIT 和不打开 JIT 时,我的 List Hunter
抽取器的每页面分析时间都稳定在平均 300 ms 水平(加载和渲染页面除去 web I/O 平均为 300 ms)。在使用 Perl
改写之后,分析 VDOM 的时间为平均 150 ~ 200 ms 的水平(加载 VDOM 的时间为平均 150 ms)。

然后这种语言的比较并不公平,因为在 JS 版 List Hunter (还包括其他 Hunter)中,主要时间是在 DOM 操纵上,而非
JS 代码本身。而 Firefox 的 DOM 操纵代价比较高昂[1]。而在 Perl 环境里,我根据实际需要,对 VDOM.pm 这种
DOM 库进行了优化(但仍是 100% Perl),和 Hunter DOM 分析代码之间也不存在很多开销(在 Firefox 里,JS
操纵 C++ DOM 就不同了)。另外,Perl hunter 仍然依赖于 Firefox[2] 导出带视觉信息的 DOM
(我自己定义了一种很紧凑的基于纯文本的 VDOM 格式),而在上面的计时中,并未包含 VDOM 导出的时间[3].

按照计划,等这一批纯 Perl 的可脱离 Firefox 运行的 hunter 上线之后,我就要着手 libvdom++
库的开发了,届时一切都是纯 C++,期望届时会有几倍甚至一个数量级的性能提升 :)

Cheers,
-agentzh

脚注:
[1] 比如 textContent 方法就惊人地慢,同时在标准的 DOM 中,许多视觉信息和 DOM
本身并未融为一体,例如字体、字号、字重、背景色等等,所以在 DOM 操纵中存取这些信息即使自己做缓存也比较吃力。
[2] 事实上,IE 和 Webkit 亦可 ;) 我们已经让 webkit 生成相同格式的 VDOM 输出了 :)
[3] 事实上,在 Firefox 中用 JS 遍历 DOM 生成 VDOM 的开销是比较高的,达到每页面 500 ms
的量级,所以我们已经在尝试使用 C++ 代码来遍历 DOM 以生成 VDOM,特别是在 webkit 中,而非 firefox.

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

没有评论: