许多研究表明,用户最满意的网页加载时间是在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。具体就是 添加资源 -> 对象存储。创建好资源之后,选择镜像存储。然后在镜像源里填写你的网站地址。例如

mcdn

填写好后,你会得到一个七牛生成的测试域名,类似 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。

network

当然还有很多方法可以提高网页的加载速度,但是这个方法简单有效,可以满足很多 Meteor App 的应用场景,能使你的 Meteor App 在比较便宜的云主机网络条件下处理更多的用户访问。

另外附上镜像 bucket 里到底存储了什么,也就是什么文件被加速了。大家可以看到 js、css 还有一些字符等信息文件。robots.txt 是告诉搜索引擎是否收录和处理镜像冲突。有两组 css、js 文件是因为我 build 了两次,每次产生的文件名不一样。这样也保证每次修改源码后用户访问到更新的 css、js 文件。

bucket
原文链接:http://www.jianshu.com/p/98388e50ab0a  

轻松大幅度降低 Meteor App 的首屏加载时间的更多相关文章

  1. vue-cli项目优化,缩短首屏加载时间

    1.大文件定位 我们可以使用webpack可视化插件Webpack Bundle Analyzer 查看工程js文件大小,然后有目的的解决过大的js文件. 安装:npm install --save- ...

  2. webpack分包:vue单页面解决分包【减少首屏加载时间】--按需加载[路由懒加载]

    1.使用webpack中的syntax-dynamic-import 插件 npm install --save-dev babel-plugin-syntax-dynamic-import 2.配置 ...

  3. Vue项目优化首屏加载速度

    Vue项目部署上线后经常会发现首屏加载的速度特别慢:那么有那写能做的简单优化呢 一.路由的懒加载 路由懒加载也就是 把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件. 结合 ...

  4. vue项目首屏加载优化实战

    问题 单页面应用的一个问题就是首页加载东西过多,加载时间过长.特别在移动端,单页面应用的首屏加载优化更是绕不开的话题.下面我会写出我在项目中做的一些优化,希望大家能够相互讨论,共同进步. 我的项目vu ...

  5. react 首屏加载优化

    react 首屏加载优化,原本是在入口HTML文件中加载loading动画,但是部署在测试环境上的时候一直无法显示loading的部分,也是奇怪了,我们测试环境的部署一直跟本地的都不太一样,内外网的转 ...

  6. Vue SPA 首屏加载优化实践

    写在前面 本文记录笔者在Vue SPA项目首屏加载优化过程中遇到的一些坑及优化方案! 我们以 vue-cli 工具为例,使用 vue-router 搭建SPA应用,UI框架选用 element-ui ...

  7. Vue优化首屏加载

    背景: 使用vue + iview搭建的一个后台管理系统,路由已经用了懒加载,加载登陆页面,居然还是需要18S左右,刚到一个新公司,项目经理很委婉的说,看看能不能优化了一下.然后就开始了网上一大堆'v ...

  8. SPA 首屏加载性能优化之 vue-cli3 拆包配置

    前言 现在已经是vue-cli3.x    webpack4.x 的时代了,但是网上很多拆包配置还是一些比较低版本的. 本文主要是分享自己的拆包踩坑经验. 主要是用了webpack4 的 splitC ...

  9. vuejs学习之 项目打包之后的首屏加载优化

    vuejs学习之 项目打包之后的首屏加载优化 一:使用CDN资源 我们在打包时,会将package.json里,dependencies对象里插件打包起来,我们可以将其中的一些使用cdn的方式加载,例 ...

随机推荐

  1. netlink

    http://blog.csdn.net/zirconsdu/article/details/8569193 http://www.xuebuyuan.com/1725837.html netlink ...

  2. Object C学习笔记2-NSLog 格式化输出数据

    1 . 几种常用类型变量声明 int i =10; BOOL isShow=YES; BOOL isShow=1; float f = 3.1415926; char a =120; NSString ...

  3. Json.Net使用JSON Schema验证JSON格式【实例】

    给出一个Json,验证其格式是否符合规则. { "coord": { //对象 "lon": 145.77, "lat": -16.92 } ...

  4. “我爱淘”第二冲刺阶段Scrum站立会议1

    完成任务: 完成了webservice的配置与测试,实现了在客户端的搜索功能,并且可以实现图书的发布功能,就是将图书的信息添加到数据库中. 计划任务: 在客户端实现分类功能,通过学院的分类查看书籍. ...

  5. java线程图

  6. Web前端技能

    入门必备的技能: 第1项技能:HTML超文本标记语言: 技能要点: HTML文件的结构    HTML文件的编写方法     HTML基本标记    文字与段落标记     框架    使用表单    ...

  7. android 通过AlarmManager实现守护进程

    场景:在app崩溃或手动退出或静默安装后能够自动重启应用activity 前提:得到系统签名 platform.pk8.platform.x509.pem及signapk.jar 三个文件缺一不可(系 ...

  8. IOS 打包后安装崩溃,debug正常运行

    今天遇到个奇葩问题,archive后的包安装后有一个crash,必崩的.但是调试跟踪时是好的. 为了方便调试,使用了release模式,这样不用每次都archive后安装进行测试.由于没法运行时deb ...

  9. HDU 5293 Tree chain problem 树形dp+dfs序+树状数组+LCA

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5293 题意: 给你一些链,每条链都有自己的价值,求不相交不重合的链能够组成的最大价值. 题解: 树形 ...

  10. DOM中事件绑定补充方法

    先将上一篇文章中提到的为元素增加事件的方法和移除事件的方法拿过来: <span style="font-size:18px;">//跨浏览器添加事件 function ...