Tag: 性能

Zombie.js pressButton长callback延迟

我一直试图通过使用一堆console.logs来解决这个问题,仍然无法弄清楚为什么这些加载时间如此之长。 所以我在我的摩卡unit testing文件中的beforeEach中有下面的代码。 browser.fill('email', 'test1@test.com'); browser.fill('password', 'testtest'); browser.pressButton('Login').then(function () { console.log("#100 – "+ new Date().getTime()); done(); }); 在这种情况下按下button将有一些redirect,然后最后显示仪表板页面。 在该HTML文件的底部,我有以下代码。 <script> $(document).ready(function () { console.log("#200 – "+ new Date().getTime()); }); </script> 所以在运行testing后,如果我把#100之后的值减去 #200之后的值总是大约5000-6000。 因为#200总是在#100之前打印5-6秒。 我不明白为什么加载页面之后需要额外的5-6秒才能调用Zombie.js来调用callback函数。 Zombie.js在加载页面后是否有一些等待或延迟? 还有什么可能导致页面加载和Zombie.js调用该callback函数之间5-6秒的延迟? 编辑我现在有这个相同的问题,但像一个50000毫秒。 这真是在我所有的testing中快速加起来的。 我仍然无法弄清楚为什么会发生这种情况。 编辑2 如果我添加browser.debug()到我的testing它最后打印下面。 它还打印了很多其他的东西,但总的来说很快。 我认为以下可能是问题。 只是不知道为什么这样做或如何解决它。 zombie Fired setInterval every 5000ms +11ms zombie Fired setInterval every 5000ms […]

一个高效的Javascript集合结构

在阅读了许多类似的问题后 设置数据结构的JavaScript实现 模仿JavaScript中的集? 节点JS,传统的数据结构? (如设置等),像Java.util节点? 高效的Javascript数组查找 find一个项目是否在JavaScript数组中的最佳方法? 如何检查数组是否包含JavaScript中的对象? 我仍然有一个问题:假设我有大量的string(数千),我不得不做很多查找(即多次检查给定的string是否包含在此数组中)。 什么是Node.js中最有效的方法? A.sortingstring数组,然后使用二进制search? 要么: B.将string转换为对象的键,然后使用“in”运算符 ? 我知道A的复杂性是O(log N),其中N是string的数量。 但是我不知道B的复杂性 如果一个JavaScript对象被实现为一个哈希表,那么B的复杂度平均而言是O(1),这比A好。但是,我不知道一个Javascript对象是否真的被实现为一个哈希表!

如何提高MongoDB中update()和save()的性能?

