加快 Meteor.js 中的自动重新加载

Posted

技术标签:

【中文标题】加快 Meteor.js 中的自动重新加载【英文标题】:Speed up Auto-reload in Meteor.js 【发布时间】:2014-01-18 15:46:36 【问题描述】:

在 Meteor.js 中保存包含新更改的文件后,服​​务器将重新启动,浏览器将重新加载窗口。

问题:有时在保存文件后重新加载需要比平时更长的时间,这似乎是随机的。有没有办法更快地触发自动重新加载?

似乎服务器重新启动很快,但浏览器重新加载要慢得多。

Meteor 服务器重新启动后,网页在 30 秒内无响应,并且“网络”选项卡显示 websocketpending...

我在 Mac OSX 上的 Node.js v0.10.22 上使用 Meteor 0.7.0.1 和 Meteorite 0.6.16,连接到远程 MongoDB 服务器。

【问题讨论】:

有没有可能是当你运行了崩溃的代码时才需要更长的时间来重新加载? @PeppeL-G 当代码运行良好时重新加载也需要更长的时间......我估计浏览器重新加载时间的范围从 3 秒到 10 秒。 【参考方案1】:

如果您的项目很大,自动重新加载需要时间。 Meteor 基本上必须重新构建 javascript 了。有很多事情会影响所需的时间。

它的一些基础知识是:

项目越大,js 文件/包越多,所需时间越长 如果您禁用了 websocket,服务器似乎需要更长的时间才能重新启动 如果您使用 --production 作为标志,则重建需要更长的时间,但在浏览器中加载速度会更快 如果您通过 cdn 使用外部 css/字体和其他东西,有时重新下载这些文件可能需要更长的时间,这取决于您的连接。尝试在 chrome 开发者控制台中检查您的“网络”选项卡,看看是否有任何特定文件需要一段时间,然后暂时将其托管在本地。 如果您在发生错误后重新加载热代码,则可能会在流星尝试从错误中恢复时稍有延迟。

还有其他一些事情。如果您使用带有 --release 标志的 Meteor UI,则某些构建会出现内存泄漏,并且在您重新加载热代码时会变得越来越慢。

如果您在 Windows 上进行开发,那么热代码重新加载会出现一些问题。 Windows 上的 Meteor 是非官方的,有时您必须 ctrl+c 并重新启动它才能使其启动更快。

除了增强您的计算机或将Meteor.startup 中运行的内容移动到cron 作业中之外,您无法做很多事情来加快它的速度。每次热代码重载都会重做 Meteor.startup 中的任务。

热代码重载最让我困扰的是通过@import css 语句来自Google 字体的字体。有时谷歌不会很快提供字体,尤其是当我不断重新加载它们时。我暂时禁用它们/在本地托管它们。我不在生产中本地托管,因为不同的浏览器有时会在 Windows 上提供模糊字体。

【讨论】:

meteor 服务器重启后,显示meteor.js 网页的浏览器也会在重新加载前30秒左右无响应...这是正常的吗? 在执行热代码重新加载并查看“网络”选项卡上是否有内容保持“待处理”时,您能否尝试保持调试控制台打开?这听起来像是来自cdn的东西,服务时间太长了。它绝对不正常,但如果它只发生在浏览器上,它可能是外部的。 用网络标签的屏幕截图更新了原始帖子,在流星服务器重新启动后和页面重新加载之前浏览器变得无响应。 websocket 通常在流式传输时处于挂起状态,您使用的是 Meteor 0.7 吗?您能否将Meteor.onConnection(function() console.log("ready")) 添加到您的服务器端代码中,看看是否需要很长时间才能说出“准备好”?此外,如果您向上滚动,您是否还有其他待处理/红色(错误)的文件? 服务器重启后,Ready瞬间出现两次,紧接着是>>> SmartCollection charged with MongoDB Oplog。第三个Ready 需要多花 30 秒才能出现。浏览器会重新加载。【参考方案2】:

我用全新安装的流星恢复了一个在 2014 年运行良好的旧项目,但发现启动和重新启动非常慢(超过 30 秒)。 (可能是更新节点或流星触发了这个。)

我注意到项目的.meteor/release 包含METEOR@0.9.3

我跑了:

meteor update

在项目的根文件夹中。

我的发布文件现在包含METEOR@1.1.0.3,并且我的许多软件包都已更新。现在重启速度明显更快(大约 10 秒)!


顺便说一句,我将 MONGO_URL 指向本地主机上的 mongodb,因此当我启动应用程序时,meteor 不必启动新的 mongodb。

【讨论】:

抱歉,我的回答指出 server 重启速度加快,但问题实际上是关于缓慢 browser 刷新。【参考方案3】:

似乎用 1.3 解决了,但目前处于测试阶段。

meteor update --release METEOR@1.3-modules-beta.8

从 6-10 秒到 1-2 秒。

【讨论】:

以上是关于加快 Meteor.js 中的自动重新加载的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL 和 Meteor.js 数据跟踪

Blazor-断开连接后重新加载浏览器

编辑并重新运行 Spring Boot 单元测试,无需重新加载上下文以加快测试速度

main.* 中的 Meteor JS javascript 文件仍然无法正确加载。加载顺序的最佳实践?

为联合服务 apollo GraphQL 中的架构更改自动重新加载网关

自定义环境中运行应用程序中的 Grails 自动重新加载功能