PROJET AUTOBLOG


Shaarli - le hollandais volant

Site original : Shaarli - le hollandais volant

⇐ retour index

Note PHP, encore une optimisation à la con

dimanche 26 septembre 2021 à 18:15

Je suis en train de refaire des optimisations en tout genre dans un script.

L’une concerne un tableau associatif qui liste les #tags associés à mes posts.
Donc je récupère ça de la BDD, concatène tout, explode() et j’ai un tableau.
Je trie le tableau avec ksort(), puis compte les occurrences de chaque valeur dans le tableau (avec array_count_values), pour avoir un tableau associatif :

(
    #tag1 => nombre_d'occurences1,
    #tag2 => nombre_d'occurences1,
    …
)

Ça me prend 50-70 ms.
J’ai pu réduire ça à 30-50 ms très facilement

En fait, j’ai simplement inversé les étapes ksort() et array_count_values().

Avant :

$tableau = …
ksort($tableau);
$tableau = array_count_values($tableau);

Après :

$tableau = …
$tableau = array_count_values($tableau);
ksort($tableau);

Pourquoi c’est plus rapide ?
Parce qu’au début, le tableau contient tous les #tags, y compris les doublons : il y a 10 000 environ. Trier ça prend du temps.

Mais après le array_count_values(), le tableau est dédoublonné et ne compte que 400 entrées. Trier ça prend moins de temps.

Il suffit qu’il y ait 4 ou 5 optimisations comme ça et on gagne 200 ms sur la page. C’est bête hein, mais ça marche.

Je ne sais pas si on apprend ça à l’école (j’ai jamais eu de prog à l’école), mais une règle :

Sur les tableaux, faire le tri après les filtres.

(PS : oui, beaucoup de posts de prog() en ce moment. Pas désolé du tout par contre :p)


— (permalink)