Laravel News a signalé la sortie d’Inertia.js 3.9.0 le 13 octobre 2026. La version ajoute l’option background à usePoll() et router.poll(). Elle accepte les valeurs throttle, pause et continue. throttle conserve le comportement précédent et exécute un poll sur dix dans un onglet masqué. pause suspend les requêtes jusqu’au retour de la visibilité. continue maintient l’intervalle normal.

polling.js
import { usePoll } from '@inertiajs/vue3'

usePoll(5000, {}, { background: 'pause' })

Avec pause, une requête devenue due pendant que l’onglet était masqué part dès que celui-ci redevient visible. Si l’échéance n’est pas encore atteinte, Inertia attend le temps restant. Les changements rapides d’onglet ne déclenchent donc pas une requête à chaque bascule. keepAlive reste pris en charge, mais devient obsolète au profit de background: 'continue'. Les polls lancés alors que l’onglet est déjà masqué appliquent désormais le réglage choisi.

Le détail de l’événement navigate contient maintenant la propriété type. Sa valeur est initial au premier chargement, y compris après un rechargement. Elle vaut visit lors d’une visite Inertia classique et history lorsque le navigateur restaure une page avec les boutons précédent ou suivant. Une restauration complète depuis l’historique reçoit aussi history lorsque la page précédente ne venait pas d’Inertia. Le code client peut alors recharger des props ciblées, comme messages, car les props restaurées peuvent être anciennes.

router.clearHistory() et Inertia::clearHistory() suppriment désormais le cache de préchargement en même temps que les entrées d’historique chiffrées. Auparavant, après une déconnexion, le bouton précédent pouvait afficher une page protégée provenant de ce cache jusqu’à l’expiration de son entrée. Une requête encore active pendant le nettoyage n’est pas mise en cache lorsqu’elle se termine. La même règle s’applique à router.flushAll().

Une restauration d’historique annule maintenant toute mise à jour de page encore en cours de résolution. Une réponse de prop différée, de poll ou de rechargement partiel ne peut donc plus remplacer la page restaurée après une action sur le bouton précédent. Mohammed Sohail a corrigé ce cas, après la correction de v3.8 concernant les navigations précédente et suivante lors d’un déploiement. Gianpiero Puleo a aussi corrigé useRemember. Une valeur issue de la première entrée d’historique déchiffrée pouvait réapparaître dans une nouvelle visite, par exemple une sélection d’onglet effacée.

InfiniteScroll annule maintenant sa requête active au démontage du composant. Les callbacks de réponses arrivées pendant la transition sont ignorés. Cela évite les erreurs sur la nouvelle page. Une ancienne réponse ne peut plus non plus être fusionnée dans la liste après une navigation vers la même URL avec une chaîne de requête différente, comme après un changement de tri ou de filtre.

Les notes complètes de v3.9.0 mentionnent d’abord #3276 de Gianpiero Puleo, qui ajoute le traitement des tâches apparues pendant la stabilisation de la file. Mohammed Sohail, identifié par @thecrazybob, a fourni la correction de restauration d’historique dans #3274. Pascal Baljet a ajouté le type de navigate dans #3291, vidé le cache de préchargement dans #3307, traité les requêtes InfiniteScroll dans #3308, corrigé une erreur de Svelte <Form> lorsqu’un champ focalisé est démonté dans #3309 et mis à jour les dépendances dans #3310. Le réglage du polling en arrière-plan figure dans #3292.

D’autres changements gèrent QuotaExceededError dans history.replaceState avec #3280 de @danielperez9430. #3257 de @fouteox conserve les sourcemaps lors des transformations des entrées Vite. Gianpiero Puleo a corrigé la régression de useRemember dans #3302. Pascal Baljet a également corrigé dans #3312 une erreur d’InfiniteScroll après le démontage immédiat suivant une modification des éléments.