Introduction
The reason can't be more simple: the need for speed.
According to a simple test between node-uuid and C++ uuid, the truth was told: C++ is faster.
The time consumptions of 1M generations of uuid is almost 3s(node-uuid) vs. 0.3s(C++ modules based on boost uuid).
So, the advices is: crucial module should be written in C++, if you have time for this.
node-uuid Module in C++
node-uuid.h
#ifndef NODE_UUID_H#define NODE_UUID_Husing namespace v8;#define NODE_UUID_CLS_NAME "nodeUuid"namespace igame{ namespace uuid { void initialize(Handle<Object> exports); }} // ns#endif
node-uuid.cpp
#include "node_uuid.hpp"// #include <boost/lexical_cast.hpp>namespace igame{ namespace uuid { Persistent<Function> constructor; buid::random_generator uuid_generator; uint32_t uuid_count; Handle<Value> generate_uuid(const Arguments& args); Handle<Value> get_count(Local<String> property, const AccessorInfo& info); void initialize(Handle<Object> exports) { exports->Set(String::NewSymbol("next"), FunctionTemplate::New(generate_uuid)->GetFunction()); exports->SetAccessor(String::NewSymbol("count"), get_count, NULL); } Handle<Value> generate_uuid(const Arguments& args) { HandleScope scope; buid::uuid uid = uuid_generator(); uuid_count++; return scope.Close(String::New(buid::to_string(uid).c_str())); } Handle<Value> get_count(Local<String> property, const AccessorInfo& info) { HandleScope scope; return scope.Close(Integer::New(uuid_count)); } } // ns} // ns
Test
test.js
var uuid = require('./build/Release/node-uuid');console.log('uuid:', uuid.next());console.log('uuid.count + ' uuid(s) has/have been generated.');