網(wǎng)站性能優(yōu)化對于大型網(wǎng)站來說的重要性有哪些?
2021-09-12
網(wǎng)站性能優(yōu)化對于大型網(wǎng)站來說非常重要。網(wǎng)站的打開速度會影響用戶體驗。網(wǎng)站訪問速度慢會導(dǎo)致高跳出率。小網(wǎng)站很容易解決。對于大型網(wǎng)站,由于欄目較多,圖片和圖片都比較大,那么如何優(yōu)化整體性能?
一、大型網(wǎng)站性能提升策略
1、HTML 靜態(tài)化
其實大家都知道效率最高、消耗最少的是純靜態(tài)HTML頁面php網(wǎng)站部署到服務(wù)器,所以我們盡量讓我們網(wǎng)站的頁面都使用靜態(tài)頁面。這種最簡單的方法其實是最有效的方法。 .
2、圖片服務(wù)器分離
眾所周知,對于web服務(wù)器,無論是IIS還是其他容器,圖片都是最消耗資源的,所以我們需要將圖片和頁面分開。這基本上是大型網(wǎng)站采用的策略。它們有獨立的甚至很多的圖像服務(wù)器。這樣的架構(gòu)可以減輕提供頁面訪問請求的服務(wù)器系統(tǒng)的壓力,并且可以保證系統(tǒng)不會因為圖像問題而崩潰。在應(yīng)用服務(wù)器和鏡像服務(wù)器上,可以進行不同的配置優(yōu)化。比如在配置的時候,可以盡可能少的支持,盡可能的少,以保證更高的系統(tǒng)消耗和執(zhí)行效率。
3、數(shù)據(jù)庫集群,庫表hash
大型網(wǎng)站具有復(fù)雜的應(yīng)用程序。這些應(yīng)用程序必須使用數(shù)據(jù)庫。當面對大量的訪問時,數(shù)據(jù)庫的瓶頸很快就會暴露出來。這時候一個數(shù)據(jù)庫很快就無法滿足應(yīng)用,所以我們需要使用數(shù)據(jù)庫集群或者數(shù)據(jù)庫表hash。
在數(shù)據(jù)庫集群方面,很多數(shù)據(jù)庫都有自己的解決方案,也提供了常用/類似的解決方案。
集群通常使用 CDN、GSBL 和 DNS 負載均衡技術(shù)。每個地區(qū)有一組前端服務(wù)器組,如網(wǎng)易,百度使用DNS負載均衡技術(shù),每個頻道有一組前端服務(wù)器,易搜使用DNS Load技術(shù),所有頻道共享一組前端服務(wù)器端服務(wù)器集群。
庫表哈希是最常用和最有效的解決方案。
我們在應(yīng)用程序中安裝業(yè)務(wù)和應(yīng)用程序或功能模塊來分離數(shù)據(jù)庫。不同的模塊對應(yīng)不同的數(shù)據(jù)庫或者表,然后按照一定的策略對某個頁面或者函數(shù)進行更小的數(shù)據(jù)庫hash,比如根據(jù)用戶ID對用戶表進行hash,這樣可以提高系統(tǒng)的性能成本低,可擴展性好。
搜狐的論壇采用這樣的結(jié)構(gòu),將論壇的用戶、設(shè)置、帖子等信息的數(shù)據(jù)庫分開,然后根據(jù)帖子和用戶的和ID對數(shù)據(jù)庫和表進行hash,最后可以得到在配置文件中完成。簡單的配置允許系統(tǒng)隨時添加低成本的數(shù)據(jù)庫來補充系統(tǒng)性能。
4、
所有從事技術(shù)的人都使用過“緩存”一詞,并且很多地方都使用緩存。 網(wǎng)站開發(fā) 中的網(wǎng)站架構(gòu)和緩存也很重要。這里首先描述兩個最基本的緩存。稍后將描述高級和分布式緩存。至于架構(gòu)上的緩存,熟悉它的人都知道,它提供了自己的緩存模塊,或者可以使用額外的模塊進行緩存。這兩種方法都可以有效提高訪問響應(yīng)能力。
網(wǎng)站程序開發(fā)的緩存提供了常用的緩存接口,可以在web開發(fā)中使用。比如在Java開發(fā)的時候,可以調(diào)用緩存一些數(shù)據(jù),共享通信。一些大型社區(qū)使用這種架構(gòu)。另外,在使用web語言開發(fā)的時候,各種語言基本都有自己的緩存模塊和方法,PHP有Pear模塊,Java比較多,.net也不是很熟悉,相信會有的。
5、
鏡像是大型網(wǎng)站經(jīng)常使用的一種提高性能和數(shù)據(jù)安全性的方法。鏡像技術(shù)可以解決由于不同的網(wǎng)絡(luò)接入商和地區(qū)造成的用戶訪問速度的差異。比如很多網(wǎng)站的區(qū)別和推廣 鏡像網(wǎng)站建在教育網(wǎng),數(shù)據(jù)定期或?qū)崟r更新。
6、負載均衡
負載均衡將是大型網(wǎng)站解決高負載訪問和大量并發(fā)請求的高端方案。負載均衡技術(shù)發(fā)展多年,有很多專業(yè)的服務(wù)商和產(chǎn)品可供選擇。
二、PHP 代碼編寫優(yōu)化:
1. echo 比它快得多。
兩種方法都會在頁面上打印東西,但是echo不返回任何值,成功或失敗都會返回0或1。
2. 比這更耗時。
因為它需要檢查你要包含的內(nèi)容是否已經(jīng)包含。
3. 對于長段落的字符串,必須使用單引號而不是雙引號。
因為雙引號會搜索字符串中的變量。例如:echo ‘This is long ’。 $name 比 echo "This is long $name" 快得多。
4. 不要使用嵌套在循環(huán)中的 for 循環(huán)
5. 如果可以將函數(shù)定義為靜態(tài)函數(shù),則不要將其定義為成員函數(shù)。靜態(tài)函數(shù)比成員函數(shù)快 33%。
6.如果不用正則表達式也能解決問題,那就不要使用正則表達式。
正則表達式比 PHP 的原生函數(shù)慢。例如,使用替換。
7. 盡量不要使用相對路徑來包含文件
在相對路徑中搜索文件,會在當前目錄中搜索,然后依次再次搜索。這樣,查找文件非常慢。最好先定義這樣一個常量,然后用這個常量來包含文件。
8.全等符號===比等式快==
而 if (1 == '1') 會返回真,if (0 == ”) 也會返回真,而當你使用全等符號時, if (1 ==='1') 和 if (0 ===”) 將返回。所以當你需要檢查程序中的一些布爾變量時,最好使用全等符號。
三、三、有幾種方式
1.關(guān)閉調(diào)試模式
由于關(guān)閉調(diào)試模式,系統(tǒng)會自動生成項目編譯緩存并關(guān)閉日志寫入,可以減少大量的IO加載和日志寫入開銷。
2.啟用頁面壓縮輸出
從3.1版本開始,增加了配置參數(shù)來控制頁面壓縮輸出。
3.啟用緩存
在網(wǎng)站部署環(huán)境中安裝APC或緩存,可以有效提升網(wǎng)站性能和內(nèi)存使用率。它是一個開源緩存/優(yōu)化器,這意味著它可以提高 PHP 在您的服務(wù)器上的性能。 PHP 編譯后數(shù)據(jù)緩存到共享內(nèi)存,避免重復(fù)編譯過程,編譯后的代碼可以直接用來緩存編譯后的代碼,提高速度。通常它可以將您的頁面生成率提高 2 到 5 倍并減少服務(wù)器負載。 PHP(APC)是一種有效的PHP開源緩存工具,可以緩存PHP中間代碼。
4. 字段緩存
默認情況下,字段緩存是自動生成的。開發(fā)完成后,基本上數(shù)據(jù)庫的變化變少了,所以可以考慮將字段緩存合并到對應(yīng)的模型類中,這樣可以減少每次讀取字段緩存的IO開銷。合并的方法是在/Data/
下找到對應(yīng)的字段緩存文件
四、 數(shù)據(jù)庫優(yōu)化
1、選擇合適的存儲引擎
舉個例子,有兩個存儲引擎和。每個引擎都有優(yōu)點和缺點。它適用于一些需要大量查詢的應(yīng)用。趨勢將是一個非常復(fù)雜的存儲引擎,對于一些小型應(yīng)用程序,它會比這更慢。但它支持“行鎖”并支持事務(wù)。
2、優(yōu)化字段的數(shù)據(jù)類型
記住一個原則,列越小,速度越快。對于大多數(shù)數(shù)據(jù)庫引擎,硬盤操作可能是最重要的瓶頸。因此,在這種情況下,使您的數(shù)據(jù)緊湊將非常有幫助,因為它減少了對硬盤的訪問。如果一個表只有幾列(比如字典表、配置表),那么我們沒有理由使用INT作為主鍵。使用INT或更小更經(jīng)濟。如果不需要記錄時間,使用DATE會好很多。當然,你也需要留出足夠的擴展空間。
3、為搜索字段添加索引
索引不一定用于主鍵或唯一字段。如果你的表中有一個字段你會經(jīng)常使用,那么最好為其建立一個索引,除非你要搜索的字段是一個大文本字段,那么你應(yīng)該建立一個全文索引.
4、 *從數(shù)據(jù)庫讀取的數(shù)據(jù)越多,查詢越慢。
而且,如果你的數(shù)據(jù)庫服務(wù)器和WEB服務(wù)器是兩個獨立的服務(wù)器,這樣也會增加網(wǎng)絡(luò)傳輸?shù)呢撦d。即使要查詢數(shù)據(jù)表的所有字段,也盡量不要使用*通配符。善用內(nèi)置的字段排除定義,可能會帶來更多的便利。
5、使用 ENUM 代替
ENUM 類型非??焖偾揖o湊。其實它保存的是什么,只是在外面表現(xiàn)為一個字符串。這樣,使用這個字段來制作一些選項列表就變得非常完美了。例如,性別、種族、部門、地位等這些字段的值是有限的和固定的。那么,你應(yīng)該使用 ENUM 而不是。
6、盡量使用NOT NULL
除非您有非常具體的理由使用 NULL 值,否則您應(yīng)該始終保持您的字段 NOT NULL。 NULL 實際上需要額外的空間,比較起來你的程序會更復(fù)雜。當然,這并不是說不能使用NULL。實際情況很復(fù)雜,還有一些情況需要用到NULL。
7、定長表會更快
如果表中所有字段都是“定長”,則整個表將被視為“”或“-”。例如,表中沒有以下類型的字段:、TEXT、BLOB。只要您包含這些字段之一,該表就不是“固定長度的靜態(tài)表”。這樣引擎就會用另一種方法來處理。
定長表會提高性能,因為搜索會更快,因為這些定長很容易計算下一個數(shù)據(jù)的偏移量,所以讀取自然會更快。而如果字段不是定長的,那么每次查找下一個時,程序都需要查找主鍵。
此外,固定長度的表更容易緩存和重建。但是唯一的副作用是定長字段會浪費一些空間,因為無論你使用與否,定長字段都要分配這么多空間。
8、使用“垂直分割”技術(shù)
你可以把你的桌子分成兩張,一張是固定長度的,一張是可變長度的。垂直切分“垂直切分”是將數(shù)據(jù)庫中的一張表按列轉(zhuǎn)換成若干張表的方法,可以降低表的復(fù)雜度和字段數(shù),從而達到優(yōu)化的目的。例如:User表中有一個字段是家庭住址,該字段為可選字段,相比之下,操作數(shù)據(jù)庫時除個人信息外,無需頻繁讀取或重寫該字段。那么,為什么不把他放在另一張桌子上呢?這樣會讓你的表有更好的性能,想想看php網(wǎng)站部署到服務(wù)器,如果有很多時候,我只有用戶表的用戶名,用戶名和密碼。 、用戶角色等會經(jīng)常用到。較小的手表將始終具有良好的性能。另外需要注意的是,這些劃分的字段組成的表,不要頻繁的加入,否則性能會比不劃分的時候差,而且會出現(xiàn)極值的數(shù)量。下降的程度。
9、您的詢問
使用關(guān)鍵字讓您知道如何處理您的 SQL 語句。這可以幫助您分析查詢或表結(jié)構(gòu)的性能瓶頸。查詢結(jié)果還會告訴你你的索引主鍵是怎么用的,你的數(shù)據(jù)表是怎么搜索排序的……等等。對于比較復(fù)雜的語句,尤其是涉及多表的語句,通常我們可以在前面加上關(guān)鍵字。你可以用它來做到這一點。
五、前端優(yōu)化
優(yōu)化后端和數(shù)據(jù)庫后,接下來我們要做的就是優(yōu)化你的前端頁面和輸出頁面的資源文件,包括圖片、JS和樣式文件的優(yōu)化。建議使用以下網(wǎng)頁性能測試工具進行檢測分析,并給出相關(guān)優(yōu)化建議:
開發(fā)的工具
開發(fā)人員可以使用它來評估其網(wǎng)頁的性能并獲得有關(guān)如何提高性能的建議。
它可以分析網(wǎng)站的頁面,告訴您如何根據(jù)一定的規(guī)則進行優(yōu)化,以提高網(wǎng)站的性能。