Tag: v8

TypeError:proxy上的'ownKeys':trap结果不包含'arguments'

我想要什么? 如何使其工作? var proxy_handler = { ownKeys: function(target) { return Object.keys(target.data) }, } var proxxxy = function(initial_data) { var return_value = "Goodbye world" var target = function() { return return_value } if(typeof initial_data == "undefined") { target.data = {} } else { target.data = initial_data } return new Proxy(target, proxy_handler) } var p = proxxxy({q:"aaa",w:"bbb",f:"ccc"}) […]

有没有办法让chrome-devtools(–inspect)自动从已经结束的进程中分离出来?

这个过程就像这样: 用–debug –inspect开始代码: "debug": "node –max-old-space-size=8192 –debug=5567 –inspect dist/index.js", 打开devtools提供的url,如下所示: chrome-devtools://devtools/remote/serve_file/@62cd277117e6f8ec53e31b1be58290a6f7ab42ef/inspector.html?experiments=true&v8only=true&ws=localhost:9229/node 做一些debugging。 意识到你有一个错误,杀死进程(Ctrl-C)和改变代码。 重新开始。 开始失败: Unable to open devtools socket: address already in use 意识到您必须手动刷新chrome-devtools页面才能实现该过程不再可用。 节点检查员对此更好。 有什么我失踪? 一些会使chrome-devtools自动从已停止的进程中分离的标志? $ versions npm 3.10.3 node v6.7.0 OS Darwin 15.6.0 Darwin Kernel Version 15.6.0 编辑:我开始使用节点督察pipe理器 (Chrome扩展),发现这整个过程变得更好。

如何确定节点–max_old_space_size给定的内存限制?

我们在Docker容器内部运行1GB,2GB或4GB硬盘内的Node进程。 每个容器通常只运行一个单独的Node进程(加上可能是一个小型的shell脚本包装器)。 为了这个问题的目的,我们假设Node进程永远不会分叉更多的进程。 对于我们较大的容器,如果我们不设置–max_old_space_size,那么在我们使用的节点版本中(在64位机器上),它默认为1400MB 。 (在更高版本的Node中,这将更改为2048MB 。) 理想情况下,我们希望我们的Node进程尽可能多地使用容器,而不会超出内存。 问题是 – 我们应该使用什么数字? 我的理解是,这个特殊的标志调整了Node使用的最大内存池的大小,但它不是唯一的池 – 例如,堆中有一个“非老”的部分,有堆栈等等。我应该从容器的大小减去设置此标志为了远离cgroup内存限制,但仍然最大限度地使用此容器中允许的内存量? 我注意到,从kMaxOldSpaceSizeHugeMemoryDe​​vice被定义的地方,它看起来像默认的“最大半空间”是16MB,默认的“最大可执行文件大小”是512MB。 所以我怀疑这意味着当确定这个标志的值时,我应该从容器的内存限制中减去至less528。 但是肯定有其他的方式,节点使用内存? (更具体地说,我们是一个托pipe服务,向我们的用户销售特定大小的容器,其中大部分用于Node进程。我们希望能够告诉我们的客户要设置什么标志,以便他们既没有被我们的限制杀死,也没有支付我们Node的configuration不允许他们实际使用的容量。)

JavaScript – 缺less语法错误

我偶然发现了这个奇怪的东西。 我在GitHub上写了一些问题,如你所知,在GitHub文章中使用某些语言突出显示,你应该把它封装在tripple 重音 。 例如,如果你想使用JavaScript,你应该这样做: “`JavaScript // Your code “` 它将在您的代码片段中使用JavaScript突出显示。 然而,当我在那里写一篇文章时,我不小心复制了从编辑模式(包括严重口音)剪切的整个代码,并将其粘贴到js文件中。 不过,我忘了删除重音符号。 这是我在js文件中的代码: function test(){ “`JavaScript console.log(1); “` } 当然,这应该是语法错误。 但是,令我惊讶的是,Node.js编译没有任何错误。 我无法相信。 没有cyntax错误。 这怎么可能? 所以,我认为tripple重音在JavaScript中有特殊的含义(也许像Python中的多行string?)。 我在互联网search,但我什么也没find。 为什么EcmaScript允许这样做? 它是什么样的用法呢?

V8 JavaScript:为什么C ++构造函数过滤代理?

