Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

[V8 perf] Loop callback changing is throttling

Offen
#65,894 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Anfängerfreundlichkeit
25/100
Issue-Typ
Bug
Klarheit
Muss geklärt werden
Aktivitätsstatus
Aktiv
Tech-Stack
javascript
Bereich
performance

Rechercherichtung

Beginne damit, die verknüpfte Reproduktion zu klonen und demo-1.ts sowie demo-2.ts unter Node.js v24 auszuführen, wobei du die Timings beim Wechseln der Callbacks vergleichst. Untersuche das berichtete polymorphe Inline-Cache-Verhalten von V8 und überprüfe das Ergebnis anhand der Fälle BOX und LANCZOS. Als abgeschlossen gilt die Aufgabe, wenn das Ändern von Callbacks nicht mehr dazu führt, dass die wiederholten downsample2D-Aufrufe gegenüber den erwarteten Timings langsamer werden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Version

v24.20.0

Platform
Windows 10
Subsystem

No response

What steps will reproduce the bug?
How often does it reproduce? Is there a required condition?

Always

What is the expected behavior? Why is that the expected behavior?
  • BOX (~5 secs) ✅
  • BOX (~5 secs) ✅
  • LANCZOS (~8 secs) ✅
  • LANCZOS (~8 secs) ✅
What do you see instead?
  • BOX (~5 secs) ✅
  • BOX (~5 secs) ✅
  • LANCZOS (~30 secs) ❌
  • LANCZOS (~30 secs) ❌
Additional information

I have downsample1D_V1 function (it's very unoptimized, but it works, and it's perfect for the demonstration), which executes the passed callback const weight = fn(x); billions of times (3_107_687_040 times per 1 downsample2D call).

There are 2 types of the passed callback function — lanczos3 and box:

function lanczos3(x: number): number {
  if (-3 <= x && x < 3) {
    return sinc(x) * sinc(x / 3);
  }
  return 0;
}

function sinc(x: number): number {
  if (x === 0) {
    return 1;
  }
  x = Math.PI * x;
  return Math.sin(x) / x;
}


function box(x: number): number {
  if (x > -0.5 && x <= 0.5) {
    return 1;
  }
  return 0;
}

I call downsample2D multiple times with the follow callback params (demo-1.ts):

  • BOX (~5 secs) ✅
  • BOX (~5 secs) ✅
  • LANCZOS (~30 secs) ❌
  • LANCZOS (~30 secs) ❌

The first 2 calls work with the expected speed, for ~5 second.
But when the callback is changed, downsample2D works multiple times slower than expected, for ~30 seconds.

In reverse order I also face the throttling (demo-2.ts):

  • LANCZOS (~8 secs) ✅
  • LANCZOS (~8 secs) ✅
  • BOX (~30 secs) ❌
  • BOX (~30 secs) ❌

The problem appears on both Node.js (24) and Deno (2.9).

Bun (1.3/1.4) works fine:

  • BOX (~5 secs) ✅
  • BOX (~5 secs) ✅
  • LANCZOS (~8 secs) ✅
  • LANCZOS (~8 secs) ✅

Related keywords: performance v8 polymorphic inline cache

Vorherrschende Sprache
JavaScript
Sterne
122k
Forks
37.4k
Ø Merge
4 T. 4 Std.
Gemergte PRs (30 T.)
282

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus nodejs/node

Alle Issues in nodejs/node

Ähnliche Issues

Weitere Issues zu JavaScript

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.