輕松大幅度降低 Meteor App 的首屏加載時(shí)間

tr;dr

利用 CDN 鏡像加載 Meteor App 的 css娃豹、js 文件

許多研究表明退客,用戶最滿意的網(wǎng)頁加載時(shí)間是在2秒以下骏融。能夠忍受的較長等待時(shí)間上限大概在6~8秒之間链嘀。如果需要等待12秒,99%以上的用戶會(huì)關(guān)閉網(wǎng)頁離開档玻。

所以如果要給用戶提供愉快的使用體驗(yàn)怀泊,盡量做到 2 秒內(nèi)打開你的網(wǎng)站。

問題

大家知道 Meteor App 打包之后前端的 css 和 js 文件就算壓縮了也有 500KB 左右误趴。這樣如果使用自己的 web 服務(wù)器來提供這些文件加載的話霹琼,一個(gè)問題就是很慢,另外還會(huì)消耗更多的云主機(jī)流量凉当,這可比 CDN 流量貴多了枣申,一般云主機(jī)流量是 CDN 流量的 3 到 5 倍的價(jià)格,甚至更貴纤怒,如果你的配置很高的話糯而。

簡單的計(jì)算

如果你的網(wǎng)絡(luò)服務(wù)器是最基本的一兆帶寬 1 Mb/s(注意 Mb 和 MB 的轉(zhuǎn)換),那么就算是一個(gè)人訪問也至少得等 4 秒才能看到你的首頁泊窘,兩個(gè)人就變?yōu)?8 秒(實(shí)際上更久)熄驼。人多了就是龜速。就算是 100 Mb 的大水管也頂不住幾百人的訪問烘豹,而這點(diǎn)訪問量一般也不值得用負(fù)載均衡這樣的技術(shù)瓜贾。值得一提的是主機(jī)大帶寬是非常貴的。

如果你的服務(wù)器是按照流量收費(fèi)携悯,那么大概 1元/GB 祭芦,具體取決于你的服務(wù)器提供商和區(qū)域。但是使用 CDN 一般在 0.3元/GB憔鬼,你可以節(jié)省 70% 的流量費(fèi)用龟劲。單個(gè)云主機(jī)的峰值流量也有限,肯定不如 CDN 的分布式節(jié)點(diǎn)轴或。

所以使用 CDN 在速度和經(jīng)濟(jì)上都有很大的優(yōu)勢昌跌。

解決方法

解決辦法很簡單,只需要使用外部 CDN 服務(wù)照雁,再加載一個(gè) Meteor 包蚕愤,部署時(shí)增加一行配置就行了。不用額外寫任何代碼饺蚊,也不用自己上傳文件萍诱。

CDN 服務(wù)

首先你必須得有 CDN 服務(wù)。這里以我用的七牛為例子污呼。七牛有每月免費(fèi) 10GB 的計(jì)劃裕坊,應(yīng)該能滿足很多小的應(yīng)用了,或者測試目的燕酷。你可以使用 Github 或者微信等方式登錄七牛碍庵。

首先需要?jiǎng)?chuàng)建一個(gè)新的資源映企,類似亞馬遜 S3 的 bucket悟狱。具體就是 添加資源 -> 對象存儲(chǔ)静浴。創(chuàng)建好資源之后,選擇鏡像存儲(chǔ)挤渐。然后在鏡像源里填寫你的網(wǎng)站地址苹享。例如
mcdn

填寫好后,你會(huì)得到一個(gè)七牛生成的測試域名浴麻,類似 xxxxxx.bkt.clouddn.com得问。當(dāng)然你也可以使用自己綁定的域名。記下這個(gè)域名软免,稍后還會(huì)使用宫纬。

使用 Meteor-CDN 包

這個(gè)包的代碼和文檔在 https://github.com/nitrolabs/meteor-cdn/ 。它主要的作用就是把打包后的 css 和 js 文件的域變更到你指定的 CDN 地址膏萧。如果環(huán)境變量里沒有 CDN_URL 的設(shè)置漓骚,那么程序就不會(huì)有任何變化。

安裝

meteor add nitrolabs:cdn

運(yùn)行

一種方式是在運(yùn)行時(shí)指定 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"
    }
}

通過以上兩種方式之一運(yùn)行后榛泛,你的網(wǎng)站就飛起來了蝌蹂。可以使用 Chrome 的開發(fā)者工具 network 頁面查看各個(gè)文件的加載時(shí)間曹锨。

結(jié)論

下圖是 jianbo.im 網(wǎng)站在不使用 cache 的情況下的加載情況孤个。Meteor 打包壓縮后的 419 KB meteor_js_resource 只需要 98 ms 加載,整個(gè)初始 markup 加載花了 682 ms沛简。

network

當(dāng)然還有很多方法可以提高網(wǎng)頁的加載速度齐鲤,但是這個(gè)方法簡單有效,可以滿足很多 Meteor App 的應(yīng)用場景椒楣,能使你的 Meteor App 在比較便宜的云主機(jī)網(wǎng)絡(luò)條件下處理更多的用戶訪問给郊。

另外附上鏡像 bucket 里到底存儲(chǔ)了什么,也就是什么文件被加速了撒顿。大家可以看到 js丑罪、css 還有一些字符等信息文件。robots.txt 是告訴搜索引擎是否收錄和處理鏡像沖突凤壁。有兩組 css吩屹、js 文件是因?yàn)槲?build 了兩次,每次產(chǎn)生的文件名不一樣拧抖。這樣也保證每次修改源碼后用戶訪問到更新的 css煤搜、js 文件。


bucket
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末唧席,一起剝皮案震驚了整個(gè)濱河市擦盾,隨后出現(xiàn)的幾起案子嘲驾,更是在濱河造成了極大的恐慌,老刑警劉巖迹卢,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辽故,死亡現(xiàn)場離奇詭異,居然都是意外死亡腐碱,警方通過查閱死者的電腦和手機(jī)誊垢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來症见,“玉大人喂走,你說我怎么就攤上這事∧弊鳎” “怎么了芋肠?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長遵蚜。 經(jīng)常有香客問我帖池,道長,這世上最難降的妖魔是什么谬晕? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任碘裕,我火速辦了婚禮,結(jié)果婚禮上攒钳,老公的妹妹穿的比我還像新娘帮孔。我一直安慰自己,他們只是感情好不撑,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布文兢。 她就那樣靜靜地躺著,像睡著了一般焕檬。 火紅的嫁衣襯著肌膚如雪姆坚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天实愚,我揣著相機(jī)與錄音兼呵,去河邊找鬼。 笑死腊敲,一個(gè)胖子當(dāng)著我的面吹牛击喂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播碰辅,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼懂昂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了没宾?” 一聲冷哼從身側(cè)響起凌彬,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤沸柔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后铲敛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體褐澎,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年原探,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乱凿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,809評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咽弦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出胁出,到底是詐尸還是另有隱情型型,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布全蝶,位于F島的核電站闹蒜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏抑淫。R本人自食惡果不足惜绷落,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望始苇。 院中可真熱鬧砌烁,春花似錦、人聲如沸催式。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荣月。三九已至管呵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哺窄,已是汗流浹背捐下。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留萌业,地道東北人坷襟。 一個(gè)月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像咽白,于是被迫代替她去往敵國和親啤握。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容