PHP Увеличение скорости записи на страницу - PullRequest
2 голосов
/ 16 апреля 2010

Я сейчас пишу xml и сделал следующее:

header ("content-type: text/xml");
header ("content-length: ".strlen($xml));

$ xml - это xml для записи. У меня около 1,8 мегабайта текста (который я нашел с помощью firebug), похоже, что на запись уходит больше времени, чем на запуск скрипта ... есть ли способ увеличить скорость записи?

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 16 апреля 2010

Это действительно зависит от того, как вы пишете данные. Если вы используете DOM, рассмотрите XMLWriter. Это немного быстрее и удобнее.

Если вы самостоятельно создаете свои выходные данные XML, убедитесь, что вы не добавляете строки без необходимости. Например:

echo "<tag>" . $data . "</tag>"; // this is slower
echo '<tag>', $data, '</tag>';   // this is faster

Оператор запятой не создает новые строки. Также следует учитывать, что строки в одинарных кавычках немного быстрее, чем в двойных. Нет замены переменной для поиска. Как правило, разница минимальна, но в узком цикле вы определенно можете ее увидеть.

В зависимости от вашего источника данных и того, как вы создаете XML, ваша обработка может быть узким местом. Попробуйте профилировать с помощью xdebug и посмотреть, где на самом деле находятся ваши узкие места.

0 голосов
/ 16 апреля 2010

Возможно, стоит попытаться выгрузить ваш XML во временный файл и затем использовать readfile для отправки данных пользователю.

0 голосов
/ 16 апреля 2010

Результаты Google показывают, что эхо имеет низкую производительность для больших строк. Одним из решений было бы разбить строку, чтобы ее повторили, на куски;

function echobig($string, $bufferSize = 8192)
{
    $splitString = str_split($string, $bufferSize);

    foreach($splitString as $chunk)
        echo $chunk;
}

Обратите внимание, я не проверял этот код; Я нашел это в php документах . Прочитайте этот пост для кого-то, у кого была похожая проблема, которая была решена путем разбиения строки эха на куски.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...