我正在寻找如何在以下情况下提高数据库性能的提示。 作为示例应用程序,我今天写了一个相当简单的应用程序,它使用Twitterstream媒体APIsearch某些关键字,然后将结果存储在MongoDB中。 该应用程序是用Node.js写的。 我正在存储2个集合。 一个存储关键字和一个微博ID的数组,引用发现每一个提示该关键字的微博。 这些被添加到数据库使用.update()与{upsert:true},以便新的ID被添加到'ids'数组。 这个集合的示例文档如下所示: {“_id”:ObjectId(“4e00645ef58a7ad3fc9fd9f9”),“ids”:[“id1”,“id2”,“id3”],“keyword”:“#chocolate”} 更新代码: keywords.update({keyword: key_word},{$push:{ids: id}},{upsert:true}, function(err){}) 第二个集合看起来像这样,并简单地通过使用.save()添加 { "twt_id": "id1", "tweet": { //big chunk of json that doesn't need to be shown } } 我现在已经在我的Macbook上运行了,并且已经运行了大约2个小时。 我存储了大量的数据,可能每分钟几百个文件。 目前Mongodb中的对象数量是120k +。 我注意到的是,数据库进程的CPU使用率高达84%,并且自从我开始最新的testing以来,一直在逐渐上升。 我正在阅读设置索引,但由于我添加文件,而不是对他们运行查询,我不知道索引是否会有所帮助。 我认为发生在我身上的是update()可能正在做一个查找,因为我使用$ push,并且索引可能有帮助。 我应该考虑如何让MongoDB不断消耗越来越多的CPU?

如何禁用npm的进度条

正如这里指出的那样,npm的进度条显着降低了整个安装进度。 给出的解决scheme是禁用它 $> npm set progress=false && npm install 我有这个问题,是否可以在一个项目中设置一些东西(例如package.json),这样我就可以在命令行中省略progress=false ,并且只需要执行$> npm install并获得与上面相同的结果?

Phalcon php vs node.js

我们将为我们的应用程序开发其他服务器(并且所有逻辑都在客户端上)。 所以我们想用Phalcon php,但是我们也需要创build实时的聊天系统,使用node.js更容易。 这让我们考虑使用node.js而不是phalcon 不幸的是,我们在node.js中并没有很好的performance,我们喜欢phalcon的performance和内在美。 问题是,有没有人比较phalcon和node.js的性能? 可能最好只使用node.js来处理长轮询聊天请求,但是我不喜欢项目与不同工具连接的时候。

在HTTP模式下,node.js是否比Java有更大的性能优势?

我刚刚开始在node.js中编写一段时间。 这是我的一个问题: 在HTTP应用程序中,给定请求 – 响应模型, 单个应用程序线程被阻塞,直到所有的后端任务完成并且响应返回给客户端,所以性能改进似乎仅限于微调后端事物并行IO请求。 ( 当然,这个改进对涉及到很多繁重和独立的 IO操作很重要,但是通常这个条件也意味着通过重新devise数据结构,可以消除大量的IO请求,并且可能最终获得更好的性能而不仅仅是发行并行操作。 ) 如果那是真的,它怎么会比那些基于Java(或PHP,Python等)的框架产生更好的性能呢? 我也参考了一篇文章了解node.js事件循环 ,这也解释了这种情况: 它确实是一个单线程运行:你不能做任何并行的代码执行; 例如做一个“睡眠”会阻塞服务器一秒钟: while(new Date().getTime() < now + 1000) { // do nothing } 然而,除了你的代码之外,所有东西都是平行的。 我亲自证实,通过将“睡眠”代码放入一个IOcallback闭包中,尝试提交导致此callback的请求,然后再提交另一个。 两个请求都会在处理时触发控制台日志。 我的观察是,后者被阻止,直到前者回复。 那么,这是否意味着只有在双方都可以随时发送事件和互相推送消息的套接字模式下,才能充分利用其asynchronous处理能力呢? 我对此有点困惑。 任何意见或build议是受欢迎的。 谢谢! 更新 我问这个问题是因为报告了一些性能评估案例,例如Node.js接pipe了企业 – 无论您是否喜欢 ,以及LinkedIn从Rails移动到Node:27服务器的速度提高了20倍 。 一些激进的观点声称,J2EE将被完全取代: J2EE已经死了:由JSON服务支持的长寿命的Javascript 。

当填充Int32Array时,Node.JS性能与本机C ++插件相比

我一直在尝试使用Node.JS和C ++插件,发现在使用C ++插件时,填充Int32Array比在Node.JS / JavaScript中直接插入要慢得多。 Node.JS:133〜ms C ++:1103〜ms 有人知道为什么吗? 我的testing代码由一个相当大的数组和包含if语句的循环组成。 我怀疑我正在我的C ++插件中错误地填充数组。 (?) JavaScript的: var testArray = new Int32Array(36594368); var i = 0; for (var xi = 0; xi < 332; xi++) { for (var yi = 0; yi < 332; yi++) { for (var zi = 0; zi < 332; zi++) { if ((xi […]

Node.js中的长循环:使用定时器产生?

我使用Node.js循环通过最终可能是一个相当大的职位数组 。 如果我正在使用客户端JavaScript做类似的事情,我会按照这里所说的使用定时器,以免阻塞线程。 我的问题是:“还是一个健全的服务器端?” 或者“我应该以不同的方式解决问题吗?”

是什么让node.js SlowBuffers“慢”?

我使用node.js为一些存储在SQLite数据库中的PNG图像提供二进制BLOB。 这些图像很小,平均9500字节。 我正在使用sqlite3 npm软件包 ,它似乎将返回二进制BLOB对象作为SlowBuffers 。 我的node.js服务在内存中保存这些SlowBuffers来缓解IO延迟,像这样服务它们: response.send(slowBuffer); 看起来, SlowBuffer有一个类似于Buffer的接口; 转换成Buffer是微不足道的: var f = function(slowBuffer) { var buffer = new Buffer(slowBuffer.length); slowBuffer.copy(buffer); return buffer; } 我应该将这些SlowBuffers转换为Buffers ? 帮我理解为什么他们被称为“缓慢”的缓冲区。

NodeJS通过stream复制文件非常缓慢

我正在用VMWare下的SSD在Node上复制文件,但性能非常低。 我运行的测量实际速度的基准如下: $ hdparm -tT /dev/sda /dev/sda: Timing cached reads: 12004 MB in 1.99 seconds = 6025.64 MB/sec Timing buffered disk reads: 1370 MB in 3.00 seconds = 456.29 MB/sec 但是,以下用于复制文件的节点代码非常慢,因此后续运行并不会使速度更快: var fs = require("fs"); fs.createReadStream("bigfile").pipe(fs.createWriteStream("tempbigfile")); 运行如下: $ seq 1 10000000 > bigfile $ ll bigfile -h -rw-rw-r– 1 mustafa mustafa 848M Jun 3 03:30 […]