nodejs / nodejs/node

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

Ouverte
#59,913 10 commentaires 11 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
JavaScript
Étoiles
122k
Forks
37.4k
Merge moyen
4 j 2 h
PR mergées (30 j)
283

Description

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

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par la reproduction liée et comparez import.mjs à require.cjs sur Node.js v24.8.0 et v22.18.0 à l’aide des commandes de chronométrage fournies. Étudiez la surcharge signalée de cjs-module-lexer pour le package CommonJS typescript ; le travail est considéré comme terminé lorsque la différence de performances est reproduite et expliquée, et que toute portée proposée est documentée.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
javascript, node.js, typescript
Domaine
performance
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
Calme
Clarté
À clarifier
Accessibilité débutants
42/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.