+++ /dev/null
-var binding = require('./build/default/binding');
-
-c = 0
-
-function js() {
- return c++; //(new Date()).getTime();
-}
-
-var cxx = binding.hello;
-
-var i, N = 100000000;
-
-console.log(js());
-console.log(cxx());
-
-
-
-var start = new Date();
-for (i = 0; i < N; i++) {
- js();
-}
-var jsDiff = new Date() - start;
-console.log(N +" JS function calls: " + jsDiff);
-
-
-var start = new Date();
-for (i = 0; i < N; i++) {
- cxx();
-}
-var cxxDiff = new Date() - start;
-console.log(N +" C++ function calls: " + cxxDiff);
-
-function toMicro (diff) {
- return (diff / N) * 1000000;
-}
-
-console.log("\nJS function call speed: %d microseconds", toMicro(jsDiff));
-console.log("C++ function call speed: %d microseconds", toMicro(cxxDiff));
-
-
-console.log("\nJS speedup " + (cxxDiff / jsDiff));
-
-
+++ /dev/null
-srcdir = '.'
-blddir = 'build'
-VERSION = '0.0.1'
-
-def set_options(opt):
- opt.tool_options('compiler_cxx')
-
-def configure(conf):
- conf.check_tool('compiler_cxx')
- conf.check_tool('node_addon')
-
-def build(bld):
- obj = bld.new_task_gen('cxx', 'shlib', 'node_addon')
- obj.target = 'binding'
- obj.source = 'binding.cc'
--- /dev/null
+binding:
+ node-gyp rebuild --nodedir=../../..
#include <v8.h>
#include <node.h>
-#include <time.h>
using namespace v8;
static Handle<Value> Hello(const Arguments& args) {
HandleScope scope;
- //time_t tv = time(NULL);
return scope.Close(Integer::New(c++));
}
extern "C" void init (Handle<Object> target) {
HandleScope scope;
- //target->Set(String::New("hello"), String::New("World"));
NODE_SET_METHOD(target, "hello", Hello);
}
+
+NODE_MODULE(binding, init);
--- /dev/null
+{
+ 'targets': [
+ {
+ 'target_name': 'binding',
+ 'sources': [ 'binding.cc' ]
+ }
+ ]
+}
--- /dev/null
+// show the difference between calling a short js function
+// relative to a comparable C++ function.
+// Reports millions of calls per second.
+// Note that JS speed goes up, while cxx speed stays about the same.
+
+var assert = require('assert');
+var common = require('../../common.js');
+
+var binding = require('./build/Release/binding');
+var cxx = binding.hello;
+
+var c = 0;
+function js() {
+ return c++;
+}
+
+assert(js() === cxx());
+
+var bench = common.createBenchmark(main, {
+ type: ['js', 'cxx'],
+ millions: [1,10,50]
+});
+
+function main(conf) {
+ var n = +conf.millions * 1e6;
+
+ var fn = conf.type === 'cxx' ? cxx : js;
+ bench.start();
+ for (var i = 0; i < n; i++) {
+ fn();
+ }
+ bench.end(+conf.millions);
+}