Vue.JS 2.0 langsam beim Ändern von nicht verwandten Daten

8

Angenommen, ich habe ein Eingabefeld in Vue.JS, das v-model an eine String-Dateneigenschaft bindet, und eine lange Liste von Zufallszahlen, die mit dieser ersten Zeichenfolge völlig nicht verwandt sind.

%Vor%

Wenn ich beide auf den gleichen Vue setze, sehe ich eine große Verlangsamung beim Eintippen des Eingabefeldes, da Vue das DOM für jeden Listeneintrag nach jedem Eingabeereignis neu bewertet, obwohl sie wirklich nichts damit zu tun haben andere.

Ссылка

Wenn ich jedoch v-for in eine untergeordnete Komponente verschiebe, in der ich randoms an eine Requisite anbinde, erlebe ich keine solche Verlangsamung

Ссылка

Gibt es eine Möglichkeit, die Leistung der zweiten Geige ohne eine Kind-Komponente zu erreichen?

    
Max Benson 08.12.2016, 15:08
quelle

2 Antworten

7
  

Gibt es eine Möglichkeit, die Leistung der zweiten Geige ohne eine Kind-Komponente zu erreichen?

Kurze Antwort

Nein.

Lange Antwort

Immer wenn sich any von der Vorlage ändert, muss Vue die Renderfunktion für die gesamte Komponente erneut ausführen und das neue virtualDOM mit dem neuen vergleichen. Sie können dies nicht für this oder that -Teil der Vorlage tun und überspringen den Rest. Daher wird jedes Mal, wenn sich der Inpot-Wert ändert, das gesamte virutalDOM neu gerendert.

Da dein v-for viele Elemente erzeugt, kann das ein paar 100ms dauern, genug um bei der Eingabe bemerkbar zu sein.

Das Extrahieren des schweren Teils der Vorlage in eine eigene Komponente ist in der Tat die "offizielle" Methode, um diese zu optimieren.

Wie Alex erklärte, könnte v-model.lazy die Situation etwas verbessern, aber den Kern des Problems nicht beheben.

    
Linus Borg 09.12.2016, 10:09
quelle
0

Kürzeste, einfachste Antwort: Ändern Sie v-model in v-model.lazy .

  

Wenn ich beide auf den gleichen Vue setze, sehe ich eine enorme Verlangsamung beim Eintippen des Eingabefeldes, da Vue das DOM für jeden Listeneintrag nach jedem Eingabeereignis neu bewertet, obwohl sie wirklich nichts damit zu tun haben andere.

Beachten Sie, dass das OnceFor-Beispiel immer noch tuckert, obwohl es nicht mehr reaktiv ist. Ich verstehe Vue nicht gut genug, um zu sagen, ob das Absicht ist oder nicht.

%Vor% %Vor% %Vor%
    
Alex Sakharov 09.12.2016 07:49
quelle

Tags und Links