【问题标题】:PHP super fast xml updates required需要 PHP 超快速 xml 更新
【发布时间】:2010-01-30 23:12:44
【问题描述】:

我运行的系统需要从存储在数据库中的数据更新各种 xml 文件。该脚本通过一个由守护进程监控的服务器端 php 文件运行,以便它执行、完成以释放资源,然后重新启动。

我在脚本中有一些基准测试,当我必须更新 100 个 xml 文件时,大约需要 15 秒才能完成。创建的典型 xml 文件大约为 6kb - 我使用 php 的 dom 创建 xml,并使用 dom->save 编写。数据库已完全规范化,并且正确的索引已经到位,我需要执行的 3 个查询获得了更新 xml 所需的必要数据,只需要大约 0.05 秒。因此,瓶颈似乎在于通过 dom 实际创​​建 xml 并写入文件本身。

有没有人知道如何真正加快这个过程?我考虑过使用 crc 检查来查看是否需要重写 xml,但这仍然需要我读取我将要更新的 xml 文件,而我目前不这样做,所以它肯定同样糟糕只是在旧文件的顶部保存一个新文件?另外,我认为无法编辑xml的某些部分,因为结构不统一,节点的顺序可能会根据更新后哪些数据不为空而改变。

非常感谢您对此的想法!

【问题讨论】:

  • 您是否完全重建了 100 个文件中的每一个?您应该链接到几个示例文件,以便人们了解工作量。 15s 对于 100 个文件来说似乎有点太多了,但由于我们不知道它运行在哪种服务器上,所以很难说。尝试使用 XDebug + WinCacheGrind/KCachegrind 分析您的代码。
  • 我同意。似乎这可以通过一个简单的 preg_replace 来实现,但确实有 nei。

标签: php xml dom


【解决方案1】:

十五秒写几个 XML 文件?这听起来太过分了。你能做更多的分析并找出究竟是哪个函数是瓶颈吗?

您是否考虑过编写纯文本 XML (fwrite("<item>value</item>")) 而不是通过 DOM 构建它?在这种情况下听起来是合理的。

否则,对于缓存,总是有 filemtime() 可以用来快速获取 XML 文件的“最后修改”时间,并查看 DB 条目是否比那个更年轻。在您描述的系统中,应该不需要比较内容。

【讨论】:

  • 避免 fwrite() 调用。最好在变量中构建 XML,然后使用 file_put_contents() 保存它。它的性能会更高,而且它会让读者无法获得半写的文件。
猜你喜欢
  • 1970-01-01
  • 2020-01-30
  • 1970-01-01
  • 1970-01-01
  • 2011-06-05
  • 2012-10-29
  • 2015-01-24
  • 1970-01-01
  • 2010-10-06
相关资源
最近更新 更多