lovell / 64 Goto Github PK
View Code? Open in Web Editor NEWHigh performance Base64 encoding and decoding for Node.js using SIMD (AVX2, AVX, SSE4.2, SSE4.1, SSSE3) acceleration
License: Apache License 2.0
High performance Base64 encoding and decoding for Node.js using SIMD (AVX2, AVX, SSE4.2, SSE4.1, SSSE3) acceleration
License: Apache License 2.0
Hi,
I'm having an issue to ship the 64
module with my NodeJS standalone app on macOS High Sierra v10.13.6
.
$ node --version
v15.1.0
$ npm --version
7.0.8
$ npm install
[...]
all good
## package the app as a binary
$ make pkg
## test it
$ ./build/flash
pkg/prelude/bootstrap.js:1244
throw error;
^
Error: The module '/Users/micka/flash/node_src/node_modules/64/build/Release/base64.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 88. This version of Node.js requires
NODE_MODULE_VERSION 64. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
at Object.Module._extensions..node (internal/modules/cjs/loader.js:805:18)
at Module.load (internal/modules/cjs/loader.js:651:32)
at tryModuleLoad (internal/modules/cjs/loader.js:591:12)
at Function.Module._load (internal/modules/cjs/loader.js:583:3)
at Module.require (internal/modules/cjs/loader.js:690:17)
at Module.require (pkg/prelude/bootstrap.js:1225:31)
at require (internal/modules/cjs/helpers.js:25:18)
at Object.<anonymous> (/snapshot/node_src/node_modules/64/index.js:3:16)
at Module._compile (pkg/prelude/bootstrap.js:1320:22)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
That being said, if i run my app like this, there's no issue at all:
$ node ./flash.js
I even tried to recompile from source (npm install --build-from-source
), but I got the same error.
Help appreciated.
Hi @lovell ,
I worked on this native addon and I ported it to N-API
You can find my work here: https://github.com/NickNaso/64/tree/napi
If you want experiment with N-API you can create a branch and call it "napi" so I can execute the PR on it.
After that we can iterate to over it and at the end publish a tagged version of 64 like reported here: https://nodejs.org/en/docs/guides/publishing-napi-modules/
I was benchmarking this library on my laptop and it is more than 2 times slower than native implementation. Is the testing code wrong or the benchmark in readme is wrong.
HW
MacBook Pro (15-inch, 2016)
2,7 GHz Intel Core i7
16 GB 2133 MHz LPDDR3
Code
var now = require('performance-now')
var b64 = require('64')
function run (fn, desc) {
var start = now()
for (var i = 0; i < 1000000; i++) {
fn()
}
var end = now()
console.log(desc, (end - start).toFixed(2), 'ms')
}
console.log('NODE', process.version)
run(() => b64.decode(Buffer.from(b64.encode(Buffer.from('test string')), 'base64')), '64')
run(() => Buffer.from(Buffer.from('test string').toString('base64'), 'base64').toString('ascii'), 'native')
Results
NODE v8.1.4
64 2304.52 ms
native 1058.34 ms
NODE v7.6.0
64 2644.51 ms
native 1180.36 ms
NODE v6.10.2
64 2964.18 ms
native 1373.59 ms
I'm doing npm install with docker run -v "$PWD":/var/task lambci/lambda:build-nodejs8.10 npm install
const base64 = require('64');
const responseFromBuffer = (buffer, { cacheTag, eTag }) => ({
headers: {
'Content-Type': 'image/jpeg',
},
isBase64Encoded: true,
body: base64.encode(buffer),
});
...
...
The lambda logs show the output of body to be
"body":{"type":"Buffer","data":[105,86,66,79,82,119,48...
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.