nodejs / nodejs/node

`import "typescript"` slower than `require("typescript")` due to `cjs-module-lexer` overhead

Offen
#59,913 10 Kommentare 11 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
JavaScript
Sterne
122k
Forks
37.3k
Ø Merge
4 T. 2 Std.
Gemergte PRs (30 T.)
283

Beschreibung

Version
  • Node.js v24.8.0
  • Node.js v22.18.0
Platform

Observed on macOS (x64), but likely reproducible on other platforms.

Description

When loading typescript, using import is ~100ms slower than require.

This seems to come from the cjs-module-lexer step Node.js runs for CommonJS packages. Since typescript itself is CommonJS, require avoids the overhead and is noticeably faster.

Image
Reproduction

https://github.com/chenjiahan/nodejs-repro-require-import-typescript

// import.mjs
import typescript from "typescript";

console.log(typescript);

// require.cjs
const typescript = require("typescript");

console.log(typescript);

Example results (macOS, Node.js v24.8.0):

# ~200ms
time node ./import.mjs

# ~100ms
time node ./require.cjs
Ref

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit der verlinkten Reproduktion und vergleiche import.mjs mit require.cjs auf Node.js v24.8.0 und v22.18.0 unter Verwendung der bereitgestellten Timing-Befehle. Untersuche den gemeldeten cjs-module-lexer-Overhead für das CommonJS-Paket typescript; als abgeschlossen gilt die Aufgabe, wenn der Performance-Unterschied reproduziert und erklärt wurde und jeder vorgeschlagene Umfang dokumentiert ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
javascript, node.js, typescript
Bereich
performance
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Ruhig
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
42/100

Neue Issues direkt in Ihr Postfach

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