为啥使用 DOMDocument 会使网站加载速度变慢?

Posted

技术标签:

【中文标题】为啥使用 DOMDocument 会使网站加载速度变慢?【英文标题】:Why using DOMDocument makes site load slower?为什么使用 DOMDocument 会使网站加载速度变慢? 【发布时间】:2021-06-19 07:40:49 【问题描述】:

我正在使用带有 xpath 的 DOMDocument 从外部(快速)网站将一些数据加载到我的网站。

现在我使用 4 个网址(请参见下文)。我需要增加到 8 个 url。

我注意到,您添加的内容越多,网站加载速度就越慢。

有什么方法可以使用 xpath 来加快加载速度?

或者,也许至少有某种方法可以在 website1(子网站)上加载数据,并在加载时将数据包含到我的主网站。

任何提示都会被采纳。

<?php
$parent_title = get_the_title( $post->post_parent );
$html_string = file_get_contents('weburladresshere');
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($html_string);
libxml_clear_errors();
$xpath = new DOMXpath($dom);
$values = array();
$row = $xpath->query('myquery');
foreach($row as $value) 
    print($value->nodeValue);


?>

【问题讨论】:

【参考方案1】:

速度很慢,因为您要加载外部网站。不要及时加载它们,而是尝试通过另一个 php 作业“在后台”加载它们并将它们保存到临时文件中。然后,您可以从本地临时文件加载 html,这比通过 file_get_contents 加载远程 $html_string 更快。

扩展答案

在这里您可以看到一个非常轻量级的示例,说明如何处理它。

function getPageContent($url) 
    $filename = md5($url).'.tmp';

    // implement your extended cache logic here
    // for example: store it just for 60 seconds...
    if(!file_exists($filename))   
        file_put_contents($filename, $url);
        
    return file_get_contents($filename);


function businessLogic($url) 
    $htmlContent = getPageContent($url);
    // your business logic here


businessLogic($url);

【讨论】:

嘿 Roman,这可能正是我要找的。您能否详细说明在哪里可以找到更多相关信息。或者给我一些关于从哪里开始的骨头(官方 php 页面)。我对 php 完全陌生。谢谢 早上好。我将在今天晚些时候为您提供详细的答复。 ✌️ 我已经更新了我的答案并提供了一个代码示例。

以上是关于为啥使用 DOMDocument 会使网站加载速度变慢?的主要内容,如果未能解决你的问题,请参考以下文章

从 .dae 加载顶点会使我的程序变慢,为啥?

为啥添加 try 块会使程序更快?

使用 PHP DOMDocument 解析脏 html 代码时遇到困难

为啥加载图片很慢?

为啥将我的模块分成多个文件会使其变慢?

为啥打开网页的速度越来越慢?