Quelle est la performance de la fourniture/injection de Vue 3 ?
P粉946336138
2023-08-26 09:46:02
<p>Je travaille sur un projet qui s'appuie sur <code>provide</code> au niveau de l'application pour la gestion globale de l'état. Au début, l'objet <code>provide</code>d était petit, mais il a grandi à mesure que le projet grandissait. </p>
<p>Quel impact aura-t-il sur les performances des applications en injectant cet objet là où les données sont nécessaires ? Sans implémenter un outil de gestion d'état global comme Pinia, vaudrait-il la peine de diviser les gros objets que nous fournissons en objets séparés pour fournir des « morceaux » de données là où c'est nécessaire ? </p>
J'ai effectué quelques analyses comparatives de base et je me demandais si les variables fréquemment utilisées devaient être fournies/injectées, ou si elles devaient être accessibles depuis la boutique Pinia dans un grand nombre de composants.
Les résultats montrent qu’il n’y a pas de différence de performances significative.
Mon premier cas de test est très basique : Fournir/injecter un seul
bool
n'est pas la même chose que de l'obtenir à partir du stockage Pinia dans le composant et de restituer le composant plusieurs fois. Le rendu de 50 000 composants a pris entre 20 et 24 secondes, également en utilisant provide/inject et Pinia. Il n'y a pas de différence constante pour dire que l'un ou l'autre est plus rapide/plus lent.Dans le deuxième test, j'ai utilisé un objet plus grand, un tableau d'environ 1 Mo de données (mesuré en impression JSON sans espaces). La différence n’est pas non plus significative. J'ai rendu 50 000 composants et l'utilisation de l'injection et de l'accès au stockage a pris à peu près le même temps, entre 19 et 26 secondes.
Les composants dans chaque cas affichent la valeur booléenne de la variable de thème, de sorte que leur temps de rendu n'augmente pas avec le Big Data par rapport aux petites valeurs booléennes.
Après tout, j'en suis arrivé à la conclusion qu'il n'y a vraiment aucune différence significative entre fournir/injecter et le magasin Pinia. La seule différence évidente est que les performances sont moins stables lorsque les données sont plus volumineuses et que les performances sont plus prévisibles lorsque les données sont plus petites. Peu importe le nombre de fois que je répète le test sur les valeurs booléennes, le temps est toujours compris entre 20 et 24 secondes et à mesure que les données augmentent, j'obtiens des valeurs aberrantes comme 19 secondes ou 26 secondes. Encore une fois, rien de cohérent, cela pourrait simplement être une fluctuation de mon utilisation réelle du processeur et rien à voir avec l'utilisation de Provide/inject par rapport au magasin Pinia.
J'ai testé sur Chrome v110 (x86_64) sur macOS en utilisant vue@3.2.47 et pinia@2.0.32.
Code de test que j'ai utilisé :