Giter Site home page Giter Site logo

mcanthony / node-memcpy Goto Github PK

View Code? Open in Web Editor NEW

This project forked from dcodeio/node-memcpy

1.0 2.0 0.0 216 KB

Copies data between node Buffers and/or ArrayBuffers up to ~75 times faster than in pure JS.

Home Page: http://dcode.io

License: Apache License 2.0

Python 1.61% JavaScript 56.89% C++ 41.13% C 0.37%

node-memcpy's Introduction

node-memcpy

Copies data between node Buffers and/or ArrayBuffers up to ~75 times faster than in pure JS.

Wait, what?

node.js utilizes a non-standard concept of I/O buffers and thus has both its Buffer as well as ArrayBuffer support. While Buffers are nice because they are a lot faster than V8's ArrayBuffers, transferring data between those two types can be ridiculously slow. This is where a node module like memcpy comes into play.

// C++ binding

 i memcpy.100k > cc Buffer -> Buffer: 22.756ms
 i memcpy.100k > cc Buffer -> ArrayBuffer: 23.861ms

 i memcpy.100k > cc ArrayBuffer -> Buffer: 22.955ms
 i memcpy.100k > cc ArrayBuffer -> ArrayBuffer: 23.273ms

// Native JS

 i memcpy.100k > js Buffer -> Buffer: 21.617ms
 i memcpy.100k > js Buffer -> ArrayBuffer: 993.361ms

 i memcpy.100k > js ArrayBuffer -> Buffer: 940.273ms
 i memcpy.100k > js ArrayBuffer -> ArrayBuffer: 1626.182ms

API

memcpy(target[, targetStart=0], source[, sourceStart=0[, sourceEnd=source.length]):bytesCopied
Argument Type Optional Description
target Buffer | ArrayBuffer Target buffer to copy to
targetStart number omittable Target offset to begin copying to, defaults to 0
source Buffer | ArrayBuffer Source buffer to copy from
sourceStart number optional Source offset to begin copying from, defaults to 0
sourceEnd number optional Source offset to end copying from, defaults ot source.length
@returns number Number of bytes copied

Source and target regions may overlap.

Usage

  • npm install memcpy
var memcpy = require("memcpy"), // C++ binding if available, else native JS
    memcpy_binding = memcpy.binding, // C++ binding or NULL if not available
    memcpy_native = memcpy.native; // Native JS
...

Please keep in mind that - besides the nice numbers - this is still to be considered experimental. I'd love if you'd review the C++ code to validate that it's safe. I can't yet think of a sane use case, though, as just sticking with Buffers on node.js and ArrayBuffers in the browser should be best practice.

Contributors

Denys Khanzhiyev (node 0.11.13+ support with nan)

License: Apache License, Version 2.0

node-memcpy's People

Contributors

dcodeio avatar xdenser avatar

Stargazers

 avatar

Watchers

 avatar  avatar

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.