看来,V8的C + +代码(testing人员)不把代理作为一个对象,从而返回默认的目标。 纯JavaScript(其他)中的相同场景按预期工作。 C ++中实现的pass through函数 static void tester(const FunctionCallbackInfo<Value>& info) { if (info.Length() > 0) { info.GetReturnValue().Set(info[0]); } } 安装代码(从应用程序周围收集) Local<String> testerString = String::NewFromUtf8(isolate, "tester", NewStringType::kNormal).ToLocalChecked(); Local<ObjectTemplate> globalTemplate = ObjectTemplate::New(isolate); globalTemplate->Set(testerString, FunctionTemplate::New(isolate, tester), DontEnum); Local<Context> context = Context::New(isolate, nullptr, globalTemplate, Local<Value>()); JavaScripttesting,与C ++和JavaScript交互,对象和代理,函数和构造函数。 function other(x) { return x; } { let a = […]

调用一些callback函数会导致分段错误:Nan

我正在用nbind编写C ++插件- GitHub链接用于大多数事情,而Nan-GitHub链接用于调用asynchronouscallback。 当我只调用callback一次,它的作品完美。 但是,当我调用callback两次,它给Segmentation fault (core dumped) 。 使用gdb找不到错误。 这里是JS和C ++代码(使用node-gyp configure build编译): //main.js code var nbind = require('nbind'); var lib = nbind.init().lib; lib.HeaderExample.callJS(function(a) { console.log("result" + a); }); lib.HeaderExample.startThread(); lib.HeaderExample.startThread(); C ++插件的代码 //c++ code class CallbackRunner : public Nan::AsyncWorker { public: CallbackRunner(Nan::Callback *callback) : AsyncWorker(callback) {} void Execute () {} void HandleOKCallback () […]

有一些进展。发送电话不要到nodejs土地

我已经做了一个使用AsyncProgressWorker线程处理我的套接字消息的Node插件。 这是我的代码: class ProgressWorker : public AsyncProgressWorker { public: ProgressWorker( Callback *callback , Callback *progress) : AsyncProgressWorker(callback), progress(progress) {} ~ProgressWorker() {} void Execute (const AsyncProgressWorker::ExecutionProgress& progress) { char response[4096]; int result; int connected = 1; int timeout = 0; int pending = 0; while(connected) { result = sctp_recvmsg(sock, (void *)&response, (size_t)sizeof(response), NULL, 0, 0, 0); […]

node.js代码保护 – 如何使node.js部署只能在V8汇编器中恢复

假设由于某些原因,我想要一个健壮的node.js代码保护,也就是强制使用javascript源代码的node.js部署完全可以通过v8汇编语言进行分析,这使得难以/几乎不可能重build原始的源代码。 换句话说,如果有人假想地以某种未经授权的方式获取了node.js程序(即,假设有问题的node.js程序应该保留在服务器上,而不是直接分发给客户端)服务器是从客户端违规等保证的,但假设服务器不是100%信任,如云服务器,不能100%肯定没有人因为某种原因真的想要这样做),那该代码将只包含V8汇编程序,不包含任何原始的js源代码。 我的意思是不会被简化,缩小,encryption,或者“源代码仍然隐藏在一个string中”,而不是简单的js源代码,只是“优化的汇编程序”为了完整的源代码,源代码将被删除,而不是包含在这个node.js实例中 – 没有encryption,没有缩小 – 只是不存在,句点。 任何性能损失(如果适用的话)在这种情况下都不是一个问题,只有源js是不可恢复的,而不是通过对整个硬件特定的优化V8程序集的冗长乏味。 首先想到的想法是以某种方式迫使V8优化所有的node.js源js代码到某个“特定硬件”的汇编程序(然而“硬件”会在某种稀薄的虚拟机中),然后以某种方式删除JIT持续运行的源代码(如果可能的话),并依靠这个优化的汇编程序。 然后,精简虚拟机将不包含任何源代码的引用,并将继续仅使用生成的V8汇编程序运行该程序。 在这种情况下,我不太确定如何去做。 也许会更喜欢Linux上可以使用的东西,但是如果只能在Windows上使用的话 – 也会考虑它。

node-gyp在关于不兼容types的基本Buffer :: Length操作上崩溃

我已经从NodeJS核心(encryption)取了一段简单的代码: ASSERT_IS_BUFFER(args[0]); ssize_t klen = Buffer::Length(args[0]); 但是,在我自己的本地扩展中编译node-gyp时,出现以下错误: ../deps/v8/include/v8.h:202:5: error: assigning to 'v8::Object *volatile' from incompatible type 'v8::Value *' TYPE_CHECK(T, S); ^ ../deps/v8/include/v8.h:145:37: note: expanded from macro 'TYPE_CHECK' *(static_cast<T* volatile*>(0)) = static_cast<S*>(0); \ ^ ../src/openssljs.cc:300:33: note: in instantiation of function template specialization 'v8::Handle<v8::Object>::Handle<v8::Value>' requested here ssize_t klen = Buffer::Length(args[0]); ^ 任何想法可能是什么原因造成的?

Node.JS内存释放

我写了一个简单的节点服务器: var http = require('http'); var server = http.createServer(); var i = 0; var onRequest = function(req, res){ res.write('test ' + (++i)); res.end(); console.log(i); }; server.on('request', onRequest); server.listen(8080); 当我启动服务器时,节点使用了5.8 MB的内存,但是在服务100,000个请求之后,它的内存使用量为21.5 MB 。 这个内存会在某个时候释放吗? 我相信脚本中没有内存泄漏,这太简单了。 我正在testingWindows 8,本地主机。