ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

加载时间:用PHP的DOMDocument或正则表达式解析HTML是否更快?

2019-09-03 03:29:57  阅读:218  来源: 互联网

标签:php dom regex load-time html-parsing


我正在将我的Flickr帐户中的图像拖到我的网站上,并且我使用了大约九行代码来创建一个可以拉动图像的preg_match_all函数.

我已多次阅读过,通过DOM解析HTML会更好.

就个人而言,我发现通过DOM解析HTML更加复杂.我编写了一个类似的函数来使用PHP的DOMDocument来提取图像,它大约有22行代码.创建需要一段时间,我不确定它的好处是什么.

每个代码的页面大约在同一时间加载,所以我不确定为什么我会使用DOMDocument.

DOMDocument的工作速度是否比preg_match_all快?

我会告诉你我的代码,如果你有兴趣(你可以看到DOMDocument代码有多长):

//here's the URL
$flickrGallery = 'http://www.flickr.com/photos/***/collections/***/';

//below is the DOMDocument method
$flickr = new DOMDocument();
$doc->validateOnParse = true;
$flickr->loadHTMLFile($flickrGallery);
$elements = $flickr->getElementById('ViewCollection')->getElementsByTagName('div');
$flickr = array();
for($i=0;$i<$elements->length;$i++){
    if($elements->item($i)->hasAttribute('class')&&$elements->item($i)->getAttribute('class')=='setLinkDiv'){
        $flickr[] = array(
                          'href' => $elements->item($i)->getElementsByTagName('a')->item(0)->getAttribute('href'), 
                          'src' => $elements->item($i)->getElementsByTagName('img')->item(0)->getAttribute('src'), 
                          'title' => $elements->item($i)->getElementsByTagName('img')->item(0)->getAttribute('alt')
                          );
    }
}
$elements = NULL;
foreach($flickr as $k=>$v){
    $setQuery = explode("/",$flickr[$k]['href']);
    $setQuery = $setQuery[4];
    echo '<a href="?set='.$setQuery.'"><img src="'.$flickr[$k]['src'].'" title="'.$flickr[$k]['title'].'" width=75 height=75 /></a>';
}
$flickr = NULL;

//preg_match_all code is below

$sets = file_get_contents($flickrGallery);
preg_match_all('/(class="setLink" href="(.*?)".*?class="setThumb" src="(.*?)".*?alt="(.*?)")+/s',$sets,$sets,PREG_SET_ORDER);
foreach($sets as $k=>$v){
    $setQuery = explode("/",$sets[$k][2]);
    $setQuery = $setQuery[4];
echo '<a href="?set='.$setQuery.'"><img src="'.$sets[$k][3].'" title="'.$sets[$k][4].'" width=75 height=75 /></a>';
}
$sets = NULL;

解决方法:

如果你愿意为了正确性而牺牲速度,那么继续尝试用正则表达式来推动你自己的解析器.

你说“就个人而言,我发现通过DOM解析HTML会更复杂.”您是在优化结果的正确性,还是编写代码的容易程度?

如果您想要的只是速度和代码并不复杂,为什么不使用它:

$array_of_photos = Array( 'booger.jpg', 'aunt-martha-on-a-horse.png' );

或者只是

$array_of_photos = Array();

那些在不断的时间运行,他们很容易理解.没问题,对吧?

那是什么?你想要准确的结果吗?然后don’t parse HTML with regular expressions.

最后,当你使用像DOM这样的解析器时,你正在处理一段经过充分测试和调试多年的代码.当您编写自己的正则表达式来进行解析时,您将使用自己必须编写,测试和调试的代码.你为什么不想使用许多人多年来一直使用的工具?你认为自己可以在飞行中做得更好吗?

标签:php,dom,regex,load-time,html-parsing
来源: https://codeday.me/bug/20190903/1795213.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有