Node.js基予Google V8引擎,性能优秀,但JavaScript毕竟是脚本语言,和C/C++相比还是有差距的,本文通过计算fibnacci数列来对比Node Addon和JavaScript之间的性能差距,对性能有要求可以作为参考。
1 // addon.cc 2 #include3 4 namespace demo { 5 6 using v8::Exception; 7 using v8::FunctionCallbackInfo; 8 using v8::Isolate; 9 using v8::Local;10 using v8::Number;11 using v8::Object;12 using v8::String;13 using v8::Value;14 15 int fib(int v)16 {17 if (v == 0) return 0;18 else if (v == 1) return 1;19 else return fib(v - 1) + fib(v - 2);20 }21 22 void Calc(const FunctionCallbackInfo & args) {23 Isolate* isolate = args.GetIsolate();24 25 if (args.Length() < 1) {26 // Throw an Error that is passed back to JavaScript27 isolate->ThrowException(Exception::TypeError(28 String::NewFromUtf8(isolate, "Wrong number of arguments")));29 return;30 }31 32 // Check the argument types33 if (!args[0]->IsNumber()) {34 isolate->ThrowException(Exception::TypeError(35 String::NewFromUtf8(isolate, "Wrong arguments")));36 return;37 }38 39 // Perform the operation40 int value = (int)args[0]->NumberValue();41 42 int f = fib(value);43 44 Local num = Number::New(isolate, f);45 46 args.GetReturnValue().Set(num);47 }48 49 void Init(Local
1 // hello.js 2 const addon = require('./build/Release/addon'); 3 4 // C++ 计算 5 console.log(new Date().toLocaleString()); 6 console.log('The C++ result is: ', addon.fib(45)); 7 console.log(new Date().toLocaleString()); 8 9 10 // JavaScript 计算11 function fib(v) {12 if (v == 0) return 0;13 else if (v == 1) return 1;14 else return fib(v - 1) + fib(v - 2);15 }16 17 console.log('The js result is: ', fib(45));18 console.log(new Date().toLocaleString());
结果很明显-------------------------------
参考代码: