說說CDN

本文今天主要講解三個方面:css

第1、沒有CDN以前採起的經常使用策略是什麼;前端

第2、CND的概念;nginx

第3、CDN的優勢和缺點(凡有利也有弊,任何東西都是相對的);程序員

 

1、沒有CDN以前採起的經常使用策略是什麼web

以我公司項目經驗,經常使用的策略有兩個:數據庫

(1)規範前端開發;apache

(2)動靜分離;後端

 

小公司,特別是創業公司特別但願以最小的成本得到最大的利益。固然了,大公司也是如此。誰不但願以小的成本獲取大的利益。公司以營利爲主要目的,是永恆不變的法則。瀏覽器

說到(1),用戶通常看到的那些炫酷的效果,都是由前端工程師弄出來的,可是每每酷炫,伴隨着代碼量的增長或者是引入許多第三方的插件。記得在某本書上看到我,一般建議前端開發工程師,對於web項目,儘量少的引用第三方插件,由於插件的大小關係加載速度,而加載速度關係到用戶可否快速的看到界面,若是要花是幾秒或者二十幾秒才能夠看到界面,估計用戶早就跑光了,何談經過流量來獲取利益呢。緩存

規範前端開發,不僅是關係到項目的成與敗,更關係到開發人員自身的利益(包括身體健康、成長空間等等)。曾有研究人員代表,從軟件的發展歷程上看,主要經歷三個時代,一個是程序設計時代,一個是程序系統時代,一個是軟件工程時代(也就是如今處於的時代)。

程序設計時代的顯著特色是開發者,即便用者。

程序系統時代的顯著特色是主要以我的創做或者是小做坊式開發,用戶意圖忽略,好比早期的時代,提交一個表單等待好久最後發現本身的輸入不合法,而後接着從新輸入,最後發現又不合法,輸了好幾回才發現,終於能夠了。若是是換成,如今,早就不輸入了,連個提示都沒有,直接踢到一邊。

軟件工程時代,也就是如今的時代,講究技術,講究方法,因而便有了瀑布式開發和敏捷式開發等等。

不說多了,有點跑題了。剛纔說到,規範前端開發不只關係到項目的成與敗,更關係到開發人員自身的利益。

