# PHP 8.3 : ce qui accélère réellement la génération d’un sitemap volumineux

> Les nouveautés de PHP 8.3 qui allègent un script de sitemap fait maison, sans toucher au cœur de WordPress ni à sa version.

- Auteur : WordPress Développement
- Publié le : 2023-12-26
- Mis à jour le : 2023-12-26
- Catégorie : SEO &amp; GEO
- URL : https://www.wpmoderne.fr/seo/php-8-3-generation-sitemap-volumineux/

## L’essentiel

- json_validate évite un double parsing coûteux
- Constantes de classe typées pour un code plus sûr
- Clonage des propriétés readonly utile pour les objets URL

23 novembre 2023 : date de sortie officielle de PHP 8.3, quelques semaines avant que ce billet ne soit écrit. Une nouvelle version majeure de PHP n'a rien de spectaculaire en apparence pour un script de sitemap fait maison, et pourtant plusieurs ajouts de cette mouture s'appliquent directement à ce genre de traitement : parcours de milliers d'URL, validation de chaînes JSON, manipulation d'objets représentant chaque entrée du fichier XML.

Ce billet ne parle pas de WordPress 6.4 ni de ses fonctionnalités propres. Il se concentre sur ce que PHP 8.3, en tant que langage, apporte à un script maison de génération de sitemap, indépendamment du cœur de WordPress qui continue de tourner par-dessus.

## json_validate() : éviter un décodage complet inutile

Avant PHP 8.3, vérifier qu'une chaîne JSON est valide obligeait à la décoder entièrement avec `json_decode()`, puis à contrôler `json_last_error()`. Pour un script qui reçoit un flux de données externe (par exemple une liste d'URL à intégrer dans le sitemap, fournie par un système tiers), cela signifiait construire toute la structure PHP en mémoire uniquement pour s'assurer que le format était correct.

PHP 8.3 introduit `json_validate()`, une fonction qui vérifie la validité syntaxique d'une chaîne JSON sans construire la structure de données correspondante. Sur un flux de plusieurs milliers d'entrées, l'économie de mémoire et de temps processeur devient mesurable, puisque seule la validation nécessite un décodage réel une fois la chaîne confirmée valide.

## Constantes de classe typées : moins d'erreurs silencieuses

> L'essentiel à retenir : json_validate évite un double parsing coûteux ; Constantes de classe typées pour un code plus sûr ; Clonage des propriétés readonly utile pour les objets URL

PHP 8.3 permet de typer les constantes de classe, comme on type déjà les propriétés depuis PHP 7.4. Pour une classe qui représente un fichier sitemap et ses limites techniques, cela permet d'écrire :

```
class SitemapLimites {
    public const int MAX_URLS_PAR_FICHIER = 50000;
    public const string ESPACE_NOMS = 'http://www.sitemaps.org/schemas/sitemap/0.9';
}
```

Sans ce typage, une constante réassignée par erreur avec une chaîne à la place d'un entier ne provoque aucune alerte avant l'exécution. Avec le typage, PHP refuse la déclaration dès l'analyse de la classe. Sur un script de sitemap où une limite mal typée peut provoquer un découpage incorrect en plusieurs fichiers, ce garde-fou évite un bogue difficile à repérer en production.

### Un exemple concret d'usage

Dans un script qui répartit les URL par lots selon `MAX_URLS_PAR_FICHIER`, une comparaison entre un entier et une chaîne numérique fonctionne parfois par coercition implicite de PHP, mais peut aussi produire des résultats inattendus selon le contexte. Le typage de la constante supprime cette ambiguïté à la source.

## Clonage en profondeur des propriétés readonly

Les propriétés `readonly`, introduites en PHP 8.1, empêchaient jusqu'à présent toute modification après clonage avec `clone`, y compris pour réinitialiser une propriété dans la méthode magique `__clone()`. PHP 8.3 lève cette restriction à l'intérieur de `__clone()` lui-même, ce qui permet de dupliquer un objet représentant une entrée de sitemap tout en réattribuant une propriété readonly, par exemple un identifiant unique ou une date de génération.

```
final class EntreeSitemap {
    public function __construct(
        public readonly string $loc,
        public readonly string $lastmod,
    ) {}

    public function avecNouvelleDate(string $nouvelleDate): self {
        $copie = clone $this;
        // Avant PHP 8.3, cette ligne provoquait une erreur.
        return $copie;
    }
}
```

Ce détail, discret, simplifie l'écriture d'objets immuables pour représenter chaque URL du sitemap, un style de programmation qui réduit les effets de bord dans un script parcourant des milliers d'entrées.

## Ce que PHP 8.3 ne change pas

Aucune de ces nouveautés n'accélère la requête SQL sous-jacente ni le rendu XML lui-même : elles réduisent la charge de traitement autour de la boucle principale. Le gain reste réel mais mesuré, de l'ordre de quelques points de pourcentage sur le temps total d'exécution d'un script déjà bien écrit. Sur un script mal optimisé en amont, ces apports resteront marginaux tant que le problème de fond, comme une requête qui charge des objets complets inutilement, n'est pas traité en premier.

## Compatibilité et migration

Avant d'activer PHP 8.3 sur un environnement de production, il convient de vérifier :

1. que l'extension éventuelle générant le sitemap ne dépend pas d'une fonction dépréciée dans cette version ;
2. que l'hébergement propose bien PHP 8.3 dans son panneau de gestion, ce qui n'est pas systématique juste après une sortie officielle ;
3. que les tests automatisés du script, s'ils existent, sont rejoués sur cette version avant bascule définitive.

## Notre verdict

PHP 8.3 n'est pas une révolution pour un script de sitemap, mais ses ajouts ciblés, en particulier `json_validate()` pour tout flux externe et le typage des constantes de classe pour sécuriser les limites techniques, valent la peine d'être adoptés dès que l'hébergement le permet. Le vrai gain de performance reste toutefois à chercher du côté des requêtes SQL et de la structure du script, pas dans la version du langage qui l'exécute.
