mercredi 9 juin 2010

for versus foreach

L'un de mes amis vient de me demander laquelle des instructions de PHP, entre for ou foreach, est la plus rapide pour manipuler un tableau, lorsque la butée nécéssaire à for est calculée dans le premier segment de ce dernier, de cette façon :

<?php for ($i = 0, $end = sizeof($array); $i < $end, $i++) { ... } ?>

Il a en effet effectué des tests, mais ses résultats sont en contradiction avec ce qu'affirme deux référents techniques de sa société.

Il m'a donc demandé de jouer le rôle de l'arbitre, vu que nous nous connaissons bien.

Je vais donc passer temporairement outre le fait que la question manque singulièrement de pertinence afin de mieux y revenir plus tard, et je vais donc donner ma réponse immédiatement.

Lire la suite

mardi 8 juin 2010

Les phar au banc d'essai

Suite à mon billet sur le format phar de PHP, j'ai reçu par divers canaux des questions au sujet de l'éventuelle perte de performance que son utilisation induirait.

À l'époque, je n'avais aucune information fiable à communiquer sur le sujet, n'ayant pas eu l'opportunité de réaliser des mesures de performances dans le cadre d'un cas réel d'utilisation.

Il y a bien eu un test de réalisé par le créateur du format, mais je l'ai trouvé trop éloigné de la réalité pour pouvoir lui accorder suffisament de crédit.

Depuis, les choses ont changé puisque j'ai réalisé quelques tests sur du code de qualité production, en l'occurence celui de sparkline.

Lire la suite

jeudi 8 avril 2010

Parangonnons un peu !

Dans le cadre de l'un de mes projets, j'ai été amené à extraire d'un tableau PHP les éléments ayant pour clef une chaîne de caractères.

Mon premier réflexe a été de me tourner vers la fonction array_filter(), mais malheureusement, elle ne permet pas de filtrer sur les clefs d'un tableau.

Du coup, j'ai été obligé de trouver une autre stratégie.

J'ai d'abord envisagé un recours très classique à l'instruction foreach et à la fonction is_string(), avant d'envisager sérieusement l'utilisation d'un objet dérivé la classe filterIterator de la SPL.

Cependant, vu que je ne savais pas quelle méthode serait la plus efficace, et que je souhaitais depuis longtemps me faire une idée des performances de cette classe de la SPL, je me suis fendu d'un petit benchmarking étalonnage, et vu que je suis d'un naturel joueur, j'ai décidé d'ajouter les closures dans l'équation.

Lire la suite