大型PHP網(wǎng)站性能和并發(fā)訪問優(yōu)化方案_第1頁
大型PHP網(wǎng)站性能和并發(fā)訪問優(yōu)化方案_第2頁
大型PHP網(wǎng)站性能和并發(fā)訪問優(yōu)化方案_第3頁
大型PHP網(wǎng)站性能和并發(fā)訪問優(yōu)化方案_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

性能優(yōu)化對于型來說非常重要,一個的訪問打速度影響著用戶體驗(yàn)度,訪問速度慢會造成高跳出率,小很好解決,那對于型由于欄目多,圖片和圖像都比較龐,那該怎么進(jìn)行整體性能優(yōu)化呢?一、型性能提高策略1、HTML靜態(tài)化其實(shí)家都知道,效率、消耗最小的就純靜態(tài)化的html頁面,所以們盡可能使們的上的頁面采用靜態(tài)頁面來實(shí)現(xiàn),這個最簡單的方法其實(shí)也最有效的方法。2、圖片器分離家知道,對于Web器來說,不管Apache、IIS還其他容器,圖片最消耗資源的,于們有必要將圖片與頁面進(jìn)行分離,這基本上型都會采用的策略,他們都有獨(dú)立的、甚至很多臺的圖片器。這樣的架構(gòu)可以降低頁面訪問請求的器系統(tǒng)壓力,并且可以保證系統(tǒng)不會因?yàn)閳D片問題而崩潰。在應(yīng)用器和圖片器上,可以進(jìn)行不同的配置優(yōu)化,比如apache在配置ContentType的時候可以盡量少支持、盡可能少的LoadModule,保證更高的系統(tǒng)消耗和執(zhí)行效率。3、數(shù)據(jù)庫集群、庫表散列型都有復(fù)雜的應(yīng)用,這些應(yīng)用必須使用數(shù)據(jù)庫,那么在面對量訪問的時候,數(shù)據(jù)庫的瓶頸很快就能顯現(xiàn)出來,這時一臺數(shù)據(jù)庫將很快無法滿足應(yīng)用,于們需要使用數(shù)據(jù)庫集群或者庫表散列。在數(shù)據(jù)庫集群方面,很多數(shù)據(jù)庫都有自己的解決方案,常用的MySQL的Master/Slave也類似的方案。集群通常會使用CDN與GSBL與DNS負(fù)載均衡技術(shù),每個地區(qū)一組前臺器群,例如:網(wǎng)易,百度使用了DNS負(fù)載均衡技術(shù),每個頻道一組前臺器,一搜使用了DNS負(fù)載技術(shù),所有頻道共用一組前臺器集群。庫表散列常用并且最有效的解決方案。們在應(yīng)用程序中和應(yīng)用或者功能模塊將數(shù)據(jù)庫進(jìn)行分離,不同的模塊對應(yīng)不同的數(shù)據(jù)庫或者表,再按照一定的策略對某個頁面或者功能進(jìn)行更小的數(shù)據(jù)庫散列,比如用戶表,按照用戶ID進(jìn)行表散列,這樣就能夠低成本的提升系統(tǒng)的性能并且有很好的擴(kuò)展性。sohu的論壇就采用了這樣的架構(gòu),將論壇的用戶、設(shè)置、帖子等信息進(jìn)行數(shù)據(jù)庫分離,然后對帖子、用戶按照板塊和ID進(jìn)行散列數(shù)據(jù)庫和表,最終可以在配置文件中進(jìn)行簡單的配置便能讓系統(tǒng)隨時增加一臺低成本的數(shù)據(jù)庫進(jìn)來補(bǔ)充系統(tǒng)性能。4、緩存緩存一詞搞技術(shù)的都接觸過,很多地方用到緩存。架構(gòu)和發(fā)中的緩存也非常重要。這里先講述最基本的兩種緩存。高級和分布式的緩存在后面講述。架構(gòu)方面的緩存,對Apache比較熟悉的人都能知道Apache了自己的緩存模塊,也可以使用外加的Squid模塊進(jìn)行緩存,這兩種均可以有效的提高Apache的訪問響應(yīng)能力。程序發(fā)方面的緩存,Linux上的MemoryCache常用的緩存接口,可以在web發(fā)中使用,比如用Java發(fā)的時候就可以調(diào)用MemoryCache對一些數(shù)據(jù)進(jìn)行緩存和通訊共享,一些型社區(qū)使用了這樣的架構(gòu)。另外,在使用web語言發(fā)的時候,各種語言基本都有自己的緩存模塊和方法,PHP有Pear的Cache模塊,Java就更多了,.net不很熟悉,相信也肯定有。5、鏡像鏡像型常采用的提高性能和數(shù)據(jù)性的,鏡像的技術(shù)可以解決不同網(wǎng)絡(luò)接入商和地域帶來的用戶訪問速度差異,比如ChinaNet和EduNet之間的差異就促使了很多在教育網(wǎng)內(nèi)搭建鏡像站,數(shù)據(jù)進(jìn)行定時更新或者實(shí)時更新。6、負(fù)載均衡負(fù)載均衡將型解決高負(fù)荷訪問和量并發(fā)請求采用的高端解決法。負(fù)載均衡技術(shù)發(fā)展了多年,有很多專業(yè)的商和產(chǎn)品可以選擇。二、PHP代碼編寫優(yōu)化:1.echo比print要快很多。兩個方法都會在頁面上打印東西,不過echo不返回任何值,print會在成功或失敗的時候返回0或1。2.include_once比include更加耗時。因?yàn)樗枰z查你要包含的class否已經(jīng)被包含進(jìn)來。對于長段落的字符串一定要使用單引號,而不雙引號。因?yàn)殡p引號會去搜索字符串中的變量。比如:echo‘Thisislongstring’.$name就比echo“Thisislongstring$name”要快很多。不要再循環(huán)中嵌套使用for循環(huán)如果能將函數(shù)定義為靜態(tài)的,那么就不要定義成為成員函數(shù),靜態(tài)函數(shù)比成員函數(shù)3%。如果你可以不通過正則表達(dá)式就能解決問題,那么就別用正則。正則表達(dá)式比PHP原生的函數(shù)要慢一些。例如使用str_replace取代preg_replae。盡量不要使用相對路徑來包含文件在相對路徑中查找文件,會現(xiàn)在當(dāng)前目錄中查找,然后依次再查找。這樣查找文件就很慢。先定義WEB_ROOT這樣的常量,然后使用這個常量來包含文件。8.全等符號===比相等==要快而且if(1二二T)會返回true,if(0二二”)也會返回true,而當(dāng)你使用全等符號的時候if(1===’1')和if(0===”)都會返回false。所以當(dāng)你在程序中需要檢測一些布爾變量的時候使用全等符號。三、針對thinkphp有以下幾種關(guān)閉調(diào)試模式由于關(guān)閉調(diào)試模式之后,系統(tǒng)會自動生成編譯緩存以及關(guān)閉日志寫入,這樣可以減少很多的IO加載和日志寫入的銷。啟頁面壓縮輸出3.1版本始,增加了OUTPUT_ENCODE配置參數(shù),用于控制頁面壓縮輸出。啟緩存在部署環(huán)境APC或者Xcache緩存能夠有效提升運(yùn)行性能和內(nèi)存占用,XCache一個源的opcode緩存器/優(yōu)化器,這意味著他能夠提高您器上的PHP性能.他通過把編譯PHP后的數(shù)據(jù)緩沖到共享內(nèi)存從而避免重復(fù)的編譯過程,能夠直接使用緩沖區(qū)已編譯的代碼從而提高速度.通常能夠提高您的頁面生成速率2到5倍,降低器負(fù)載.AlternativePHPCache(APC)一種對PHP有效的放源高速緩沖儲存器工具,它能夠緩存opcode的php中間碼。字段緩存默認(rèn)情況下,字段緩存自動生成的,在發(fā)完成之后,基本上數(shù)據(jù)庫的變動變得比較少,因此可以考慮合并字段緩存到對應(yīng)的模型類,這樣能夠減少每次讀取字段緩存的IO銷。合并的方法在Runtime/Data/_fields找到對應(yīng)的字段緩存文件四、數(shù)據(jù)庫優(yōu)化1、選擇正確的存儲引擎以MySQL為例,包括有兩個存儲引擎MyISAM和InnoDB,每個引擎都有利有弊。MyISAM適合于一些需要量查詢的應(yīng)用。InnoDB的趨勢會一個非常復(fù)雜的存儲引擎,對于一些小的應(yīng)用,它會比MyISAM還慢。但它支持“行鎖”,支持事務(wù)。2、優(yōu)化字段的數(shù)據(jù)類型記住一個原則,越小的列會越快。對于多數(shù)的數(shù)據(jù)庫引擎來說,硬盤操作可能最重的瓶頸。所以,把你的數(shù)據(jù)變得緊湊會對這種情況非常有幫助,因?yàn)檫@減少了對硬盤的訪問。如果一個表只會有幾列罷了(比如說字典表,配置表),那么,們就沒有理由使用INT來主鍵,使用MEDIUMINT,SMALLINT或更小的TINYINT會更經(jīng)濟(jì)一些。如果你不需要記錄時間,使用DATE要比DATETIME好得多。當(dāng)然,你也需要留夠足夠的擴(kuò)展空間。3、為搜索字段索引索引并不一定就給主鍵或的字段。如果在你的表中,有某個字段你總要會經(jīng)常用來搜索,那么為其建立索引,除非你要搜索的字段的文本字段,那應(yīng)該建立全文索引。4、避免使用Select*從數(shù)據(jù)庫里讀出越多的數(shù)據(jù),那么查詢就會變得越慢。并且,如果你的數(shù)據(jù)庫器和WEB器兩臺獨(dú)立的器的話,這還會增加網(wǎng)絡(luò)傳輸?shù)呢?fù)載。即使你要查詢數(shù)據(jù)表的所有字段,也盡量不要用*通配符,善用內(nèi)置的字段排除定義也許能給帶來更多的便利。5、使用ENUM而不VARCHARENUM類型非??旌途o湊的。在實(shí)際上,其保存的TINYINT,但其外表上顯示為字符串。這樣一來,用這個字段來一些選項(xiàng)列表變得相當(dāng)?shù)?。例如,性別、民族、部門和狀態(tài)之類的這些字段的取值有限而且固定的,那么,你應(yīng)該使用ENUM而不VARCHAR。6、盡可能的使用NOTNULL除非你有一個很特別的原因去使用NULL值,你應(yīng)該總讓你的字段保持NOTNULLoNULL其實(shí)需要額外的空間,并且,在你進(jìn)行比較的時候,你的程序會更復(fù)雜。當(dāng)然,這里并不說你就不能使用NULL了,現(xiàn)實(shí)情況很復(fù)雜的,依然會有些情況下,你需要使用NULL值。7、固定長度的表會更快如果表中的所有字段都“固定長度”的,整個表會被認(rèn)為“static”或“fixed-length”。例如,表中沒有如下類型的字段:VARCHAR,TEXT,BLOB。只要你包括了其中一個這些字段,那么這個表就不“固定長度靜態(tài)表”了,這樣,MySQL引擎會用另一種方法來處理。固定長度的表會提高性能,因?yàn)镸ySQL搜尋得會更快一些,因?yàn)檫@些固定的長度很容易計算下一個數(shù)據(jù)的偏移量的,所以讀取的自然也會很快。而如果字段不定長的,那么,每一次要找下一條的話,需要程序找到主鍵。并且,固定長度的表也更容易被緩存和重建。不過,的副作用,固定長度的字段會浪費(fèi)一些空間,因?yàn)槎ㄩL的字段無論你用不用,他都要分配那么多的空間。8、使用“垂直分割”技術(shù)你可以分割你的表成為兩個一個定長的,一個則不定長的。垂直分割“垂直分割”一種把數(shù)據(jù)庫中的表按列變成幾張表的方法,這樣可以降低表的復(fù)雜度和字段的數(shù)目,從而達(dá)到優(yōu)化的目的。例如:在User表中有一個字段家庭,這個字段可選字段,相比起,而且你在數(shù)據(jù)庫操作的時候除了個人信息外,你并不需要經(jīng)常讀取或改寫這個字段。那么,為什么不把他放到另外一張表中呢?這樣會讓你的表有更好的性能,家想想不,量的時候,對于用戶表來說,只有用戶ID,用戶名,口令,用戶角色等會被經(jīng)常使用。小一的表總會有好的性能。另外,你需要注意的,這些被分出去的字段所形成的表,你不會經(jīng)常性地去Join他們,不然的話,這樣的性能會比不分割時還要差,而且,會極數(shù)級的下降。9、EXPLAIN你的SELECT查詢使用EXPLAIN關(guān)鍵字可以讓你知道MySQL如何處理你的SQL語句的。這可以幫你分析你的查詢語句或表結(jié)構(gòu)的性能瓶頸。EXPLAIN的查詢結(jié)果還會告訴你你的索引主鍵被如何利用的,你的數(shù)據(jù)表如何被搜索和排序的……等等,等等。通常們可以對比較復(fù)雜的尤其涉及到多表的SELECT語句,把關(guān)鍵字EXPLAIN加到前面。你可以使用ph

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論