Tag: 性能

性能/延迟差异 – Node.js中的dynamic与静态路由

如果我决定使用DRY方法并在一个路由可以处理多个不同的任务时dynamic地设置我的路由,这会导致延迟问题? 这是我的第一个Node.js项目,我只是将它用作后端来处理使用RESTful体系结构的请求,其中一些最终用户请求的数据可能非常大。 在决定在node.js中使用dynamic还是静态路由时,会有性能差异吗? 在那里,我有大约10个不同的资源可以获得 app.get('/resource1', …. app.get('/resource2', …. app.get('/resource3', …. app.get('/resource4', …. …. 大约有一半会通过参数或某种查询。 我目前configuration为它被dynamic设置,然后在我有sorting逻辑,然后我处理这样的要求。 app.get('/:resource* ', …. [sorting logic for every case] [handle request] 我假设这将导致更高的延迟。 这种情况下的折衷和最佳做法是什么?

Socket.IO:用大量波动的数据更新客户端的最有效的方法

想象一下Agar.io. 与聊天应用程序不同,随着玩家在地图上移动,用户(或玩家)和其他环境对象的列表将不断变化。 那是因为每个客户端都不能收到关于每个对象的更新,因为地图太大,滞后太多。 那么使用Socket.IO更新客户端的下列哪种方法会更高效: 发送一个包含数据的环境数组,replace每个客户端上的本地数组。 当对象在播放器视野中出现/消失时发送单个消息,并用对象修改本地数组对象。 如果有比上述两种更好的方法,请概述一下。

实时多人游戏 – 地区广播

我正在编写一个实时的多人游戏 (使用Nodejs,socket.io),我想问你的帮助来优化一个点。 我实现了一个更新循环60次/秒和广播循环20次/秒 ,客户端预测和插值的权威服务器。 然后,在广播循环中,我尝试了导致性能问题的区域广播 。 为了极简主义,服务器有数组: 玩家实体(id +位置) 食品实体(ID +职位) 让我们在一个大的地图(如agar.io)中产生1000个食物 ,在服务器的数组server.foods中。 玩家只需要知道他的视口中的食物状态(比方说200种可见的食物 )。 所以,服务器只发送一个包含200个可见食物(id +职位)的包给玩家。 然后,为了让服务器知道,我们将200个可见食物放入播放器对象( player.foods )中的一个数组中, 但玩家可以移动,所以其他的包必须被发送: initFoods是一系列食物(id +职位)初始化(只有当新食物对玩家可见: distFoodPlayer <500 ) removeFoods是一系列的食物(ID +职位)删除(只有当新的食物是不可见的球员: distFoodPlayer> 600 ) 要知道这些信息,我做了这样的事情: for (var i = server.foods.length; i–;) { //Edit: added the next line if (distPlayerFood < 900) { var food = server.foods.entities[i]; var inPlayerFoods […]

Node.js缓冲区与types化数组 – 性能

要发送带有WebSocket的二进制消息,我可以使用Node.js缓冲区或Typed Arrays 。 他们之间在performance方面是否有显着差异?

我如何计算我的npm安装?

我想看看npm install需要多less时间来完成安装我所有的依赖项。 有没有办法让我在本地(以npm)或者使用一些第三方插件来处理这个过程? 我试过* npm i –verbose * npm i –silly * slow-deps (分析你的npm包的第三方库) slow-deps给了我一个体面的结果,但我不确定它的准确性,因为它不作为npm install过程的一部分运行。 有没有其他的方法来精确的时间configurationnpm install过程? 我正在寻找这样的输出(来自Yarn的输出截图):

一个沉重的查询mongodb挂起网站

我的网站(使用MEAN.JS)有1个login页面,它也有多个统计页面(在db中的数据build立报告页面)。 有一个重要的报告会从数据库中提取大约100MB,花费大约10s来完成。 问题是运行这个报告时,大部分的其他网页都无法在浏览器上加载,因为它们也对MongoDB进行查询。 例如,即使已经显示login页面的UI,用户也不能loginlogin页面。 MongoDB能够并行执行多个查询吗?还是仅仅是一个查询队列? MongoDB服务器版本是v3.2.3。 该报告使用2个集合:用户,trackinglocations。 我正在build设一个月的报告: 30 days * 100 users * 10000 gps locations/day/user = 30 million locations user: { username: (string), organization: (objectid) } trackinglocation: { username: (string), date: (date), locations: [ { speed: (number), long: (number), lat: (number) } ] } 我首先查询,findpipe理组织中的用户。 然后查询报告该组织中用户在date范围内的旅行距离。 不仅login页面,许多其他页面在做报告时都不响应浏览器(UI部分仍然由ExpressJS响应,但没有数据表的机会)。

当我开始新的进程时,NodeJS fork进程正在减慢所有其他分叉的进程

我有一个NodeJS程序,它使用ImageMagick从我的数据库中的一些文本创build一个图像。 该程序是从我的NodeJs服务器使用 import childProcess from 'child_process'; let args = [':imageId', '–max_old_space_size=4096']; childProcess.fork('createImage.js', args); 创build图像的过程非常缓慢,在本地机器上可能需要5-6分钟才能处理尺寸为114x84cm的单张图像。 我将尝试解释程序生命周期中发生的事情。 所以,我有服务器上运行的进程MyServer ,当有人请求一个图像MyServer派生一个新的进程。 新的进程ImageCreator1有一个来自promise的循环,并将等到所有的解决。 每个承诺使用ImageMagick创build一个大的图像的一部分 在我的活动监视器中,我可以看到有一些正在运行的进程 Process Name | %CPU MyServer – 0.3 ImageCreator1 – 30.0 convert – 0.1 convert – 0.1 convert – 0.2 convert – 0.1 另外我可以看到ImageCreator1运行asynchronous4-5 ImageMagick转换进程来创build所有这些需要的小图片。 这一切将需要5分钟。 创造大的形象。 所以当我启动两个ImageCreators的时间增加到9 ImageCreators 。 Process Name | %CPU MyServer – […]

Node.js集群不会改善no。 一些博客声称的每秒交易量

我尝试了没有任何性能改进的节点群集。 可能是我可能会错误地测量它。 使用Node.js 7.4.0 server.js const http = require('http'); const server = http.createServer((req, res) => { for (let i = 0; i < 10000; i++) { } res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end("Hello World!"); }).listen(4002); 我遵循本教程创build集群服务器http://rowanmanning.com/posts/node-cluster-and-express/ cluster.js const cluster = require('cluster'); const http = require('http'); const numCPUs = require('os').cpus().length; if (cluster.isMaster) { for (let i […]

Slow Buffer.concat

当我以64Kb的片段读取一个16MB的文件,并且在每个片断上执行Buffer.concat时,后者certificate是非常慢的,需要整整4秒才能完成。 有没有更好的方法来连接Node.js中的缓冲区? 使用Node.js版本:7.10.0,在Windows 10下(均为64位)。 在研究以下问题时会询问这个问题: https : //github.com/brianc/node-postgres/issues/1286 ,这会影响到大量的观众。 PostgreSQL驱动程序以64Kb的块读取较大的bytea列,然后连接它们。 我们发现调用Buffer.concat是在这样的例子中性能巨大的损失背后的罪魁祸首。

提高node.js中嵌套for循环的性能

我在node.js中开发了一个web服务器,并在这个web服务器上托pipe了一个网页(见图片)。 networking服务器被embedded到树莓派中,我使用了一个带D / A转换器的HAT,以便为外部电路产生电压。 如果用户想要使用DAC的一个通道或两个通道,可以select网页。 同样,从0.0到5.0 V(增量)或5.0 V到0.0 V(递减)的斜坡生成参数。 这些设置以stringforms存储在使用socket.io传递给Web服务器的向量中。 对于select两个通道的具体情况,程序执行如下所示的嵌套循环。 哪里: //i= Start Value (DAC0); val_max=Final value (DAC0); forSign="<=" or ">=" ; //j= Start Value (DAC1); val_max=Final value (DAC1); //incr = i='i+step' or i='i-step' –> step= Step Value (DAC0) //incr1 = i='i+step' or i='i-step' –> step= Step Value (DAC1) for(i; eval(i+forSign+val_max); i=eval(incr)){ for(j; eval(j+forSign+val_max1); […]