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()
东西)。
我有一个使用 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()
东西)。