Articles of 优化

优化/function运行时,v8状态码会发生什么变化?

我看到了一个关于v8优化的问题,这让我在v8优化中玩了一下。 我也看到蓝鸟发布有关v8 优化杀手 。 根据v8回购,优化状态代码是2:1,2,4,8等乘法(请参阅OptimizationStatus枚举) 但是,下面的代码给了我奇怪的状态代码,如17和65,只在这些特定的情况下(见最后几行代码)。 任何想法为什么发生这种情况? function adder(a, b) { return new Function('a', 'b', 'return b%2 ? a + b : b%3 ? a – b : b%5 ? b / a : a * b')(a, b); } function addereval(a, b) { return eval('b%2 ? a + b : b%3 ? a – b […]

我如何更快地匹配这个文本?

我正在为名字build立一个自动build议。 当用户在文本框中input时,它会碰到服务器并运行: var names = [ list of 1000 names ]; //I have a list of 1000 names, this is static. var query = 'alex'; var matched_names = []; //This is when it gets slow…. names.forEach(function(name){ if(name.indexOf(query) >= 0){ matched_names.push(name); } }); return matched_names; 我怎样才能使这个更快? 我正在使用Node.js

确定去优化的原因

首先,这个问题: 我怎样才能确定我的function去优化的原因? 例如,下面是我的一个function的去优化条目: [deoptimizing (DEOPT eager): begin 0x3ca09e9f4d1 mergeObjects (opt #50) @12, FP to SP delta: 96] ;;; jump table entry 8: deoptimization bailout 12. translating mergeObjects => node=43, height=64 0x7fff5fbfecd0: [top + 128] <- 0xcd290004121 ; [sp + 144] 0xcd290004121 <undefined> 0x7fff5fbfecc8: [top + 120] <- 0x3ca09e9ca19 ; [sp + 136] 0x3ca09e9ca19 <an Object […]

HTTP vs Websockets相对于开销

我正在build立一个文件同步程序(不像Dropbox)在两端使用node.js。 我需要有数以千计的客户端同时请求数据。 这是我目前的系统: 服务器通过websocket将通知推送给客户端(文件已更新) 客户端队列下载并在空闲时发出HTTP请求 我将以每个50 MB的压缩块为单位提供数据,所以HTTP请求开销(标题)可以忽略不计。 如果我使用websockets进行请求和推送通知,是否会有: 显着的整体速度改善? (减less延迟,authentication等) 服务器上的额外开销,以保持连接打开? 推送二进制数据的问题? 我想我需要通过一个专门的websocket发送通知,因为我不希望它们在服务器上排队,而下载正在发生(大量的开销)。 注意: 只要客户端系统处于打开状态,这些websocket就会长期打开。 编辑:我将使用不同的端口上的不同的HTTP服务器上的WebSockets,以便将它们移动到不同的CPU核心。 我可能有成千上万(如果不是几十万)的并发websocket打开…

优化mysql查询以获取每个用户的“不可见”条目

这个称号是相当迷人的,但我不能拿出更清楚的东西。 长话短说,我们正在创build一个连接到与mySql数据库通信的node.js服务器的移动应用程序。 很常见的设置。 现在,我们有多个用户可以上传“时刻”到我们的服务器。 所有其他用户只能看到这些时刻。 只要用户x看到另一个用户的时刻,x就永远不会看到这个时刻。 也许有点像Snapchat,除了单一用户而不是单一用户。 矩也按照当前用户的位置按距离sorting。 现在,我正在寻找一种仅从数据库中提取“看不见”时刻的智能方式。 现在,我们使用Users和Moments之间的关系表。 假设一个用户(ID = 20)看到了一个时刻(ID = 30320),那么我们插入到这个表格20和30320中。我知道。 这难以扩展,可能是一个可怕的想法。 我想可能是检查最后一次看到的date,只取得过去这个日子的时刻,但是再一次,在按datesorting之前,时刻是按距离sorting的,所以有可能看到一个3分钟的时刻,然后是那个时刻是30秒老。 有没有更聪明的做法,或者我注定要使用Moments和Users之间的关系表,并在查询时join到它? 非常感谢。 编辑 – 这个逻辑总共使用3个表格。 用户 时刻 MomentSeen MomentSeen只包含用户已经看到什么时刻,什么时候。 由于时间不是按datesorting的,我无法获取上次看到的时刻之后上传的所有时刻。 编辑 – 我刚刚意识到移动应用程序Tinder必须使用类似的逻辑,用户“喜欢”哪个用户。 既然你不能回头再看到一个用户两次,他们可能会使用一个非常相似的查询,我正在寻找。 考虑到他们有很多的用户,而且他们是按照距离和其他一些未知的标准sorting的,那么与“UserSawUser”关系表相比,必须有更聪明的做事方式。 编辑 我不能提供整个数据库结构,所以我只是留下重要的表格和他们的一些领域。 Users { UserID INT UNSIGNED AUTO_INCREMENT PRIMARY KEY } Moments { MomentID INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, UploaderID INT UNSIGNED, /* […]

res.json()和res.end()之间的性能差异

我想用Node和Express发送一个JSON响应。 我试图比较res.end和res.json的性能。 版本1:res.json res.json(anObject); 版本2:res.end res.setHeader('Content-Type', 'application/json'); res.end(JSON.stringify(anObject)); 运行一些基准,我可以看到第二个版本比第一个版本快了近15%。 如果我想发送一个JSON响应,是否有一个特殊的原因,我必须使用res.json ?

node.js是否真的不优化对 .slice.call(参数)的调用?

在蓝鸟文件中 ,他们将此作为停止优化的反模式。他们称之为参数泄漏 , function leaksArguments2() { var args = [].slice.call(arguments); } 我在Node.js中一直这样做 这真的是个问题吗? 而且,如果是这样,为什么呢? 假定只有最新版本的Node.js

缓冲区与string速度:为什么string更快?

我有这个名为Memcached.Js的项目,它是Memcached服务器到Node.js的一个端口。 我一直在玩string和缓冲区,比较内存占用和性能。 对于内存来说,缓冲区是不错的select。 但令我惊讶的是,对于表演来说也是如此。 执行string操作比使用缓冲区更快。 这是我试过的: // Option 1: data.toString() – amazing, but it's the best one var commandDataStr = mdata.data.toString().substr(startPos, bytes); var commandData = new Buffer(commandDataStr); // Option 2: data.slice().toString() – the same as above… What? var commandDataStr = mdata.data.slice(startPos, startPos + bytes).toString(); var commandData = new Buffer(commandDataStr); // Option 3: data.slice() – bad […]

使用节点,为什么代码用“严格使用”这么快?

我从来不知道use strict来加速运行时间,但简单的use strict使得我的基准testing速度大大加快,而较慢的testing速度明显较慢(超过两倍)。 这是怎么回事? // // RUN WITH AND WITHOUT THIS // "use strict"; var assert = require('assert'); var slice = [].slice; function thunkify_fast(fn){ assert('function' == typeof fn, 'function required'); return function(){ var args = new Array(arguments.length); for(var i = 0; i < args.length; ++i) { args[i] = arguments[i]; } var ctx = this; return […]