我使用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所做的部分,有没有什么好的解决方案来减少处理时间?
发布于 2013-04-26 19:02:55
请注意,DOM文档需要相对较多的内存,因为整个文档树必须保存在内存中。DOM非常适合解析和操作现有的xml内容。如果只需要输出XML,我会使用,而不是,建议使用文档。简单的字符串输出最适合。如下所示:
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_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部分的内容)这样的内容,则必须在使用前对其进行转义。如果您有二进制数据,情况尤其如此。
https://stackoverflow.com/questions/16234714
复制相似问题