轻松大幅度降低 Meteor App 的首屏加载时间
许多研究表明,用户最满意的网页加载时间是在2秒以下。能够忍受的较长等待时间上限大概在6~8秒之间。如果需要等待12秒,99%以上的用户会关闭网页离开。
所以如果要给用户提供愉快的使用体验,尽量做到 2 秒内打开你的网站。
问题
大家知道 Meteor App 打包之后前端的 css 和 js 文件就算压缩了也有 500KB 左右。这样如果使用自己的 web 服务器来提供这些文件加载的话,一个问题就是很慢,另外还会消耗更多的云主机流量,这可比 CDN 流量贵多了,一般云主机流量是 CDN 流量的 3 到 5 倍的价格,甚至更贵,如果你的配置很高的话。
简单的计算
如果你的网络服务器是最基本的一兆带宽 1 Mb/s(注意 Mb 和 MB 的转换),那么就算是一个人访问也至少得等 4 秒才能看到你的首页,两个人就变为 8 秒(实际上更久)。人多了就是龟速。就算是 100 Mb 的大水管也顶不住几百人的访问,而这点访问量一般也不值得用负载均衡这样的技术。值得一提的是主机大带宽是非常贵的。
如果你的服务器是按照流量收费,那么大概 1元/GB ,具体取决于你的服务器提供商和区域。但是使用 CDN 一般在 0.3元/GB,你可以节省 70% 的流量费用。单个云主机的峰值流量也有限,肯定不如 CDN 的分布式节点。
所以使用 CDN 在速度和经济上都有很大的优势。
解决方法
解决办法很简单,只需要使用外部 CDN 服务,再加载一个 Meteor 包,部署时增加一行配置就行了。不用额外写任何代码,也不用自己上传文件。
CDN 服务
首先你必须得有 CDN 服务。这里以我用的七牛为例子。七牛有每月免费 10GB 的计划,应该能满足很多小的应用了,或者测试目的。你可以使用 Github 或者微信等方式登录七牛。
首先需要创建一个新的资源,类似亚马逊 S3 的 bucket。具体就是 添加资源 -> 对象存储。创建好资源之后,选择镜像存储。然后在镜像源里填写你的网站地址。例如

填写好后,你会得到一个七牛生成的测试域名,类似 xxxxxx.bkt.clouddn.com。当然你也可以使用自己绑定的域名。记下这个域名,稍后还会使用。
使用 Meteor-CDN 包
这个包的代码和文档在 https://github.com/zxh930508/meteor-cdn 。它主要的作用就是把打包后的 css 和 js 文件的域变更到你指定的 CDN 地址。如果环境变量里没有 CDN_URL 的设置,那么程序就不会有任何变化。
安装
meteor add nitrolabs:cdn
运行
一种方式是在运行时指定 CDN_URL 的地址
export CDN_URL="http://xxxxxx.bkt.clouddn.com" && meteor
或者在你的 mupx 的配置里的 env 加上 CDN_URL
// mup.json
{
// Normal mup settings
// ...
// Configure environment
"env": {
"PORT" : 80,
"CDN_URL" : "http://xxxxxx.bkt.clouddn.com",
"ROOT_URL" : "http://www.mysite.com"
}
}
通过以上两种方式之一运行后,你的网站就飞起来了。可以使用 Chrome 的开发者工具 network 页面查看各个文件的加载时间。
结论
下图是 jianbo.im 网站在不使用 cache 的情况下的加载情况。Meteor 打包压缩后的 419 KB meteor_js_resource 只需要 98 ms 加载,整个初始 markup 加载花了 682 ms。

当然还有很多方法可以提高网页的加载速度,但是这个方法简单有效,可以满足很多 Meteor App 的应用场景,能使你的 Meteor App 在比较便宜的云主机网络条件下处理更多的用户访问。
另外附上镜像 bucket 里到底存储了什么,也就是什么文件被加速了。大家可以看到 js、css 还有一些字符等信息文件。robots.txt 是告诉搜索引擎是否收录和处理镜像冲突。有两组 css、js 文件是因为我 build 了两次,每次产生的文件名不一样。这样也保证每次修改源码后用户访问到更新的 css、js 文件。

