Meteor 网站加载时间过长

Meteor website takes too much time to load

我有一个使用 meteor 构建的 webApp。 以下是规格:

Meteor version : 1.8
Mongo Version : 4.0.5

以下是我使用过的软件包列表:

jquery@1.11.10 twbs:bootstrap@3.3.6 iron:router reactive-var@1.0.11 fortawesome:fontawesome blaze@2.1.8 accounts-password@1.5.1 mrt:mathjax email@1.2.3 momentjs:moment ian:accounts-ui-bootstrap-3@1.2.89 meteor-base@1.4.0 mongo@1.6.0 blaze-html-templates@1.0.4 session@1.2.0 tracker@1.2.0 logging@1.1.20 reload@1.2.0 ejson@1.1.0 spacebars@1.0.12 standard-minifier-css@1.5.2 standard-minifier-js@2.4.0 jss:jstree meteorhacks:subs-manager aldeed:template-extension reywood:publish-composite shell-server@0.4.0 stylus@=2.513.13 accounts-base@1.4.3 iron:middleware-stack@1.1.0 http@1.4.1 ecmascript@0.12.4 dynamic-import@0.5.0 sha@1.0.9 simple:json-routes underscore@1.0.10 aldeed:simple-schema rafaelhdr:google-charts meteorhacks:aggregate

webApp 托管在具有 16GB RAM 和 04 个处理器的 AWS ec2 实例上。该应用程序使用发布-订阅方法。现在的问题是,只要有超过 50 个并发连接,CPU 使用率就会超过 60%,并且 webApp 使用起来会变得非常慢。根据我的发现,可能有两个原因,要么是我使用的 pub-sub 模式太重,即我在每个页面上都广泛使用了数据库订阅,而 meteor 一直与它保持开放连接。可能导致大量资源使用的其他原因可能是 mongoDB 使用。根据 dbStats,数据库使用超过 06GB 的 RAM。以下是详细信息:

我不确定为什么会有这样的行为。我唯一能想到的办法就是点击试用(取消订阅再测试),但是太费时,而且证明不充分。

谁能帮我看看如何进行。

根据您的应用在数据方面的设计方式,性能不佳可能有多种原因。

几点建议:

  • 检查您的集合中是否有索引
  • 避免在发布过程中进行聚合,即对数据库进行反规范化、改为发布游标数组、限制文档的大小等。
  • 过滤查询中无用的字段
  • 限制相关部分的数据量(延迟加载和分页订阅)
  • 为您经常使用的集合考虑全局 pubs/subs,而不是在基于路由的模式下过于频繁地重新加载它们
  • 跟踪基于小组件的潜艇并尝试将它们放在更高的级别以避免制作 30 个潜艇而不是一个

我最好的猜测是,您可能需要将数据库合理化 "structure" 并尽可能避免数据聚合。

您也可能在某处误用了低级集合 api(例如 cursor.observe() 东西)。