Licence CC BY-NC-SA

Éviter JSON pour la copie en profondeur en JS

Petit billet pour grand avertissement

Explications

Lorsqu’on veut faire de la copie en profondeur (deep cloning), une solution qui revient souvent est l’utilisation de JSON.parse(JSON.stringify(…))

Cette solution a deux inconvénients :

  • certains types de données ne sont pas ou pas correctement convertis
  • une certaine lenteur

J’ai expérimenté ce second point avec des tableaux de milliers de données en travaillant sur Vue.js. En essayant avec une autre solution, la fonction structuredClone ou encore cloneDeep de lodash, les performances ont été considérablement améliorées.

Voir également cet article sur medium


6 commentaires

Ha mais JSON.parse(JSON.stringify(…)) est un vrai truc canonique en Javascript ?

Quand j’ai vu ça dans la base de code que j’ai récupéré, j’ai cru que c’était une invention de plus des types qui avaient pondu l’horreur lovecraftienne que constitue le reste du projet.

C’est une des top réponses dans pas mal de fils de discussion sur stackoverflow malheureusement… Pire, je suis tombé sur un lien aujourd’hui (que je ne retrouve pas) d’une version d’eloquent javascript d’un tuto où était présenté clonedeep et JSON.parse(JSON.stringify(…)) côte à côte…

Pendant un moment, j’ai pensé que mon problème de performance venait des composants en plus. :-°

+0 -0

C’est bien une solution courante oui @Spacefox, qui a l’avantage d’être simple à mettre en place. Forcément sur des petits besoins une petite solution peut faire le job.

Mais il faut forcément s’attendre à avoir des performances limitées quand on transforme un objet dans un format structuré… qu’on parse ensuite intégralement pour re-construire un nouvel objet de zéro.

Comme souvent, le plus important est de savoir ce qu’on veut prioriser : les performances d’exécution, la taille de la base de code, la dépendance à des libs externes…

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte