轻松大幅度降低 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的方式加载,例 ...
随机推荐
- [转]ubuntu server上网配置
[转]ubuntu server上网配置 http://blog.sina.com.cn/s/blog_6c9d65a101011pyt.html 今天我的ubuntu server上不去网了,所以重 ...
- 初探Xamarin
Xamarin是一个基于mono的商业项目,收费,而且贼贵.官网地址是:http://xamarin.com/ 就我个人理解,收费的Xamarin提供一个for visual studio 2010/ ...
- oracle11g创建数据库最后一步确定时弹出无法创建目录
总的说是Windows7的权限问题 Windows7 dos命令下输入dbca创建数据库,因为权限问题,数据库将无法完成.所以还是在开始程序中打开dbca创建数据库比较好. Windows7 dos以 ...
- 学习jax-ws(一)
1.生成文件时提示class not find ,需要加个cp .,这样就行了 E:\mylearn\learn_webservice\learnJax-ws\bin>wsgen -cp . w ...
- 几种常见的排序方法(C语言实现)
#include <stdio.h> #include <stdlib.h> #include <Windows.h> //直接插入排序 void InsertSo ...
- cocos2dx中的场景和使用方法
1.一个游戏中有且只有一个导演,但是至少有一个场景 2.场景是游戏元素节点数的根节点,也可以理解为该场景下的渲染树的根节点 3.场景是一个容器,包含了该场景下的所有游戏元素,比如层,精灵 4.场景是导 ...
- 五、案例-指令参考-freemarker指令、表达式
案例-指令参考描述:本人自己测试写了一遍,如有错的地方,懂freemarker的朋友望指点指点! 案例-指令参考 表达式 一. Assign 1.<#assign name1="北京& ...
- android开发 无预览定时拍照
demo实现功能: 打开主页面自动启动定时拍照,10s拍一次. 注意事项,初始化摄像头之后不能立即拍照,否则无效,必须等待几秒后才能拍.这里用的是Handler进行延时处理拍照消息的. package ...
- android 实现2张图片层叠效果
如图: 代码: <RelativeLayout android:layout_width="match_parent" android:layout_height=" ...
- vmware workstation 10.0
2013.9.3 vmware workstation 10.0 build 1295980新增功能– 可以将windows 8.1物理pc转变为虚拟机:unity模式增强,与windows 8.1 ...