博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何提升Node执行效率
阅读量:5366 次
发布时间:2019-06-15

本文共 1963 字,大约阅读时间需要 6 分钟。

Node.js基予Google V8引擎,性能优秀,但JavaScript毕竟是脚本语言,和C/C++相比还是有差距的,本文通过计算fibnacci数列来对比Node Addon和JavaScript之间的性能差距,对性能有要求可以作为参考。

1 // addon.cc 2 #include 
3 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
exports) {50 NODE_SET_METHOD(exports, "fib", Calc);51 }52 53 NODE_MODULE(addon, Init)54 55 } // namespace demo

 

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());

结果很明显-------------------------------

 参考代码:

转载于:https://www.cnblogs.com/99code/p/5779669.html

你可能感兴趣的文章
Linux的加密认证功能以及openssl详解
查看>>
[Tools] 使用XP远程登录Win8系统
查看>>
【RL-TCPnet网络教程】第38章 TFTP简单文件传输基础知识
查看>>
HDU- 2265 Encoding The Diary
查看>>
socket基本概念
查看>>
[第三方]SCNetworkReachability 获取网络状态控件使用方法
查看>>
在Windows上使用putty连接一台Linux主机
查看>>
Socket常见错误
查看>>
百度地图2.0API和3.0API。你想要的百度地图的这都有
查看>>
专业词汇
查看>>
星期五的收获
查看>>
proxmox 去除订阅提示
查看>>
使用Html.EditorFor()为文本框加上maxlength,placeholder等属性
查看>>
[转]后缀数组求最长重复子串
查看>>
设计模式——外观模式详解
查看>>
MVC3 控件
查看>>
mysql (一)
查看>>
photoshop图层样式初识1
查看>>
【.NET】使用HtmlAgilityPack抓取网页数据
查看>>
typedef的使用
查看>>