Truc et astuce relatif au Json

ViPHP
ViPHP | 3300 Messages

10 avr. 2009, 02:48

Dans le cadre de mon boulot je jongle avec des données qui transite via de l'ajax et donc du json, ces données parfois atteignent des grosseurs assez fantastiques (ca peut aller jusqu'à 200mo et plus) j'aimerais donc vous faire part d'une astuce concernant les performances que vous pourrez trouver utile.

Les navigateurs n'aiment pas les données sur une ligne unique de plusieurs (dizaines de?) milliers de caractères, en revanche le fait d'ajouter quelques retours de chariot bien pensé permet d'avoir des gains de temps de l'ordre du *1000 (un fichier de 100 000 lignes est passé de 5minutes à 15s pour vous donner une idée)

Cette petite fonction vous découpera votre json en une version heredoc de celle ci qui n'aura besoin d'aucun changement javascript à prioris.
function makecolumnjson($text) {
    return preg_replace('`(\}|\]),`', "$1,\\\n", $text);
}
Autre problème relatif à ce genre de probèmes de perf, un innerHTML est meilleur qu'un millier, il est bien plus performant de stocker dans une variable javascript pour faire un seul innerHTML que de boucler et faire des innerHTML à chaque occurence.

Voila, c'était les bons petits conseils de Looping qui n'arrive pas à dormir.
Fait du php depuis que ca existe ou presque :)

ViPHP
ViPHP | 3300 Messages

16 avr. 2009, 16:35

Plus sur le innerHTML:

Voici un petit testcase avec quelques chiffres indicatifs des rapidités et des cas de création de html dynamiquement en javascript, en utilisant dom ou innerHTML, très intéressant à lire, et après avoir fais ces tests moi même j'obtient les mêmes chiffres à la virgule:

http://www.quirksmode.org/dom/innerhtml.html

Pas de surprise innerHTML bien que n'étant pas un standard est bien la façon la plus rapide d'écrire du html en javascript, en revanche ca n'est pas la maniere la plus rapide de supprimer du html - Ô surprise illuminatoire, sous firefox faire un innerHTML = '' sur une balise contenant beaucoup d'élément nous provoque un joli probleme de perf et des temps de réponses horribles (environ 3* le temps pour supprimer par rapport à celui de créer cette même information)

source:
http://stackoverflow.com/questions/6096 ... in-firefox

en d'autre terme ne jamais remplacer ou effacer des données avec un innerHTML, mais pour les créer c'est ok :)
Fait du php depuis que ca existe ou presque :)

Mammouth du PHP | 568 Messages

28 août 2009, 10:07

Salut,

Ayant rechercher des infos sur la manière d'encoder du php en JSON afin de la transmettre au Javascript, je suis tomber sur ton POST qui me fait poser la question suivante:

Si l'utilisation du innerHTML est plutôt lente lorsqu'il y a moults éléments, que faut-il utiliser pour vider un div? le DOM afin de virer chaque élément un par un?