Array update speed
Les mainteneurs répondent en général sous 4 jours
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 35/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- À l'abandon
- Stack technique
- javascript
- Domaine
- performance
Piste de recherche
Commencez par le benchmark JavaScript fourni et reproduisez la comparaison entre filter, Immer's produce avec draft.splice et Array.splice direct sur un tableau de 10 000 000 éléments. Suivez le chemin de produce et de la mise à jour du tableau responsable de la différence, puis vérifiez l'écart de performances signalé avec le même benchmark. Le travail est considéré comme terminé lorsque la mise à jour du tableau est sensiblement améliorée ou que le comportement de performances attendu est clairement établi.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
🐛 Bug Report
I thought that since immer updates arrays directly, it would be more or less as performant as updating the array directly, but this is not at all the case.
I simulated the pattern "remove the nth element of an array". Code pasted later. The results on my machine are:
filter: 186.852ms
immer: 15.871s
splice: 50.453ms
immer seems to be 84 slower than the standard way to remove the nth element of an array in a mutable way (which is looping throught all the elements to remove the given index). This, itself, is not an efficient method, yet in my example is only ~4 times slower then directly using Array.splice()
Link to repro
import {produce} from "immer"
const arr = Array.from({length: 10_000_000}, (i, idx) => ({n: idx}));
console.time('filter');
let remove10_000nth = arr.filter(((i, idx) => idx !== 10_000));
console.timeEnd('filter');
console.time('immer');
remove10_000nth = produce(arr, draft => {
draft.splice(10_000, 1)
})
console.timeEnd('immer');
console.time('splice');
arr.splice(10_000, 1);
console.timeEnd('splice');
Environment
- Immer version: 10.0.4
- I filed this report against the latest version of Immer
- Occurs with
setUseProxies(true) - Occurs with
setUseProxies(false)(ES5 only)
- Langage dominant
- JavaScript
- Étoiles
- 29k
- Forks
- 905
- Merge moyen
- 3 j 16 h
- PR mergées (30 j)
- 22
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de immerjs/immer
-
Shrinking an array with `length =` and growing it back loses the patches for the truncated indicesPeut-être pris @RClaudiuM l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
Les mainteneurs répondent en général sous 4 jours
-
Difficulté 3/5 1-2 jours Accessibilité débutants 35/100
Les mainteneurs répondent en général sous 4 jours
-
Docs: Chinese (zh-CN) website translation is outdated vs English docsPeut-être à nouveau libre @lijiayou0728 l’a pris il y a 91 jours, et aucune pull request n’est ouverte. Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 55/100
immerjs/immer#1242 · 5 commentaires ·
Les mainteneurs répondent en général sous 4 jours
-
Branding Drafts on Type levelOuvertequestion
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
Les mainteneurs répondent en général sous 4 jours
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
immerjs/immer#1217 · 1 commentaire ·
Les mainteneurs répondent en général sous 4 jours
Toutes les issues de immerjs/immer
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Automattic/node-canvas#2633 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
capricorn86/happy-dom#2594 ·
Les mainteneurs répondent en général sous 1 jour
-
Decoding tag 1 (epoch date) with an 8-byte integer throws "Cannot mix BigInt and other types"Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 79/100
microsoft/monaco-editor#5575 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
Les mainteneurs répondent en général sous 1 jour