Giter Site home page Giter Site logo

esm-vs-cjs's Introduction

ESM vs CJS classes

lol JavaScript

A simple benchmark that imports a simple class defined in a CJS file and an ESM module in different ways, instantiates it and calls a method on the class.

Node v14.21.1

% node index.js
esm named import x 111,761,280 ops/sec ±0.24% (96 runs sampled)
cjs named import x 112,166,049 ops/sec ±0.16% (95 runs sampled)
esm default import x 112,091,845 ops/sec ±0.11% (93 runs sampled)
cjs default import x 112,101,557 ops/sec ±0.10% (97 runs sampled)
esm namespace import x 1,031,611,746 ops/sec ±2.00% (94 runs sampled)
cjs namespace import x 1,042,611,734 ops/sec ±0.10% (97 runs sampled)
esm const binding of namespace import x 1,042,307,380 ops/sec ±0.10% (94 runs sampled)
cjs const binding of namespace import x 996,487,568 ops/sec ±3.00% (92 runs sampled)
esm const binding of named import x 1,001,483,747 ops/sec ±2.85% (89 runs sampled)
cjs const binding of named import x 1,032,741,900 ops/sec ±1.92% (98 runs sampled)
esm const binding of default import x 1,039,850,920 ops/sec ±0.22% (98 runs sampled)
cjs const binding of default import x 1,020,149,272 ops/sec ±2.79% (94 runs sampled)
Fastest is cjs namespace import,esm const binding of namespace import,cjs const binding of named import,cjs const binding of default import

Node v16.18.1

% node index.js
esm named import x 157,728,166 ops/sec ±0.18% (99 runs sampled)
cjs named import x 151,687,853 ops/sec ±0.14% (95 runs sampled)
esm default import x 158,003,146 ops/sec ±0.11% (98 runs sampled)
cjs default import x 157,689,382 ops/sec ±0.11% (99 runs sampled)
esm namespace import x 994,574,822 ops/sec ±0.18% (98 runs sampled)
cjs namespace import x 988,899,435 ops/sec ±0.27% (97 runs sampled)
esm const binding of namespace import x 974,930,113 ops/sec ±0.38% (95 runs sampled)
cjs const binding of namespace import x 994,985,024 ops/sec ±0.17% (102 runs sampled)
esm const binding of named import x 997,615,198 ops/sec ±0.07% (98 runs sampled)
cjs const binding of named import x 997,521,729 ops/sec ±0.07% (98 runs sampled)
esm const binding of default import x 992,885,525 ops/sec ±0.27% (100 runs sampled)
cjs const binding of default import x 959,230,581 ops/sec ±0.21% (95 runs sampled)
Fastest is esm const binding of named import,cjs const binding of named import

Node v18.12.1

% node index.js
esm named import x 143,651,465 ops/sec ±0.60% (98 runs sampled)
cjs named import x 149,111,836 ops/sec ±0.14% (99 runs sampled)
esm default import x 149,056,049 ops/sec ±0.22% (98 runs sampled)
cjs default import x 150,253,771 ops/sec ±0.14% (99 runs sampled)
esm namespace import x 397,889,582 ops/sec ±0.15% (101 runs sampled)
cjs namespace import x 387,277,191 ops/sec ±0.30% (96 runs sampled)
esm const binding of namespace import x 395,243,032 ops/sec ±0.36% (94 runs sampled)
cjs const binding of namespace import x 398,877,755 ops/sec ±0.24% (99 runs sampled)
esm const binding of named import x 399,137,777 ops/sec ±0.14% (101 runs sampled)
cjs const binding of named import x 398,960,888 ops/sec ±0.12% (101 runs sampled)
esm const binding of default import x 390,475,028 ops/sec ±0.53% (101 runs sampled)
cjs const binding of default import x 392,167,862 ops/sec ±0.45% (94 runs sampled)
Fastest is esm const binding of named import,cjs const binding of named import,cjs const binding of namespace import

esm-vs-cjs's People

Contributors

achingbrain avatar

Stargazers

eczn* avatar Omar Alqady avatar Toni Villena avatar Neos21 avatar Jesse Holden avatar

Watchers

 avatar James Cloos avatar  avatar

Forkers

ukstv

esm-vs-cjs's Issues

Equivalence

The benchmark does not seem to be doing equivalent work.

import cjs from './cjs.cjs'
import { ESMClass } from './esm.js'

const CJSClass = cjs.CJSClass

We could change this so both classes are stored in a const binding.

import cjs from './cjs.cjs'
import * as esm from './esm.js'

const CJSClass = cjs.CJSClass
const ESMClass = esm.ESMClass

Add benchmark for node 20

Running the benchmark locally on node 20 shows the regression from >node 14 is fixed.

$ yarn start
yarn run v1.22.19
$ node index.js
esm named import x 192,411,982 ops/sec ±0.54% (92 runs sampled)
cjs named import x 197,725,482 ops/sec ±0.48% (98 runs sampled)
esm default import x 194,759,396 ops/sec ±0.62% (98 runs sampled)
cjs default import x 198,171,349 ops/sec ±0.38% (95 runs sampled)
esm namespace import x 1,305,104,381 ops/sec ±0.38% (96 runs sampled)
cjs namespace import x 1,298,098,129 ops/sec ±0.41% (97 runs sampled)
esm const binding of namespace import x 1,296,285,719 ops/sec ±0.45% (95 runs sampled)
cjs const binding of namespace import x 1,295,945,808 ops/sec ±0.50% (97 runs sampled)
esm const binding of named import x 1,294,673,492 ops/sec ±0.35% (97 runs sampled)
cjs const binding of named import x 1,290,601,893 ops/sec ±0.45% (91 runs sampled)
esm const binding of default import x 1,296,853,584 ops/sec ±0.37% (95 runs sampled)
cjs const binding of default import x 1,295,217,256 ops/sec ±0.39% (95 runs sampled)
Fastest is esm namespace import
Done in 71.70s

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.