首先,前端開發同後端開發同樣,良好的編碼習慣,意味着維護成本低,可擴展性良好,這樣沒必要由於代碼風格或者代碼的質量問題而花費過多時間(80%程序員加班是由於代碼質量太差,這裏不僅僅說前人代碼遺留的問題,也同時說明本身的方式方法不對,固然了,沒有個五年六年的代碼量積累,不必定能看的出來,好比我如今就看不出來,好比我如今寫代碼,因爲經驗不是特別足,寫的時候,單單考慮,可維護性(讓別人能看的懂),實現功能(連功能都不能實現的話,代碼就失去其應有的價值),排版整齊(IDE快捷鍵搞定,固然了,習慣了後,直接會縮進代碼,看着亂七八糟的代碼,本身也會以爲糟心),不考慮性能(好比並發或者I/O等等)。固然了,也並不表明有五到六年的代碼量積累,必定就可以寫的一手優雅的代碼。一般代碼質量好的人,不是架構師就是某個領域的專家。

其次,一般代碼規範,代碼質量不錯的前提下,用戶體驗也不是那麼差。

那麼或許有人問,如何衡量代碼的質量?

一般可使用好比sonar代碼質量管理工具或者是使用IDE集成SonarLint,通常均可以檢測到代碼那些存在冗餘或者能夠採起那些比較好的方式來寫。

 

從前端方面的話,優化有這麼幾條建議:

a.減小HTTP請求(目的是http請求減小了,意味着響應的時間整體會減小);

b.使用瀏覽器緩存(緩存,省的每次都要從新請求);

c.服務器啓動壓縮(壓縮的話,壓縮意味着容量減小,容量減小,意味着響應時間縮短,又間接體現出減小http請求以達到響應時間的縮短,從而提升用戶體驗);

d.css文件放頭部,js文件放尾部(之因此這樣放置,是由於,程序是自上往下運行,首先加載的是css文件,而一般css文件對應界面渲染很是重要,好比咱們經常使用的定位、浮動、外內邊距或者是圖片的寬高、色彩、動畫等等,都是用css實現的,因此將其放入頭部,優先加載,優先加載意味着用戶並不會感到畫面延遲或者是某個圖像顯示問題單等等);

e.精簡css文件和js文件(刪除沒必要要的註釋、縮進,利於減小文件容量);

f.減小對dom操做(dom操做是及其消耗性能的,由於每次都要重繪和重排,重繪意味着從新渲染,重排意味着佈局改變);

g.建議使用外部css文件和js文件(即方便管理,又可使用瀏覽器緩存,而都引用內部樣式的話,每次請求就得從新加載一遍,固然了,使用外部的也有一個弊端就是有的時候你改了文件內容,不必定立刻能夠看到修改後的效果,由於瀏覽器有緩存,這時要麼清理緩存,要麼ctrl+f5屢次從新請求url,這樣才能夠看到修改後的樣子);

h.避免重複腳本(一般指,當某個js函數須要屢次引用,最後將其抽象爲一個公共函數,否則重複的函數會佔用文件容量,同時也會影響維護);

i.使用CDN(這也是接下來要講的);

 

說到(2),不得不提到一個web服務器Nginx。Nginx是目前很是流行的web服務器。目前像淘寶、百度或者新浪等企業都在用它,固然了,因爲Nginx是開源的,這些公司一般會對其進行修改,改成預期符合本身業務的。

另外,說到web服務器,不得不提到應用服務器。不少人對這個都會有疑問,包括筆者也曾有過。

究竟web服務器和應用服務器的區別是什麼?

牢記這麼幾個點就好了。

共性:HTTP請求。

異性:

web服務器一般用於處理靜態資源(圖片,js,css等等)

應用服務器既能夠處理動態資源(這裏叫動態請求,好比jsp等等),又能夠處理靜態資源,只是處理靜態資源的效率低於web服務器。

目前經常使用的web服務器,就是nginx,apache等等。

經常使用的應用服務器,tomcat、resin、jboss等等。不過tomcat是應用較爲普遍的。

 

所謂的動靜分離,就是作一個Nginx負載均衡,靜態資源請求由Nginx處理,而動態資源請求則由tomcat進行處理。

如圖表示:

 

 

2、CDN概念

CDN的全稱是Content Delivery Network,即內容分發網絡。其基本思路是儘量避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定。經過在網絡各處放置節點服務器所構成的在現有的互聯網基礎之上的一層智能虛擬網絡,CDN系統可以實時地根據網絡流量和各節點的鏈接、負載情況以及到用戶的距離和響應時間等綜合信息將用戶的請求從新導向離用戶最近的服務節點上。其目的是使用戶可就近取得所需內容,解決 Internet網絡擁擠的情況,提升用戶訪問網站的響應速度。

 

CDN架構圖(引用《深刻分析JavaWeb技術內幕》):

 

這裏同時也要提提負載均衡的三種方式:

(1)鏈路負載均衡

簡單的說就是將DNS解析成不一樣的IP,用戶根據這個IP訪問不一樣的服務器。

 

(2)硬件負載均衡

圖片服務器、數據庫服務器、web服務器、應用服務器等等單獨放在不一樣的機器上,通常小公司是消費不起的。

 

(3)軟件負載均衡

 

3、CDN的優勢和缺點

CDN的優勢:
(1)速度快;

(2)帶寬成本低;

(3)安全性好;

(4)可靠性高;

(5)部署便捷;

 

CDN的缺點:

一般用CDN加速訪問的資源,通常狀況下是不變的,常常內容更新的網站並不適用,由於緩存的緣故,好比你正在瀏覽A網站,這時A網站發佈了新的內容,可是你不能立刻就能看到它,須要等待幾分鐘或者幾個小時,CDN同步最新內容是須要時間的。所以CDN一般應用於放不多改變的js、css、系統大量固定不變的圖像等等。另外還有一個不能忽略是若是服務器提供商不穩定的話,會影響你的CDN。

相關文章
相關標籤/搜索