我正在尝试记录一个长数组,以便我可以在终端中快速复制它.但是,如果我尝试记录数组,它看起来像:
['item',
'item',
>>more items<<<
... 399 more items ]
Run Code Online (Sandbox Code Playgroud)
如何记录整个阵列,以便我可以快速复制?
我读到一个文件太大而无法放入缓冲区时出现致命错误.
FATAL ERROR: v8::Object::SetIndexedPropertiesToExternalArrayData() length exceeds max acceptable value
Run Code Online (Sandbox Code Playgroud)
要么,
RangeError:在Function.Buffer.allocUnsafe(buffer.js:209:3)中,"size"参数不得大于2147483647
如果我尝试分配1GB缓冲区,我会得到同样的致命错误,
var oneGigInBytes = 1073741824;
var my1GBuffer = new Buffer(oneGigInBytes); //Crash
Run Code Online (Sandbox Code Playgroud)
Node.js Buffer类实例的最大大小是多少?
我正在构建一个.NET 3.5应用程序,并且需要在服务器上评估JS代码 - 基本上是用户提供的规则集,可以在浏览器或服务器上运行.托管JS不是一个选项,因为JS代码将在运行时提供.Aptana的Jaxer也不是一个选择.所以我正在研究在我的应用程序中使用V8引擎的构建.
我成功地将源代码构建到DLL中,但该DLL不是托管库,也不是COM.V8只是普通的C++.
关于如何在C#中与这种类型的DLL互操作的任何想法?另外,我对SpiderMonkey或其他JS引擎的其他建议持开放态度.
提前致谢.
更新:
我能够使用Ryan的解决方案.我刚刚更新了对trunk的最新版本的引用.它运作得很好.谢谢瑞恩.
我最感兴趣的是服务器端Web开发,虽然能够在Chrome中重新部署一些内容会很不错.
我目前正在Eclipse IndigoUbuntu上运行,主要开发Java/Scala程序并使用git.
到目前为止,我遇到过http://code.google.com/p/chromedevtools/和https://www.ebayopensource.org/index.php/VJET/HomePage,但不确定哪个更好.
常见的JavaScript引擎(如V8和WebKit的JavaScriptCore)是否使用字符串实习来处理JavaScript字符串?或者他们实际上在内存中保留了多个相同字符串的实例?
我对分析我的Node.js应用程序很感兴趣.我用--prof旗帜启动它,并获得了一个v8.log文件.我采用了windows-tick-processor并获得了一个人类可读的分析日志.在问题的底部是日志文件中的一些小摘录,我完全无法理解.
我得到了滴答统计方法.我不明白totalvs nonlib意味着什么.此外,我不明白为什么有些事情的前缀LazyCompile,Function,Stub或其他条款.
我希望得到的最佳答案是刻度处理器输出格式的完整文档/指南,完整地解释每个术语,结构等...
除此之外,我只是不明白lazy-compile是什么.是汇编吗?是不是每个函数都只编译一次?那么编译怎么可能是我的应用程序执行的重要部分?该应用程序运行了几个小时来生成此日志,我假设内部JavaScript编译需要几毫秒.这表明懒惰编译是每个函数不会发生一次,但在某种代码评估期间会发生?这是否意味着每当我有一个函数定义(例如嵌套函数)时,内部函数每次都会"懒惰编译"?
我在任何地方都找不到任何关于此的信息,我一直在谷歌搜索DAYS ......
我也意识到有很多探查器标志.其他参考资料也欢迎.
[JavaScript]: ticks total nonlib name 88414 7.9% 20.1% LazyCompile: *getUniqueId C:\n\dev\SCNA\infra\lib\node-js\utils\general-utils.js:16 22797 2.0% 5.2% LazyCompile: *keys native v8natives.js:333 14524 1.3% 3.3% LazyCompile: Socket._flush C:\n\dev\SCNA\runtime-environment\load-generator\node_modules\zmq\lib\index.js:365 12896 1.2% 2.9% LazyCompile: BasicSerializeObject native json.js:244 12346 1.1% 2.8% LazyCompile: BasicJSONSerialize native json.js:274 9327 0.8% 2.1% LazyCompile: * C:\n\dev\SCNA\runtime-environment\load-generator\node_modules\zmq\lib\index.js:194 7606 0.7% 1.7% LazyCompile: *parse native json.js:55 5937 0.5% 1.4% LazyCompile: *split native string.js:554 5138 …
将此基准与chrome 16与opera 11.6 进行比较时,我们发现了这一点
在这种情况下,绑定的模拟版本是
var emulatebind = function (f, context) {
return function () {
f.apply(context, arguments);
};
};
Run Code Online (Sandbox Code Playgroud)
有没有充分的理由说明为什么存在这样的差异,或者仅仅是v8没有足够优化的问题?
注意:emulatebind这只实现了一个子集,但实际上并不相关.如果您拥有功能齐全且经过优化的模拟绑定,则基准测试中的性能差异仍然存在.
如果我使用splice()从数组中删除一个元素,如下所示:
arr.splice(i, 1);
Run Code Online (Sandbox Code Playgroud)
这是O(n)不是最糟糕的情况,因为它会在我之后移动所有元素?或者它是不变的时间,下面有一些链表魔术吗?
我在哪里可以找到V8和ECMAScript之间所有差异的列表?例如V8支持const,它不是ECMAScript标准的一部分.
我正在玩用C++创建Node.js模块,但我对v8 :: Arguments类感到困惑.假设我有一个用于发送电子邮件的Javascript类,它有一个带有此签名的方法:
Mailer::sendEmail(Array recipients, String sender, String message);
Run Code Online (Sandbox Code Playgroud)
这会被称为:
mailer.sendEmail(["joe@gmail.com", "sally@gmail.com"], "fred@gmail.com", "Hi there");
Run Code Online (Sandbox Code Playgroud)
现在在C++的土地上,我有一个带有这个签名的类函数:
SendEmail(const v8::Arguments& args)
Run Code Online (Sandbox Code Playgroud)
这是在Javascript土地上支持我的Mailer :: sendEmail方法.SendEmail函数将创建我的Emailer类的新实例,该实例本身具有带此签名的类函数:
send(std::list<std::string> recipients, std::string from, std::string message)
Run Code Online (Sandbox Code Playgroud)
这就是我迷失的地方.我不知道如何从args中获取值,并将它们转换为常规C++类型,因此我可以将值传递给send函数.据我了解,传递给Mailer :: sendEmail的3个值将在args [0],args [1]和args [2]中提供.我甚至知道我可以做一些类型检查一样if (!args[0]->IsArray()),但实际上转换ARGS [0]到std::list<std::string>是什么,我不知道该怎么办.
编辑:我发现了一种做法的hackish方式,但我仍然认为V8有一些内置方法可以更清晰地处理这个问题.
static Handle<Value> SendEmail(const Arguments& args)
{
HandleScope scope;
list<string> values;
Local<Object> obj = args[0]->ToObject();
Local<Array> props = obj->GetPropertyNames();
// Iterate through args[0], adding each element to …Run Code Online (Sandbox Code Playgroud)