2010-04-15 9 views
2

Je vous écris actuellement sur xml et ont fait ce qui suit:PHP augmentation écriture à la page vitesse

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

$ xml étant le xml à écrire sur. Je suis près d'environ 1,8 megs de texte (que j'ai trouvé via firebug), il semble que l'écriture prend plus de temps que le script à exécuter .. y at-il un moyen d'augmenter cette vitesse d'écriture?

Merci d'avance.

+0

Je ne suis pas sûr de comprendre. Vous dites qu'imprimer '$ xml' sur la page prend plus de temps que le script à exécuter? C'est comme dire que PHP prend plus de temps que PHP pour fonctionner. Peut-être que vous voulez dire le temps qu'il faut pour télécharger le contenu de la page? –

+0

désolé laissez-moi le mot un peu mieux .. il semble que menant à l'endroit où j'exécuterait echo ($ xml); s'exécute en une seconde, tout en faisant écho à l'élément $ xml réel stalls sur le navigateur et prend la majorité du temps. – Petrogad

+2

Eh bien, comme vous l'avez dit, votre navigateur télécharge 1,8 Mo de données, ce qui peut prendre beaucoup de temps. Avez-vous envisagé de gzipper vos pages avec apache et mod_deflate? –

Répondre

2

Cela dépend vraiment de la façon dont vous écrivez les données. Si vous utilisez DOM, pensez à XMLWriter. C'est un peu plus rapide et plus simple.

Si vous générez votre sortie XML, assurez-vous de ne pas ajouter de chaînes inutilement. Par exemple:

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

L'opérateur de virgule ne crée pas de nouvelles chaînes. À considérer également, les chaînes entre guillemets simples sont légèrement plus rapides que les guillemets doubles. Il n'y a pas de substitution de variable à rechercher. Normalement, la différence est minime, mais dans une boucle serrée, vous pouvez certainement le voir. En fonction de votre source de données et de la manière dont vous construisez votre fichier XML, votre traitement peut être le goulot d'étranglement. Essayez de profiler avec xdebug et de voir où sont vos goulots d'étranglement.

+0

Actuellement en utilisant XMLWriter, a commencé avec le mien, mais j'ai trouvé que je pouvais réduire la mémoire avec vidage en utilisant XMLWriter. Je vais prendre un pic à xdebug. Merci – Petrogad

+1

Une autre chose à surveiller: assurez-vous que la mise en mémoire tampon de sortie est désactivée – pestilence669

+0

Oui, éteint cela une fois que j'ai réalisé qu'il était allumé .. cela a changé un peu les choses. – Petrogad

0

Les résultats de Google semblent suggérer que l'écho a une mauvaise performance pour les grandes chaînes. Une solution consisterait à rompre la chaîne pour qu'elle soit répercutée en morceaux;

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

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

Veuillez noter que je n'ai pas testé ce code; Je l'ai trouvé dans le php docs. Lire this blog post pour quelqu'un d'autre qui avait un problème similaire qui a été résolu en divisant la chaîne d'écho en morceaux.

0

Il peut être utile d'essayer de vider votre fichier XML dans un fichier temporaire, puis d'utiliser readfile pour envoyer les données à l'utilisateur.

Questions connexes