網(wǎng)站優(yōu)化方案對于大型網(wǎng)站來說非常重要,一個網(wǎng)站的訪問打開速度影響著用戶體驗度,網(wǎng)站訪問速度慢會造成高跳出率,小網(wǎng)站很好解決,那對于大型網(wǎng)站由于欄目多,圖片和圖像都比較龐大,那該怎么進行整體性能優(yōu)化呢?seo優(yōu)化網(wǎng)為你提供一份大型php網(wǎng)站性能和并發(fā)訪問優(yōu)化方案。
千萬人同時訪問的網(wǎng)站,一般是有很多個數(shù)據(jù)庫同時工作,說明白一點就是數(shù)據(jù)庫集群和并發(fā)控制,這樣的網(wǎng)站實時性也是相對的。這些網(wǎng)站都有一些共同的特點:數(shù)據(jù)量大,在線人數(shù)多,并發(fā)請求多,pageview高,響應(yīng)速度快。
基本概念
1、網(wǎng)站吞吐量:TPS/每秒的事務(wù)數(shù),QPS/每秒的查詢數(shù),HPS/每秒的HTTP請求數(shù)
2、服務(wù)器性能指標:系統(tǒng)負載,內(nèi)存使用,CPU使用,磁盤使用以及網(wǎng)絡(luò)I/O等
網(wǎng)站后端優(yōu)化方法
1、使應(yīng)用服務(wù)器實現(xiàn)無狀態(tài),將會話信息存儲在緩存服務(wù)器集群中,這樣每臺應(yīng)用服務(wù)器之間就可以被相同的對待。就可以通過增加服務(wù)器數(shù)量的方法水平擴展整個系統(tǒng)的吞吐量。
2、使用消息隊列實現(xiàn)網(wǎng)站的異步處理。對于某些接口調(diào)用需要花費很長的時間,可以通過一個消息隊列來實現(xiàn)生產(chǎn)者消費者模式,每一個模塊既可以是消費者也可以是生產(chǎn)者。但是消息隊列也有一定的確定,需要增加額外的機制來保證事務(wù)性,例如通過一張表來記錄消息的消費記錄和消費結(jié)果來實現(xiàn)事務(wù)最終的一致。
3、對各種資源費復(fù)用來減少創(chuàng)建資源時的時間和性能開銷,例如使用數(shù)據(jù)庫連接池和線程池。
4、緩存防御策略,將可預(yù)見的但是并不存在的數(shù)據(jù)緩存下來,防止惡意攻擊連續(xù)對緩存發(fā)起該資源的請求導(dǎo)致最終請求壓在數(shù)據(jù)庫上面。
5、選擇合理的緩存策略,只緩存對于業(yè)務(wù)而言及時性要求不高,且訪問量大的數(shù)據(jù),選取合適的緩存命中算法,減少增加服務(wù)器或者服務(wù)器宕機對于應(yīng)用的影響。
6、硬件上采用更加優(yōu)秀(快)的硬件。
7、提高代碼邏輯和代碼中數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)的合理性以及優(yōu)化算法提高應(yīng)用程序的處理時間。
網(wǎng)站前端優(yōu)化方法
1、減少HTTP請求:通過將多個前端資源合并成一個實現(xiàn)減少HTTP請求提高性能。
2、合理的布局前端代碼結(jié)構(gòu),css,html,js代碼的順尋由上至下。
3、啟用傳輸壓縮。例如gzip。
4、使用CDN分發(fā),將靜態(tài)資源部署在各大網(wǎng)絡(luò)運營商的機房中,這樣子用戶就可以非常快的就近獲得資源。
5、對于一些可公開訪問的資源,可以通過設(shè)置其他的域名的方式減少傳輸過程中的cookie。
6、設(shè)置響應(yīng)頭字段是部分及時性要求不高的靜態(tài)資源在緩存在前端瀏覽器中。
7、使用反向代理將熱門內(nèi)容,靜態(tài)資源或者一些可被緩存的計算結(jié)果緩存在代理服務(wù)器中。通過配置代理服務(wù)器可以實現(xiàn)代理服務(wù)器直接轉(zhuǎn)發(fā)被緩存的資源。
優(yōu)化完后端和數(shù)據(jù)庫之后,我們緊接著要做的就是針對輸出的頁面優(yōu)化你的前端頁面和資源文件,主要包括對圖片、JS和樣式文件的優(yōu)化。
我們建議采用下列網(wǎng)頁性能測試工具進行檢測和分析,會給出相關(guān)的優(yōu)化建議:
PageSpeed 谷歌開發(fā)的工具
網(wǎng)站管理員和網(wǎng)絡(luò)開發(fā)人員可以使用PageSpeed來評估他們網(wǎng)頁的性能,并獲得有關(guān)如何改進性能的建議。
yslow YSlow
可以對網(wǎng)站的頁面進行分析,并告訴你為了提高網(wǎng)站性能,如何基于某些規(guī)則而進行優(yōu)化。
總結(jié)
上面寫的哪些優(yōu)化方法對于一個中大型的網(wǎng)站而言,算是一個非常普遍的解決方案了,但是落實到不同的業(yè)務(wù),會有自己的實現(xiàn)方式,這里的實現(xiàn)方式指的是不同的方案組合和對應(yīng)的技術(shù)實現(xiàn)方式。舉個形象點的例子,有些網(wǎng)站不需要前端再加一個CDN,有些網(wǎng)站不需要加緩存服務(wù)器集群,有些業(yè)務(wù)使用JMQ實現(xiàn)消息隊列,有些使用redis緩存消息實現(xiàn)消息隊列,對于事務(wù)性的保證,也不一定通過數(shù)據(jù)庫鎖或者線程同步來實現(xiàn),也可以通過增加額外的存儲結(jié)構(gòu)來記錄鎖,鎖只是一種概念,我們可以選擇編程語言自帶的方式也可以用數(shù)據(jù)結(jié)構(gòu)去描述一把鎖。
新聞熱點
疑難解答
圖片精選