Tag: 性能

当mongodb插入时,节点应用程序不工作

我还在学习mongodb和node.js。 我试图插入大量的数据说80k + 100k行。 我为此创build了一个使用express.js的应用程序。 我编码的方式,一旦上传button被点击后页面redirect到另一个页面,在后台应用程序插入数据到数据库。 问题是一旦插入开始应用程序停止响应。 即使在插入应用程序完成后,将会更慢2-3分钟。 我试过这个代码 1 Fedora 14 Intel P4 2.80GHz 1.5GiB 2 Fedora 14 i3 3.20GHz 3GiB 如何避免这个问题? 它会在更好的系统上运行得更好吗? 代码来存储数据 MongoClient.connect(MONGODB_URI, function (err, database) { var collection = database.collection(collectionName); for (index = 0; index < jsonResult.length; ++index) { var obj = jsonResult[index]; for (var prop in obj) { if (headers[prop] […]

Heroku:如何正确扩展node.js应用程序?

我正在托pipe我的网站heroku ,我们遇到严重的性能问题。 基本上,它是一个node.js/express应用程序,同时提供静态html( AngularJS )和REST APIs供客户端使用。 部署已经接近了,所以我们开始与JMeter进行基准testing,结果没有任何意义 – 添加Web dynos完全没有影响。 起初我以为也许我们的代码有问题,但我已经很确定Heroku是错误的,因为我们得到相同的结果时,基准一些静态图像或HTML。 只是为了确保我的快递中间件没有造成我把静态文件放在快速堆栈顶部的问题。 提前致谢。

ldapjs(使用node-express)client.search很慢

我使用node.js expressjs ldapjs来实现身份validation。 我有一个要求如下: validation用户 查找用户所属的所有组名称 通过configuration的深度级别(最多3次)查找用户组所属的父组名称; 这意味着find用户 – >find用户的组(#)—>find组的父母组多达三个级别。 为了在node-express环境中实现上述function,我使用了passportjs的ldapjs(编写一个自定义的策略来适应我们的需求)。 我的观察是,throgh ldapClient所做的每个search请求大约需要70ms,这对于完成我所需要的所有search请求(在身份validation过程中需要执行多达60-80个search请求)非常缓慢。 我上面实现了串行请求(我现在做完当前的下一个请求)。 在这种情况下,我该如何提高性能呢? 我可以查看哪些可用的选项?

由于性能开销,replacenodejs中的try / catch

我目前正在使用try / catch来处理JSON.parse错误 。 但是我最近在阅读了一些最佳实践之后发现,在nodejs上使用try / catch有一些性能开销 。 性能开销是否已经被修正了,还有另一种避免JSON.parse错误而不使用try / catch的方法吗?

Mongodb cursor.toArray()已成为瓶颈

Mongodb cursor.toArray()已成为瓶颈。 我需要处理200万个文件并输出到一个文件。 我一次处理10,000个使用跳过和限制选项,但它没有工作。 所以我正在寻找一个更高效的驱动程序。 我也试图一次处理10个文件,这是永久的,所以我不确定.each()是否可以解决这个问题? 每次我们检索单个文档时,.nextObject是否会进行networking调用? Node.js在内存上也有1.5GB的内部限制,所以我不知道如何处理这些文件。 我相信只要在应用程序级别使用正确的方式使用mongo游标,而不是执行任何数据库级别的聚合,就可以解决此问题。

NodeJS c ++插件性能

使用NodeJS 0.11,可以添加自定义的c ++代码,使用V8进行编译并将其作为模块。 当在c ++插件中做很多math计算时,会比“本地”JavaScript快多less?

Sailjs-Waterline:序列化,分析和初始化一个模型

假设我find了使用下一个命令的用户: User.findOne(id).exec(function(err, user){ redis.set(JSON.stringify(user), id); }) 之后,我从redis加载我的对象 redis.get(id, function(err, reply){ if(!err && reply) { var user = JSON.parse(reply); // here methods like user.save() or any of defined manually by developer is unavailable // } else { .. } }) 用户模型示例: module.exports = { attributes : { // Simple attribute: // name: 'STRING', // Or for […]

Node.js性能分析通过火焰图(在Mac上)

火焰图是可视化的分析软件,可以快速而准确地识别最频繁的代码path – Brendan Gregg on flame graph 在Xcode Instruments 上使用node –perf-basic-prof ( 在Mac上 )应该有助于生成用于性能分析的火焰图。 按照这个指南 ,这很容易: perf-<pid>.map node.js 0.12使用node –perf-basic-prof app.js生成perf-<pid>.map node –perf-basic-prof app.js 使用Xcode工具logging堆栈时间分析器( 导出为profile.csv ) 用Brendan Gregg perl工具生成火焰图,使用./stackcollapse-instruments.pl profile.csv | ./flamegraph.pl > graph.svg ./stackcollapse-instruments.pl profile.csv | ./flamegraph.pl > graph.svg 可悲的是,生成的火焰图不会从perf-<pid>.map受益,因此会留下方法地址而不是名称( 1cfc9a09b880而不是LazyCompile:~ /node_modules/benchmark/benchmark.js:1870 )。 有没有办法将映射/符号给Xcode仪器,使其生成一个csv文件的方法名称( 这是行不通的 )?

创build一个大的nodejscaching

我想为我的REST API创build一个大容量的内存caching。 我该如何做到这一点,当caching变得太大,旧的对象被清除? 我正在为这个项目使用nodejs。 编辑 :我暂时做了一个caching类,这是一个可扩展和完全优化的方法? 这里采用的方法是在对象中存在一个指针值( _index ),其中将放置caching资源。 之后,指针递增。 一旦指针达到limit它将被设置回零,并且过程继续,除了指针上的这个时间值被覆盖。 class Cache { constructor(limit = 2048) { if (typeof limit !== 'number' || limit <= 0) { limit = Infinity; } this.limit = limit; this.purge(); } purge() { this._index = 0; this._values = []; this._keys = []; } put(key, value) { if ((let existingIndex […]

使用phantom.js和node.js安排PDF生成

我是node.js和phantom.js的新手,所以我不知道如何更好地利用它们。 我有100多所学校的价目表,可以从各自的学校页面下载为PDF格式。 我们所做的是生成PDF并在一夜之间上传到服务器。 现在我们想要使用node.js和phantom.js来批量生成PDF,并尽可能地自动完成这个过程。 以下链接不是价格表网页,而是testingPDF的示例url。 “` var schedule = require('node-schedule'), path = require('path'), childProcess = require('child_process'), phantomjs = require('phantomjs'), binPath = phantomjs.path, childArgs = [ // phantomjs rasterize.js http://codefight.org codefight.pdf path.join(__dirname, 'rasterize.js'), 'http://codefight.org/', 'codefight.pdf', '400*300' ] // add all the URLs and name of PDF here var pdfSources = [ ['codefight.pdf', 'http://codefight.org/'], ['dltr.pdf', 'http://dltr.org/'] ]; […]