轻松大幅度降低 Meteor App 的首屏加载时间的更多相关文章
- vue-cli项目优化,缩短首屏加载时间
1.大文件定位 我们可以使用webpack可视化插件Webpack Bundle Analyzer 查看工程js文件大小,然后有目的的解决过大的js文件. 安装:npm install --save- ...
- webpack分包:vue单页面解决分包【减少首屏加载时间】--按需加载[路由懒加载]
1.使用webpack中的syntax-dynamic-import 插件 npm install --save-dev babel-plugin-syntax-dynamic-import 2.配置 ...
- Vue项目优化首屏加载速度
Vue项目部署上线后经常会发现首屏加载的速度特别慢:那么有那写能做的简单优化呢 一.路由的懒加载 路由懒加载也就是 把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件. 结合 ...
- vue项目首屏加载优化实战
问题 单页面应用的一个问题就是首页加载东西过多,加载时间过长.特别在移动端,单页面应用的首屏加载优化更是绕不开的话题.下面我会写出我在项目中做的一些优化,希望大家能够相互讨论,共同进步. 我的项目vu ...
- react 首屏加载优化
react 首屏加载优化,原本是在入口HTML文件中加载loading动画,但是部署在测试环境上的时候一直无法显示loading的部分,也是奇怪了,我们测试环境的部署一直跟本地的都不太一样,内外网的转 ...
- Vue SPA 首屏加载优化实践
写在前面 本文记录笔者在Vue SPA项目首屏加载优化过程中遇到的一些坑及优化方案! 我们以 vue-cli 工具为例,使用 vue-router 搭建SPA应用,UI框架选用 element-ui ...
- Vue优化首屏加载
背景: 使用vue + iview搭建的一个后台管理系统,路由已经用了懒加载,加载登陆页面,居然还是需要18S左右,刚到一个新公司,项目经理很委婉的说,看看能不能优化了一下.然后就开始了网上一大堆'v ...
- SPA 首屏加载性能优化之 vue-cli3 拆包配置
前言 现在已经是vue-cli3.x webpack4.x 的时代了,但是网上很多拆包配置还是一些比较低版本的. 本文主要是分享自己的拆包踩坑经验. 主要是用了webpack4 的 splitC ...
- vuejs学习之 项目打包之后的首屏加载优化
vuejs学习之 项目打包之后的首屏加载优化 一:使用CDN资源 我们在打包时,会将package.json里,dependencies对象里插件打包起来,我们可以将其中的一些使用cdn的方式加载,例 ...
随机推荐
- ssh 安装
一 ssh 1.查看ssh服务的状态 输入以下命令: sudo service sshd status 如果出现 Loaded: error (Reason: No such file or dire ...
- 十一、从头到尾彻底解析Hash 表算法
在研究MonetDB时深入的学习了hash算法,看了作者的文章很有感触,所以转发,希望能够使更多人受益! 十一.从头到尾彻底解析Hash 表算法 作者:July.wuliming.pkuoliver ...
- 鲁棒性是 Robustness
鲁棒性是 Robustness 的音译,是指当系统受到不正常干扰时,是否还能保证主体功能正常运作.可参考 维基百科:http://zh.wikipedia.org/zh/ 鲁棒性 _( 计算机科学 ) ...
- ext4.1动态生成多个checkboxgroup(或者radiogroup),并且有toolbar操作、
转载自:http://blog.csdn.net/zhengyuechuan/article/details/9327291 前台controller代码: Ext.define('zyc.contr ...
- Layout Support 获取上下bar的长度
Layout Support This protocol . You can use layout guides as layout items in the NSLayoutConstraint f ...
- C# 字符串转换值类型
bool status = int.TryParse(m_Judge(12)+"ds",out j); int iParse = int.Parse("4"); ...
- 骇客(Hacker)用语
什么是TCP/IP 是一种网络通信协议,他规范了网络上所有的通信设备,尤其是一个主机与另一个主机之间的数据往来格式以及传送方式.,TCP/IP是INTERNET的基础 ...
- java 参数化类型
package com.gxf.collection; import java.util.LinkedList; public class TestForT<T> { private Li ...
- postmortem report of period M1
一.设想和目标 1.我们的软件主要要解决学长设计的学霸系统中视频及文档的浏览功能问题. 2.时间相对充裕.不过对于我们这些零基础的人来说还是比较困难. 3.我们团队中不同意见通常会进行进一步讨论,说出 ...
- 嵌入字体@font-face
嵌入字体@font-face @font-face能够加载服务器端的字体文件,让浏览器端可以显示用户电脑里没有安装的字体. 语法: @font-face { font-family : 字体名称; s ...