Articles of 优化

如何做Redis树并优化它+ Node.js

我需要caching将由几个node.js工作人员使用的数据。 下面是这个数据的层次结构,它是三层深的: 每个类别都有相同的子类别,并且都是固定的大小。 每个“数据”包含4个字段,其中一个是唯一的ID。 会有相当多的“数据”插入和删除。 在Redis中实现这样的数据库的最好方法是什么? 哈希集cat + subcat,因为我有他们的固定数量,哈希集还为每个字段具有该唯一ID的数据becouse? 谢谢!

我怎样才能更好地优化这些数据库查询/functionstream?

我已经把我的手从游戏开发转移到写支持后端。 到目前为止,一切似乎都奏效了,但是当我写一个朋友系统的时候,我碰到了这个对我来说看起来很脏的functionstream程。 而且我确定我只是在这一点上一起黑客攻击。 任何node.js向导都会告诉我如何改进? 相当肯定我应该在Redis中caching玩家查询。 acceptfriend: function(req, res){ //Find our user User.findById( req.decoded._id, function(err, user){ //error occured if(err){ return res.status(401).send(err); } //no user found if(!user){ return res.status(401).json({ succes: false, message: 'no user found with that id' } ); } //Does the request exist? if( !_.any( user.social.friendRequests, {id: req.params.id} ) ){ return res.status(401).json( { succes: false, […]

NodeJS MySQL:测量查询执行时间

我在一个共享的主机平台,并希望限制在我的应用程序的查询,以便如果总的执行时间超过一定的数量在一个可变的时间段,那么我可以让应用冷静,然后恢复。 要做到这一点,我想知道我的每个查询需要多长时间,并在应用程序内进行pipe理,而不是通过外部分析。 我已经看到了在PHP查询前后logging时间( 甚至phpMyAdmin这样做 )的例子 ,但是这不会在NodeJS或asynchronous运行查询的任何东西。 所以问题是:我将如何去得到在NodeJS查询的实际执行时间? 为了参考,我使用这个模块来查询MySQL数据库: https : //github.com/felixge/node-mysql/

注释是否消耗内存和/或使用周期?

我正在为使用bash脚本,node.js和C的ARM系统的多个应用程序工作。我在开发时使用注释来跟踪代码中发生的情况或停用实际代码。 我的经验是每个额外的内存指针和处理器周期都会降低系统的性能。 为了优化,我应该删除生产代码中的所有注释还是不值得担心?

将集合与mongodb进行比较

我在一个集合中有大约25k个文档(代号“方”),其结构如下: { "_id": ObjectId("…"), "name": "Magic Show", "funStuff": [ { "date": new Date("2010-01-04T16:00:00+1100"), "start": 5, "finish": 5.5, "symbol": "ABCD" }, … ] }, … 每个文档都有一个名为funStuff的子数组,其中包含大约11k个项目。 我需要比较所有的party.funStuff使用date作为比赛。 例如: 从派对获取2个随机文件(x,y) 通过x.funStuff映射,并尝试与y.funStuff匹配一个date 如果匹配发生update / upsert一个新的文档('ComparableCompared'),看起来大致是这样的: { parent: x._id, child: y.id, results: … } 4.返回第2步前进一天。 我已经尝试了几个JS解决schemefind – >地图 – >保存结果,但它非常缓慢,需要几个月(不到一年的时间)完成。 我显然是做错了。

Webpack分析工具的“提示”部分列出了预取build议中的webpack依赖关系

我的webpack构build内存不足,所以我试图使用webpack分析工具进行debugging。 奇怪的是,没有关于预取的提示包含我的项目的代码。 一切都来自node_modules,更具体地说,是webpack模块。 这里有几个例子: 我检查了这个post: 如何使用prefetchPlugin&分析工具优化webpack的构build时间? 但是它并不能真正解释为什么“提示”部分只包含node_modules依赖关系,在读完之后,我仍然不完全确定预取是如何工作的。 在第二个例子中,我会预取inherits_browser.js吗? 如果是这样,webpack怎么知道什么时候预取呢? 编辑:我解决了我的OOM问题,但我仍然好奇为什么分析工具显示这一点。

将脚本的src从bower_components更改为cdn,尽pipe吞噬

我有一些脚本标记 <script type="text/javascript" src="bower_components/angular/angular.min.js" cdn="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script> <script type="text/javascript" src="bower_components/angular-messages/angular-messages.min.js" cdn="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular-messages.min.js"></script> 我想改变 <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular-messages.min.js"></script> 我试过cdnify,但是我们必须把所有的东西都编码在一起。 我想从HTML文件本身进行更多的控制,所以如果我使用不同的cdn url,它将很容易控制。

节点js事件监听器。 使用匿名callback或声明的function性能?

我在Node.js中编写一个处理来自多个连接的传入数据的TCP服务器。 服务器parsing传入的数据stream并返回存储在数据库中的对象。 我试图做一些性能优化,并testing了两种编码方法: 代码片段1使用嵌套的匿名callback。 代码片断2使用声明的函数来replace匿名callback。 我认为snippet 2会更快,因为它避免了为每个新的传入数据包创build新的函数对象。 然而,在现实生活中,代码片段1似乎快了20%。 有谁知道为什么? 代码片段1: function TcpOnConnection (stream) { stream.on("data", function(data) { parseTcp(data,function(err,obj) { if (err) console.log(err.message); if (obj) { stream.write(obj.returnMsg); storeData(obj); } }); }); } TCPserver.on("connection",TcpOnConnection); 代码片段2: function TcpOnConnection (stream) { function handleParsed(err,obj) { if (err) console.log(err.message); if (obj) { stream.write(obj.returnMsg); storeData(obj); } } function StreamOnData(data) { parseTcp(data,handleParsed); } […]

v8 / chrome / node.js函数内联

我如何编写v8将内联的函数? 有没有任何工具来预编译我的代码来静态内联一些函数? 要静态转换函数和函数调用以避免捕获值? 背景 我注意到我写的一个JS程序的瓶颈是一个非常简单的函数调用:我在迭代数百万次的循环中调用函数,并手动内联函数(即用代码replace函数),加快了代码的速度几个数量级。 之后,我试着研究一下这个问题,但是不能推断v8如何优化函数调用的规则,以及如何编写高效的函数。 示例代码:迭代10亿次 递增计数器: let counter = 0; while(counter < 1e9) ++counter; 在我的系统上,Google Chrome / Chromium和v8都需要大约1秒的时间。 ~14秒,迭代1e10次。 给计数器赋值递增函数的值: function incr(c) { return c+1; } let counter = 0; while(counter < 1e9) counter = incr(counter); 大约需要1秒 。 ~14秒,迭代1e10次。 调用一个函数(只声明一次),增加捕获的计数器: let counter = 0; function incr() { ++counter; } while(counter < 1e9) incr(); […]

弹性search:了解如何优化写入操作,使读取不受影响

我们有一个带有弹性search后端的NodeJS应用程序,其中90%的时间使用非常less,偶尔绝对会砰的一声。 例如,典型情况下,它可能会在一个小时内收到50-100个读取请求,并且有1-2个写入请求。 在高峰时间,它可能会收到50,000个读取请求和30,000个写入请求。 在这些高峰时期,我们遇到了这样的情况:写入请求太多,以至于重新build立索引等。 甚至有读取请求被抓取; 这使得网站无响应。 为了处理这种types的负载,我们显然需要以某种方式优化弹性search或重新构build应用程序,并试图找出如何最好地做到这一点。 我想更好地理解的是: 1)在写操作上发生了什么似乎会杀死所有的东西,以及为了优化或加速呢? 2)我可以从代码的angular度来看,我可以使用批量操作更快地插入更多的logging,但是我想知道弹性search索引这种方式在系统上实际上效率较低。 我应该看到显着更好的性能(特别是在事物的读取方面),如果我们摆脱了批量插入,或者至less使插入的尺寸更小? 任何能够帮助我理解这种改变如何影响事物的东西都是有帮助的。 3)是否有分割读/写操作的能力,即使写操作被备份,读操作仍然继续工作? 例如,我正在考虑使用消息队列而不是直接使用弹性search插入,但是,再次回到问题#2,我不确定如何优化读取操作以继续工作。 例如有没有办法插入到不同的读取集群,然后合并数据? 这会多less有效吗? 感谢您的帮助。