SimpleXML 与 DOMDocument 性能对比

2024-02-01

我正在使用 SimpleXML 类构建 RSS 解析器,我想知道使用 DOMDocument 类是否会提高解析器的速度。我正在解析一个至少有 1000 行的 rss 文档,并且我使用了这 1000 行中的几乎所有数据。我正在寻找需要最少时间完成的方法。


SimpleXML and DOMDocument两者都使用相同的解析器(libxml2), 所以parsing它们之间的差异可以忽略不计。

这很容易验证:

function time_load_dd($xml, $reps) {
    // discard first run to prime caches
    for ($i=0; $i < 5; ++$i) { 
        $dom = new DOMDocument();
        $dom->loadXML($xml);
    }
    $start = microtime(true);
    for ($i=0; $i < $reps; ++$i) { 
        $dom = new DOMDocument();
        $dom->loadXML($xml);
    }
    $stop = microtime(true) - $start;
    return $stop;
}
function time_load_sxe($xml, $reps) {
    for ($i=0; $i < 5; ++$i) { 
        $sxe = simplexml_load_string($xml);
    }
    $start = microtime(true);
    for ($i=0; $i < $reps; ++$i) { 
        $sxe = simplexml_load_string($xml);
    }
    $stop = microtime(true) - $start;
    return $stop;
}


function main() {
    // This is a 1800-line atom feed of some complexity.
    $url = 'http://feeds.feedburner.com/reason/AllArticles';
    $xml = file_get_contents($url);
    $reps = 10000;
    $methods = array('time_load_dd','time_load_sxe');
    echo "Time to complete $reps reps:\n";
    foreach ($methods as $method) {
        echo $method,": ",$method($xml,$reps), "\n";
    }
}
main();

在我的机器上我基本上没有什么区别:

Time to complete 10000 reps:
time_load_dd: 17.725028991699
time_load_sxe: 17.416455984116

