我使用PHP并且有两个APP。
一个名为APP-1的APP处理超过800,000行Oracle DB到XML文档。
另一个名为APP-2的APP,它将APP-1中的XML作为http响应并将数据显示为网页。
最大数据,APP-2可以请求APP-1是100,000行。
如果APP-2想要获得整个800,000行APP-2必须要求APP-1 8次。
现在我运行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部件的处理时间?
答案 0 :(得分:2)
请注意,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部分的内容,必须在使用前对其进行转义。如果您有二进制数据,情况尤其如此。