Tag: 优化

将集合与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有效吗? 感谢您的帮助。

用grunt或gulp“编译”节点项目有意义吗?

我花了很多时间用grunt文件构build一个webtemplate(前端)来“编译”整个项目,并在生产中有一个高效的代码。 现在我正在开发一个后端项目(使用node / express),我想知道“编译”节点项目是否合理? 我用Babel使用ES6语法,所以我想象每次启动项目(节点index.js或nodemon index.js)Babel在ES5中传输它,然后运行它。 我不在乎在项目开始的时候是否已经完成,一旦启动就没有影响。 但我不确定。 节点是否读取整个程序并将其“保存”到内存中? 如果是这样,我想像它是没有用的连接/编译JavaScript文件,就像我们习惯于与前端。

JavaScript严重执行函数:内联还是声明?

假设对于时间要求严格的应用程序来说,使用函数声明或函数expression式总是比较好,而不是在大量执行的callback函数中使用内联函数? 考虑下面的testing程序: var x; var count3 = function count3() { x++; } var count2 = function () { x++; } function count() { x++; } function execute(cb) { cb(); } x = 0; var a = new Date().getTime(); for (var i = 0; i < 100000000; i++) { execute(function named() { x++; }) } a […]

如何优化search

给定多个选项,我需要select其中的n个,以使得总评价最大化,但总成本不超过预算。 var options = [ { rating: 8, cost: 6, }, { rating: 5, cost: 4, }, //…100 of these in total ]; function select(n, budget) { //TODO: Replace this code with some real implementation return options.slice(0, 5); } //Sudocode: var result = select(5, 25); Assert(result.length == 5); Assert(sum(result.cost) <= 25); Assert(sum(result.rating) is maximized); 我已经尝试了几个不同的选项,循环内循环的所有变化。 […]

MYSQL:需要帮助快速增长的表和减less速度(4mio行)

我正在以快速增长的速度增长的桌面(目前有4百万行,每天插入30万行)面临一些问题。 我希望我能在这里得到一些想法和build议,以改善我的设置,挤出我的盒子里的最后一点,在不久的将来把我的网站拿下来之前。 设置: Intel i7 720 8GB RAM 2x750GB SATA RAID 0 CentOS MySQL 5.5.10 Node.js + node-lib_mysql-client 表格定义: CREATE TABLE IF NOT EXISTS `canvas` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `x1` int(11) NOT NULL, `y1` int(11) NOT NULL, `x2` int(11) NOT NULL, `y2` int(11) NOT NULL, `c` int(4) unsigned NOT NULL, `s` int(3) […]