这里真正的问题是你正在使用什么算法以及你正在对数据做什么。 1000 行并不是一个大的 XML 文档。您的减速不会体现在内存使用或解析速度上,而是体现在您的应用程序逻辑上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SimpleXML 与 DOMDocument 性能对比 的相关文章

  • php下拉菜单人口

    我正在尝试编写一个 php 脚本 该脚本将根据主下拉菜单的选择填充第二个下拉菜单 我想使用 jquery 来完成所有非页面刷新的事情 但我发现现有的所有东西都很难理解和修改 你知道有什么写得很好且易于理解的东西吗 或者可能是现有的教程 下面
  • 为什么 PHP 中不允许“传统”类型提示?

    刚刚发现类型提示 http php net manual en language oop5 typehinting phpPHP 中允许 但不适用于整数 字符串 布尔值或浮点数 为什么 PHP 不允许对整数 字符串等类型进行类型提示 从 P
  • mysqli bind_param 中的 NULL 是什么类型?

    我正在尝试将参数绑定到 INSERT INTO MySQLi 准备好的语句 如果该变量存在 否则插入 null 然后我知道 type variable i corresponding variable has type integer d
  • python 日志记录会刷新每个日志吗?

    当我使用标准模块将日志写入文件时logging 每个日志会分别刷新到磁盘吗 例如 下面的代码会将日志刷新 10 次吗 logging basicConfig level logging DEBUG filename debug log fo
  • 在 PHP 中模拟 jQuery.ajax 请求

    我必须在 PHP 中模拟 AJAX 请求 就像在 jQuery 中一样 我当前的代码在这里 原始 AJAX 调用 不得修改 ajax type POST url someFile php data data success function
  • PHP - 扩展 __construct

    我想知道你是否可以帮助我 我有两个类 一个扩展了另一个 B 类将由各种不同的对象扩展 并用于常见的数据库交互 现在我希望 B 类能够处理其连接和断开连接 而无需来自 A 类或任何外部输入的指示 据我了解 问题是扩展类不会自动运行其 cons
  • 来自本地 XML 的模拟 SoapClient 响应

    我想用文件中的 XML 来模拟 SoapClient 的响应 我如何创建一个 stdClass 对象 就像 SoapClient 从文件返回一样 客户端已经包装了 SoapClient 因此可以轻松模拟响应 我的模拟是这样的 soapCli
  • Laravel 5.4 升级 - 违反完整性约束 - 列不能为空

    奇怪的是 所有这些都在 5 2 中工作 但我不知道可以改变什么来实现这一点 下面是错误和正在插入的数组 SQLSTATE 23000 Integrity constraint violation 1048 Column gender can
  • PHP 基本身份验证 file_get_contents() [重复]

    这个问题在这里已经有答案了 我需要从网站解析一些 XML 数据 XML 数据是原始格式 但在我需要进行身份验证之前 基于基本网络服务器的身份验证 使用用户名和密码 I tried homepage file get contents htt
  • 使用 FileInputStream 时如何确定理想的缓冲区大小?

    我有一个从文件创建 MessageDigest 哈希 的方法 我需要对很多文件 gt 100 000 执行此操作 用于读取文件的缓冲区应该设置多大才能最大限度地提高性能 大多数人都熟悉基本代码 为了以防万一 我将在这里重复一遍 Messag
  • chown:不允许操作

    我有问题 我需要通过 php 脚本为系统中的不同用户设置文件所有者权限 所以我通过以下命令执行此操作 其中 1002 是系统的用户 ID file put contents filename content system chown 100
  • 选取散列第 N 个元素的最快方法

    我有一个大哈希表 带有字符串索引的数组 并正在寻找一个函数quickly从中选取第一个 理想情况下也是第 N 个 元素 array shift and reset 对于我的需求来说太慢了 UPDATE 我也不是在寻找基于引用的解决方案 该函
  • CSS 无法从带有 php“includes”的相对路径工作

    文件夹结构 index php includes header html css style css 我的主项目文件夹中有 2 个子文件夹 一个是名为 includes 的文件夹 另一个名为 css 我有我的 index php主文件夹中的
  • 我怎样才能让这个脚本在 WordPress 上运行?

    我有这个脚本 document ready function text1 click function this hide 代码html div class div1 p class text1 text to appear when th
  • mysql表中的数据非常大。即使 select 语句也需要很多时间

    我正在开发一个数据库 它是一个相当大的数据库 有 13 亿行和大约 35 列 这是我检查表状态后得到的结果 Name Table Name Engine InnoDB Version 10 Row format Compact Rows 1
  • 如何确保在 PHP 的“foreach”循环中重置该值?

    我正在写一个简单的 PHP 页面和一些foreach使用了循环 以下是脚本 arrs array a b c foreach arrs as arr if substr arr 0 1 b echo This is b End of fir
  • Doctrine DQL 从 join 返回平面数组

    我通过 DQL 中的常规 LEFT JOIN 选择 3 个实体 它们通过连接表关联 连接表还定义了实体以及带注释的关系 查询执行没有问题 但我的结果作为平面数组返回 我期望一个包含三个实体作为每个索引的数组元素的数组 SELECT e1 e
  • PDO语法错误

    我在一个项目中使用 PDO 但提交时出现语法错误 这是我的代码
  • 为什么在展开的 ADD 循环内重新初始化寄存器会使其运行速度更快,即使循环内有更多指令?

    我有以下代码 include
  • NHibernate - CreateCriteria 与 CreateAlias

    假设以下场景 class Project public Job Job class Job public Name 假设我想使用 Criteria API 搜索其 Job 名称为 sumthing 的所有项目 我可以使用 CreateAli

