phpjquery & simpledomphp 比较

phpjquery

https://github.com/TobiaszCudnik/phpquery

simplehtmldom

http://simplehtmldom.sourceforge.net/

<?php

function gddebug() {
	$arrays = func_get_args ();
	echo "n<pre>";
	foreach ( $arrays as $value ) {
		echo "==============================================rn";
		if (is_array ( $value ) || is_object ( $value )) {
			ksort ( $value );
			echo htmlspecialchars ( print_r ( $value, true ) ) . "rn";
		} elseif (is_string ( $value )) {
			echo "string(" . strlen ( $value ) . ") "" . htmlspecialchars ( $value ) . ""rn";
		} else {
			var_dump ( $value );
		}
	}
	echo "</pre>";
}
gddebug ( 'init', memory_get_usage () );
require ('phpQuery/phpQuery.php');
gddebug ( 'load libs', memory_get_usage () );

// INITIALIZE IT
// phpQuery::newDocumentHTML($markup);
// phpQuery::newDocumentXML();
// phpQuery::newDocumentFileXHTML('test.html');
// phpQuery::newDocumentFilePHP('test.php');
// phpQuery::newDocument('test.xml', 'application/rss+xml');
// this one defaults to text/html in utf8
// 文件 内容
// //https://www.google.com.sg/search?hl=zh-CN&site=imghp&tbm=isch&source=hp&biw=1366&bih=653&q=271072+CC240+armani&oq=271072+CC240+armani&gs_l=img.12...5739.5739.0.6570.1.1.0.0.0.0.120.120.0j1.1.0....0...1ac..64.img..1.0.0.Md5Dux9zIdI
$doc = phpQuery::newDocumentFileHTML ( 'test.html' );

gddebug ( 'load file', memory_get_usage () );
$obj = $doc->find ( '.rg_di' );
gddebug ( 'load elements', memory_get_usage (), 'count', count ( $obj ) );

输出

==============================================
string(4) "init"
==============================================
int(62208)
==============================================
string(9) "load libs"
==============================================
int(1441040)
==============================================
string(9) "load file"
==============================================
int(1445448)
==============================================
string(13) "load elements"
==============================================
int(1469744)
==============================================
string(5) "count"
==============================================
int(100)

===========================simple html dom

<?php

function gddebug() {
	$arrays = func_get_args ();
	echo "n<pre>";
	foreach ( $arrays as $value ) {
		echo "==============================================rn";
		if (is_array ( $value ) || is_object ( $value )) {
			ksort ( $value );
			echo htmlspecialchars ( print_r ( $value, true ) ) . "rn";
		} elseif (is_string ( $value )) {
			echo "string(" . strlen ( $value ) . ") "" . htmlspecialchars ( $value ) . ""rn";
		} else {
			var_dump ( $value );
		}
	}
	echo "</pre>";
}
gddebug ( 'init', memory_get_usage () );
include 'simple_html_dom.php';
gddebug ( 'load libs', memory_get_usage () );

// INITIALIZE IT
// phpQuery::newDocumentHTML($markup);
// phpQuery::newDocumentXML();
// phpQuery::newDocumentFileXHTML('test.html');
// phpQuery::newDocumentFilePHP('test.php');
// phpQuery::newDocument('test.xml', 'application/rss+xml');
// this one defaults to text/html in utf8

// //https://www.google.com.sg/search?hl=zh-CN&site=imghp&tbm=isch&source=hp&biw=1366&bih=653&q=271072+CC240+armani&oq=271072+CC240+armani&gs_l=img.12...5739.5739.0.6570.1.1.0.0.0.0.120.120.0j1.1.0....0...1ac..64.img..1.0.0.Md5Dux9
$doc = file_get_html ( 'test.html' );

gddebug ( 'load file', memory_get_usage () );
$obj = $doc->find ( '.rg_di' );
gddebug ( 'load elements', memory_get_usage (), 'count', count ( $obj ) );

 

==============================================
string(4) "init"
==============================================
int(62072)
==============================================
string(9) "load libs"
==============================================
int(527136)
==============================================
string(9) "load file"
==============================================
int(5590512)
==============================================
string(13) "load elements"
==============================================
int(5596016)
==============================================
string(5) "count"
==============================================
int(100)

不用多言,内存使用上完败。。

还只是一个小页面,大页面,基本上simplehtmldom经常性抛出内存不足,需要很很好的进行clear()和unset 来释放内存。同时在解析目标元素时,需要通过正则将目标元素前后元素删除才不会占用过多内存。使用上,phpjquery更接近jquery,个人比较喜欢这类。

本来最近频繁帮朋友采集各种在线商店的商品数据,嫌simple太繁琐,准备自己写个脚本,分离出需要保留的元素来的(包含子节点)。后续研究下phpjquery有没有类似的,没有就自己写一个出来,先占位~

发表评论

电子邮件地址不会被公开。 必填项已用*标注