高性能网站原则
https://blog.csdn.net/u011650048/article/details/51754423
1、圖片壓縮:
靜態頁面驗收時,檢查每張圖片不能超過200K,每個頁面不能超過2.5M
CMS后臺上傳圖片,檢查每張圖片不能超過200K,盡量不要使用原圖,使用壓縮過的圖片
2、圖片合并實現 CSS Sprites
CSS Sprites 是一個吸引人的技術,它其實就是把網頁中一些背景圖片整合到一張圖片文件中,再利用CSS 的“background-image”,“background-repeat”,“background-position”的組合進行背景定位,background-position可以用數字能精確的定位出背景圖片的位置;
利用 CSS Sprites 能很好地減少網頁的HTTP 請求,從而大大的提高了頁面的性能;
能減少圖片的字節,由于圖像合并后基本信息不用重復,那么多張圖片合并成 1 張圖片的字節往往總是小于這些圖片的字節總和;
更換風格方便、維護方便。
3、預加載、懶加載
預加載和懶加載,是一種改善用戶體驗的策略,它實際上并不能提高程序性能,但是卻可以明顯改善用戶體驗或減輕服務器壓力。
預加載原理是在用戶查看一張圖片時,就將下一張圖片先下載到本地,而當用戶真正訪問下一張圖片時,由于本地緩存的原因,無需從服務器端下載,從而達到提高用戶體驗的目的。
懶加載則是在用戶需要的時候再加載。當一個網頁中可能同時有上百張圖片,而大部分情況下,用戶只看其中的一部分,如果同時顯示上百張,則浪費了大量帶寬資源,因此可以當用戶往下拉動滾動條時,才去請求下載被查看的圖像。(JQuery 的懶加載組件)
4、CSS放在頁面的上面,JS放在頁面的下面
瀏覽器會在下載完全部的css之后才會對整個頁面進行渲染,因此最好是將css放在頁面最上面,讓瀏覽器盡快下載css.
JS則相反,瀏覽器在加載js后立即執行,有可能會阻塞整個頁面,造成頁面顯示緩慢,因此js最好放在頁面最下面。但是也有特殊情況,如果頁面解析時就需要用到js或者有特殊要求必須把js放置在head里面,這時放在最下面就不合適了
5、盡量減少HTTP請求次數
剔除重復腳本:在同一個頁面中重復引用JavaScript文件會影響頁面的性能,重復腳本會引起不必要的HTTP請求和無用的JavaScript運算,這降低了網站性能
js或css或img文件合并和壓縮,來減少Http請求
ajax異步請求,防止多次請求,程序判斷第一次請求完成后再允許第二次請求
6、不要在HTML中縮放圖片
不要為了在HTML中設置長寬而使用比實際需要大的圖片。
如果你需要:?
那么你的圖片(mycat.jpg)就應該是100x100像素而不是把一個500x500像素的圖片縮小使用。
7、后端高性能開發
代碼復雜性,優化響應速度
代碼越復雜,性能越不好,越容易出錯,我們在編輯代碼時盡量精簡化、邏輯簡單化;根據需求使用最簡單的方法實現功能效果;盡量減少對數據庫的操作;減少循環請求或多次請求的邏輯。
代碼重復調用,冗余
css/js/img/php重復調用,導致多次請求,影響加載速度和性能
檢查和優化代碼,減少重復調用請求,從而提高加載速度和優化性能
減少代碼冗余
語法嚴謹、杜絕死循環邏輯
數據緩存(redis/memache)
根據不同的需求使用不同的緩存技術(內存使用率、數據類型、持久性、數據安全等條件篩選適合你的緩存技術)
獲取數據庫的數據,根據需求分析是否可以使用緩存,是否要對數據進行緩存
mysql優化
Explain你的SELECT查詢:使用Explain關鍵字可以讓你知道MySQL是如何處理你的SQL語句的。這可以幫你分析你的查詢語句或是表結構的性能瓶頸。
當只要一行數據時使用LIMIT1:在這種情況下,加上LIMIT1可以增加性能。這樣一樣,MySQL數據庫引擎會在找到一條數據后停止搜索,而不是繼續往后查少下一條符合記錄的數據。
為搜索字段建索引:索引并不一定就是給主鍵或是唯一的字段。如果在你的表中,有某個字段你總要會經常用來做搜索,那么,請為其建立索引
選擇正確的存儲引擎:
?? 1)MyISAM適合于一些需要大量查詢的應用,但其對于有大量寫操作并不是很好。甚至你只是需要update一個字段,整個表都會被鎖起來,而別的進程,就算是讀進程都無法操作直到讀操作完成。另外,MyISAM對于SELECT COUNT(*) 這類的計算是超快無比的。
?? 2)InnoDB的趨勢會是一個非常復雜的存儲引擎,對于一些小的應用,它會比MyISAM還慢。他是它支持“行鎖” ,于是在寫操作比較多的時候,會更優秀。并且,他還支持更多的高級應用,比如:事務。
垂直分割:“垂直分割”是一種把數據庫中的表按列變成幾張表的方法,這樣可以降低表的復雜度和字段的數目,從而達到優化的目的。但是你需要注意的是,這些被分出去的字段所形成的表,你不會經常性地去Join他們,不然的話,這樣的性能會比不分割時還要差,而且,會是極數級的下降。
把IP地址存成UnsignedInt(無符號整型):很多程序員都會創建一個VARCHAR(15) 字段來存放字符串形式的IP而不是整型的IP。在PHP中,也有這樣的函數ip2long()和long2ip()。
讀寫分離、db集群等優化
還有其他優化可查看該地址:http://blog.csdn.net/waferleo/article/details/7179009
代碼功能監控
1)監控后臺設置監控規則,代碼請求達到規則限制時,發短信或郵件報警
2)代碼層面加監控代碼,監控配置設置、邏輯在哪一步某一條件時,需要對其進行提交報警日志
后端總結
考慮用戶體驗問題,優化請求速度、代碼精簡化、邏輯簡單化、語法嚴謹
根據需求分析是否需要加緩存技術
功能性活動,考慮訪問量問題,代碼邏輯要把高并發的問題考慮進去
mysql的優化
功能邏輯如果有必要加一下監控代碼
服務器高性能搭建
網站架構規劃
1)機房選擇:選擇單線、雙線或多線機房
2)帶寬大小:根據網站預估PV的訪問量來設置帶寬大小(1G)
3)服務器劃分:圖片服務器、頁面服務器、數據庫服務器、應用服務器、日志服務器等(db讀寫分離、集群)
4)框架選擇:如PHP的YII框架,邏輯分層(MVC)
5)緩存:架構層面(apache/varnish);程序層面(redis、memcache)
6)負載均衡:HTTP協議、TCP業務類型【Nginx輕量級負載均衡、高可用;LVS(服務器集群負載均衡)+KeepAlived(檢測服務器工作是否正常):實現負載均衡和高可用】
http持久鏈接
持久連接(Keep-Alive)也叫做長連接,它是一種TCP 的連接方式,連接會被瀏覽器和服務器所緩存,在下次連接同一服務器時,緩存的連接被重新使用。由于HTTP 的無狀態性,人們也一直很清楚“一次性”的 HTTP通信。持久連接則減少了創建連接的開銷,提高了性能。(在線聊天功能)
GZIP壓縮
為了減少傳輸的數據,壓縮是一個不錯的選擇,而 HTTP協議支持 GZIP 的壓縮格式,服務器響應的報頭包含Content-Encoding: gzip,它告訴瀏覽器,這個響應的返回數據,已經壓縮成GZIP 格式,瀏覽器獲得數據后要進行解壓縮操作,在一定程度可以減少服務器傳輸的數據,提高系統性能;
Nginx 的 GZIP配置,Nginx具有更高的性能,利用該配置可以更好的提高性能
CND加速(7天)
CDN即內容分發網絡。其基本思路是盡可能避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定
通過在網絡各處放置節點服務器所構成的在現有的互聯網基礎之上的一層智能虛擬網絡,CDN系統能夠實時地根據網絡流量和各節點的連接、負載狀況以及到用戶的距離和響應時間等綜合信息將用戶的請求重新導向離用戶最近的服務節點上。
其目的是使用戶可就近取得所需內容,解決 Internet網絡擁擠的狀況,提高用戶訪問網站的響應速度。
web集群服務器配置(一)
機器數:6臺web虛擬機(跨機柜高可用),6臺CMSweb虛擬機,2臺cmsdb虛擬機(從庫只讀,域名訪問高可用),2臺cmsApi接口redis虛擬機(VIP高可用)
安裝軟件:varnish、redis、mysql、php
web集群
機器數:12、16或20臺以上web服務器虛擬機,以每4臺為一個小集群,公司重點游戲大推期訪問量很高的官網,每個小集群可解析一款高訪問量的官網,其他穩定期訪問量不高的官網可以根據小集群的負載情況分別解析到負載不高的小集群中
安裝軟件:varnish、redis、mysql(cms從庫)、php
服務器監控
zabbix:是一個基于WEB界面的提供分布式系統監視以及網絡監視功能的企業級的開源解決方案。
服務器端總結
根據不同的業務,選擇最適合業務的方案
架構規范:機房選擇、寬帶設置、服務器劃分、框架選擇、緩存技術選擇、負載均衡技術選擇
長短鏈接選擇
CDN動態加速或靜態加速選擇
服務器配置方案選擇(大集群、小集群)
是否要加監控技術
總結
- 上一篇: 使用Kickstart自动化安装Cent
- 下一篇: 【转】Java里如何实现线程间通信