Tag: v8

为什么Node.js heapdump显示已编译的代码?

您好,第一次在调查Node.js应用程序中的内存泄漏。 通过阅读Chrome Profiler中的heapdump快照,我看到有一个条目(编译代码),见附件。 我以为JavaScript不是编译的,不像Java。 任何人都可以摆脱灯光? 此外,不像JProfiler和编写代码的方式(没有正式的构造函数),很难find泄漏,到目前为止快照提供的信息不是很有用,我search了一段时间,至今没有阅读这些快照太多有用的信息,有什么build议吗? 谢谢!

是用JS编写的node.js和V8内置函数,还是以本地代码编译和运行?

在node.js中,我假设通过扩展V8,是驻留在解释器中的内置(如JSON,math等)原生代码,还是他们的JavaScript代码被解释为与其余的用户编写的代码相同的方式? 所以例如,调用JSON.stringify(my_data)跳转到编译的机器代码还是只运行更多的JS代码?

uv_queue_work不在节点插件(c ++)中运行callback_method

我正在C ++中创build节点插件,我希望能够从其他线程进行callback。 要尝试它,我使用uv_queue_work和Nan进行以下testing。 如果我调用函数Hello,它应该为方法firstMethod启动一个新的线程,当它完成时,在另一个线程中调用下一个方法“callbackMethod”,在那里我将做一个callback到Javascript。 但由于某种原因,它运行第一种方法,而不运行第二种方法。 这是我的代码。 void Hello(const v8::FunctionCallbackInfo<v8::Value>& args) { v8::Isolate* isolate = v8::Isolate::GetCurrent(); v8::HandleScope scope(isolate); v8::Local<v8::Function> callback; callback = args[0].As<v8::Function>(); ListBaton* baton = new ListBaton(); baton->callback = new Nan::Callback(callback); uv_work_t* req = new uv_work_t(); req->data = baton; uv_queue_work(uv_default_loop(), req, firstMethod, callbackMethod); } void firstMethod(uv_work_t* req) { std::cout << "Entering PRE thread" << std::endl; […]

JavaScript程序的执行时间

我正在处理JavaScript程序的执行时间。 当我使用nodejs / v8运行它们时,shell上的time命令返回不同的执行时间。 *是否可以对这样的程序执行沙箱,以便在不同的运行中获得不变或更less的执行时间? *有没有其他的方法来检查使用nodejs / v8这些程序的执行时间?

为什么浏览器支持对象的隐式函数属性

var obj = { foo: function() { return "this is foo"; }, bar() { return "this is bar"; } } 在NodeJS中执行此操作会导致在第3行处出现SyntaxError(在预期的第3行)。 尽pipeChrome和Firefox看起来非常开心,但似乎显然是错误的: console.log(obj.foo()); // "this is foo" console.log(obj.bar()); // "this is bar" 为什么浏览器引擎支持这种语法? 有这种行为的文件?

v8 / chrome / node.js函数内联

我如何编写v8将内联的函数? 有没有任何工具来预编译我的代码来静态内联一些函数? 要静态转换函数和函数调用以避免捕获值? 背景 我注意到我写的一个JS程序的瓶颈是一个非常简单的函数调用:我在迭代数百万次的循环中调用函数,并手动内联函数(即用代码replace函数),加快了代码的速度几个数量级。 之后,我试着研究一下这个问题,但是不能推断v8如何优化函数调用的规则,以及如何编写高效的函数。 示例代码:迭代10亿次 递增计数器: let counter = 0; while(counter < 1e9) ++counter; 在我的系统上,Google Chrome / Chromium和v8都需要大约1秒的时间。 ~14秒,迭代1e10次。 给计数器赋值递增函数的值: function incr(c) { return c+1; } let counter = 0; while(counter < 1e9) counter = incr(counter); 大约需要1秒 。 ~14秒,迭代1e10次。 调用一个函数(只声明一次),增加捕获的计数器: let counter = 0; function incr() { ++counter; } while(counter < 1e9) incr(); […]

如何压平V8的ConsString?

JavaScript V8引擎(Chrome,节点)在内部使用ConsString结构来表示串联的string。 把这个结构扁平化为一个简单的string,我可以在网上查到的一种方法是使用string.charCodeAt(0) 。 但是,这似乎不再有效(在Chrome 54上testing)。 有没有另一种方法来强制V8扁平化ConsString结构? 我在创build之后使用这些string的方式将从扁平string中受益(例如,减less的内存使用情况)。

SetDebugMessageDispatchHandler OpenSuse上的node.js 0.6.6错误

在SUSE Linux Enterprise Server 11 (x86_64)上运行node时遇到以下错误 node –version v0.6.6 node hello-console.js FATAL ERROR: v8::Debug::SetDebugMessageDispatchHandler Error initializing V8 我使用以下命令来安装它: ./configure –without-ssl –without-snapshot make make install 任何帮助,将不胜感激。

节点 – nocrankshaft做什么?

运行node.JS和node –nocrankshaft究竟干什么? 有没有关于节点中的这些types的V8设置选项的任何文档?

在AfterWork中调用Persistent <Function> callback segfaults

下面的代码可以在OS X中使用,但是当我在Ubuntu中编译并运行它时,在调用baton->callback函数时会出现段错误。 看起来Persistent<Function>不会持续超过最初的Aysnc::Start方法。 如果是这种情况, 为什么它在OS X上工作 ? 我能做些什么来使其跨平台工作 ? 如果我做错了 ,我需要做些什么才能使我的callback从AfterWork调用? // Async.h #include <v8.h> #include <node.h> #include <string> using namespace node; using namespace v8; class Async : public ObjectWrap { public: static Persistent<Function> constructor_template; static void Initialize(Handle<v8::Object> target); protected: Async() {} ~Async() {} static Handle<Value> Start(const Arguments& args); static void Work(uv_work_t* req); static void […]