首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >减少saveXML的处理时间

减少saveXML的处理时间
EN

Stack Overflow用户
提问于 2013-04-26 18:52:54
回答 1查看 165关注 0票数 1

我使用PHP,有两个应用程序。

一个名为APP-1的应用程序处理超过800,000行Oracle DB to XML文档。

另一个名为APP-2的应用程序从APP-1获取XML作为http响应,并将数据显示为Web页面。

APP-2可以为APP-1请求的最大数据是100,000行。

如果APP-2想要获得整个800,000行,APP-2必须发出8次请求APP-1。

现在我运行APP-2和APP-1。

APP-1在300秒内完成了所有行的处理。

现在我想知道如何减少处理时间。

APP-1使用saveXML生成XML。平均需要25秒,总共需要180秒。它几乎占整个处理时间的一半。

另一方面,APP-2比APP-1快得多。

APP-2使用simplexml_load_string解析XML并转换为HTML。总共需要5秒,平均35秒。

我认为100,000行不是影响处理时间的关键因素,因为simplexml_load_string比saveXML快得多。

对于saveXML所做的部分,有没有什么好的解决方案来减少处理时间?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-26 19:02:55

请注意,DOM文档需要相对较多的内存,因为整个文档树必须保存在内存中。DOM非常适合解析和操作现有的xml内容。如果只需要输出XML,我会使用,而不是,建议使用文档。简单的字符串输出最适合。如下所示:

代码语言:javascript
运行
复制
echo '<?xml version="1.0"?>';
echo '<data>';
while($row = $result->fetchRecord()) {
    echo '<row>
            <foo><![CDATA[' . $ow['foo'] . ']]></foo>
            <bar><![CDATA[' . $row['bar'] . ']]></bar>
          </row>';
}
echo '</data>';

您可以使用输出缓冲来提高性能:

代码语言:javascript
运行
复制
ob_start(4096); // start buffering of output using a 4096 bytes sized buffer

echo '<?xml version="1.0"?>';
echo '<data>';
while($row = $result->fetchRecord()) {
    echo '<row>
            <foo><![CDATA[' . $ow['foo'] . ']]></foo>
            <bar><![CDATA[' . $row['bar'] . ']]></bar>
          </row>';
}
echo '</data>';

ob_end_flush();

注如果数据库中的内容可能包含像]]> (关闭CDATA部分的内容)这样的内容,则必须在使用前对其进行转义。如果您有二进制数据,情况尤其如此。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16234714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档