随机推荐

  • 正确使用通用参考文献

    在c 11之前 我曾经写过这样的代码 Small functions void doThingsWithA const A a do stuff void doThingsWithB const B b do stuff void doTh
  • 如何在创建实例期间强制检查插槽的类型?

    假设我有以下类声明 defclass foo class bar initarg bar type list 当我创建这个类的实例时 make instance不会检查传递的参数是否满足槽类型 所以 我可以这样创建 无效 对象 gt mak
  • C 中的命令行参数打印不正确

    我试图测试我的程序如何接收用户命令行输入 我要测试的命令行输入是 concordance 15 lt input txt 程序的其余部分可以工作 但可以测试参数 所以在我的主要功能中我有这个 int main int argc char a
  • ASP.NET MVC 在部分视图中加载脚本

    我的整个网站是一个 Ajax 网站 因此我的所有视图 布局除外 都可以正常加载或通过 ajax 操作链接加载 如果我将 Javascipt 文件与部分视图一起放入 那么所有代码 都会按预期工作 但脚本会被多次加载 从而使用户下载更多脚本 所
  • 尝试理解 Pandas 中的 .apply()

    我试图避免循环数据帧 因此最近开始使用 apply 但是我不太理解这种行为 下面我有一个超级简单的玩具示例 系统会询问用户该列中的每个水果是否都是苹果 它们都是苹果 因此每个答案都是 Y import pandas as pd df pd
  • Sybase ASE ADO.net 2.0 提供商?

    我正在寻找一个 ADO net 2 0 或更高版本的 Sybase 数据库提供程序 该数据库似乎被称为 Sybase ASE 澄清一下 我对 ASE 感兴趣 而不是 SQL Anywhere 希望该提供程序将包含在数据库中 或者免费 我可以
  • Nuget 添加包出现访问被拒绝错误

    当我通过 Visual Studio 2015 GUI 添加 Nuget 包时 某些包未安装 并出现以下错误 对路径 Microsoft DotNet InternalAbstractions dll 的访问被拒绝 我尝试以管理员身份运行
  • 如何使用 TypeScript 为无状态、函数式 React 组件指定(可选)默认 props?

    我正在尝试在 Typescript 中创建一个带有可选 props 和 defaultProps 的无状态 React 组件 对于 React Native 项目 这对于普通 JS 来说是微不足道的 但我对如何在 TypeScript 中实
  • 当模型状态无效时,由于未发送下拉框列表等所有数据,必须重新填充视图模型

    在我的项目中 我创建了一项调查 将该调查链接到一家公司并选择参与的用户 我选择调查模板 添加额外问题并设置有关调查的信息 例如开始和结束日期 总而言之 结果是一个复杂的视图 其中包含来自域的许多部分的数据 我为此视图创建了一个 ViewMo
  • 在 ASP.NET Core 1.0 中使用 SignalR

    我们有一个 ASP NET Core 1 0 RC1 应用程序 我们希望将 SignalR 合并到其中 但是 SignalR 尚未成为 ASP NET Core 1 0 的一部分 有没有办法仍然将 SignalR 合并到我们现有的应用程序中
  • 如何在 Redis 哈希中存储数组?

    我对 Redis 很陌生 想看看是否可行 想象一下我收到这样的数据 account abc name Bob lname Smith account abc name Sam lname Wilson account abc name Jo
  • 这些使用 JavaScript 创建表格的方法有何优缺点?

    我发现在JS中创建表有两种方法 Using insertRow and insertCell var table document getElementById table var row table insertRow 1 var cel
  • 表格行从 itext pdf 中的新页面开始

    我正在使用 PdfPTable 在 pdf 中创建一个表格 表格中有一行 在我的行中 最后一列的数据的高度大于页面的剩余高度 因此 行从下一页开始 而表格标题位于上一页 并且第一页页眉下方有大片空白 任何人都可以建议我如何将行拆分为多个页面
  • 在 JSON.NET 中反序列化具有不同名称的对象列表

    我从一个网站获取数据 该网站返回我非常陌生的 json 格式 我已经寻找解决方案几个小时了 我必须使用这些术语 json 的格式如下 Foo name Foo size human 832 73kB bytes 852718 date hu
  • 如何为气流设置多个调度程序

    我们最近转向了气流 2 0 我想了解设置多个调度程序的过程 我尝试查看各种来源 包括使用天文学家 cli 的程序 但我们没有使用它 对于包括气流文档在内的其他来源 虽然他们提到可以这样做并给出了有关数据库要求的一些详细信息 但他们没有提供有
  • 以最佳方式返回负数的计数

    在按行和列排序的矩阵中搜索 的变体 给定一个按行和列排序的二维矩阵 您必须以最佳方式返回负数的计数 我可以想到这个解决方案 初始化行索引 0 如果行索引 gt 0 行索引 否则应用二分搜索 并用此代码实现 5X5 矩阵 include
  • 打印按值排序的字典

    我基本上是尝试迭代字典并从最大值到最小值打印出键 值 我一直在搜索这个网站 很多人都在使用 lambda 但我不太确定它是如何工作的 所以我现在试图避免它 dictIterator iter sorted bigramDict iterit
  • 如何在悬停时更改 navbarPage 链接的文本颜色(在闪亮的应用程序中)?

    这是我的闪亮应用程序的编辑版本 ui lt tagList fluidPage titlePanel tags head tags style HTML navbar default color red important navbarPa
  • PHP 对象生命周期

    我正在使用 PHP 5 2 如果我在一页上new一个对象 这个对象什么时候会被销毁 当用户转到另一个 php 页面时 对象是否会自动销毁 或者我需要显式调用 destructor 它将在页面加载结束时被破坏 从内存中卸载 或者如果您之前取消
  • SimpleXML 与 DOMDocument 性能对比

    我正在使用 SimpleXML 类构建 RSS 解析器 我想知道使用 DOMDocument 类是否会提高解析器的速度 我正在解析一个至少有 1000 行的 rss 文档 并且我使用了这 1000 行中的几乎所有数据 我正在寻找需要最少时间