Importations dynamiques pour les composants
Passons maintenant à un composant React qui n'est pas nécessaire lors du chargement initial de la page.
Les composants React peuvent également être importés de manière dynamique, mais dans ce cas, nous utilisons cette fonctionnalité conjointement avec next/dynamic
pour nous assurer qu'il fonctionne comme n'importe quel autre composant React.
Nous allons utiliser cette méthode pour retarder le chargement de notre modal contenant l'exemple de code Hello World
. Ce faisant, nous supprimons également deux bibliothèques tierces supplémentaires du chargement initial de la page.
Ouvrez le fichier pages/index.js
et ajoutez une importation pour dynamic
depuis next/dynamic
au début du fichier :
import dynamic from 'next/dynamic';
Nous devrions également supprimer cette ligne :
import CodeSampleModal from '../components/CodeSampleModal';
Nous pouvons maintenant l'importer comme un composant dynamique en ajoutant ce qui suit au début du fichier :
const CodeSampleModal = dynamic(() => import('../components/CodeSampleModal'), {
ssr: false,
});
CodeSampleModal
sera le composant par défaut retourné par ../components/CodeSampleModal
. Il fonctionne comme un composant React classique, et vous pouvez lui passer des props comme vous le feriez normalement.
Comme nous n'avons pas besoin de ce composant côté serveur, nous avons utilisé ssr: false
pour le désactiver.
Ensuite, nous voulons différer le chargement de ce composant jusqu'à ce que l'utilisateur en ait besoin. Pour ce faire, nous pouvons encapsuler le composant dans une condition qui vérifie si la modal doit être ouverte, et si c'est le cas, elle sera chargée.
Encapsulez le composant CodeSampleModal
comme suit :
{
isModalOpen && (
<CodeSampleModal
isOpen={isModalOpen}
closeModal={() => setIsModalOpen(false)}
/>
);
}
Maintenant, lorsque isModalOpen
passe à true
pour la première fois, le JavaScript nécessaire sera demandé.
Avec ces optimisations, les métriques devraient maintenant paraître plus saines. Exécutons un nouveau rapport Lighthouse dans Chrome DevTools pour vérifier.
Il nous reste ces deux suggestions d'optimisation :
- Utiliser HTTP2 : pour résoudre ce problème, nous pouvons déployer sur une plateforme qui supporte HTTP2 (par exemple Vercel).
- Les éléments image n'ont pas de
width
etheight
explicites : Il s'agit en fait d'un bug dans lighthouse qui n'affecte pas les performances du site.