我一直在考虑这个问题,似乎无法找到答案.Node.js和V8之间有什么关系?并且Node.js可以在没有V8的情况下工作吗?
暴露Point类的官方示例似乎假设程序中将有固定数量的实例.当在Javascript中调用new时,不清楚如何在C++代码中分配新实例.
你如何公开一个可以拥有多个实例的类?例如,一个Image类:
var img1 = new Image( 640, 480 );
var img2 = new Image( 1024, 768 );
img1.clear( "red" );
img2.clear( "black" );
Run Code Online (Sandbox Code Playgroud) 基准:
不变量:
var f = function() { };
var g = function() { return this; }
Run Code Online (Sandbox Code Playgroud)
测试:
下面按预期速度顺序排列
new f;g.call(Object.create(Object.prototype));new (function() { })(function() { return this; }).call(Object.create(Object.prototype));实际速度:
new f;g.call(Object.create(Object.prototype));(function() { return this; }).call(Object.create(Object.prototype));new (function() { })问题:
f和g内联匿名函数时.为什么new(测试4.)测试更慢?更新:
具体是什么导致new要慢时f和g内联.
我对ES5规范的引用或对JagerMonkey或V8源代码的引用感兴趣.(请随意链接JSC和Carakan源代码.哦,如果他们愿意,IE团队可以泄漏Chakra源代码).
如果您链接任何JS引擎源,请解释它.
我很好奇嵌套函数的node.js模式如何与v8的垃圾收集器一起工作.这是一个简单的例子
readfile("blah", function(str) {
var val = getvaluefromstr(str);
function restofprogram(val2) { ... } (val)
})
Run Code Online (Sandbox Code Playgroud)
如果restofprogram长时间运行,这是不是意味着str永远不会被垃圾收集?我的理解是,对于节点,你最终会使用嵌套函数.如果在外部声明restofprogram,这是否会收集垃圾,因此str不在范围内?这是推荐的做法吗?
编辑我不打算让问题复杂化.那只是粗心大意,所以我修改了它.
我今天遇到了一个奇怪的问题.对于其他人来说,这可能是一个简单的答案,但它让我难过.为什么下面的代码会导致内存错误?
var cur = 167772160;
var bcast = 184549375;
var addresses = [];
while (cur <= bcast){
cur += 1;
addresses.push(cur);
}
addresses.length
addresses // memory goes from a few megs to over a gig in seconds when trying to print this
Run Code Online (Sandbox Code Playgroud)
我得到了这两个错误中的一个......第一个是我在node的解释器中运行这个代码而后者是我在nodeunit中运行它时:
致命错误:CALL_AND_RETRY_2分配失败 - 处理内存不足
致命错误:JS分配失败 - 处理内存不足
我正在使用c ++和v8,并遇到了以下挑战:我希望能够使用v8在javascript中定义一个函数,然后通过c ++调用该函数.另外,我希望能够从c ++将参数传递给javascript函数.我认为以下示例源代码最能解释它.检查示例代码的末尾,看看我想要完成什么.
#include <v8.h>
#include <iostream>
#include <string>
#include <array>
using namespace v8;
int main(int argc, char* argv[]) {
// Create a stack-allocated handle scope.
HandleScope handle_scope;
// Create a new context.
Persistent<Context> context = Context::New();
Context::Scope context_scope(context);
Handle<String> source;
Handle<Script> script;
Handle<Value> result;
// Create a string containing the JavaScript source code.
source = String::New("function test_function(test_arg) { var match = 0;if(test_arg[0] == test_arg[1]) { match = 1; }");
// Compile the source code.
script = Script::Compile(source);
// …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种在我的Java应用程序中嵌入Google JavaScript引擎V8的解决方案.
你有一些解决方案吗?
我已经安装了node-inspector,以发现它不支持断点:| 它有什么意义,请记住,大部分节点代码是异步的,你根本无法一步一步地遵循它?
我在这里肯定错过了一点......
无论如何用断点和一切来调试节点代码?
v8 ×10
javascript ×7
node.js ×4
c++ ×2
embedded-v8 ×2
debugging ×1
ecmascript-5 ×1
haxe ×1
ios ×1
java ×1