2009-11-28 72 views
2

加速php網站的最佳方式(方法?)以及使用這種或那種方式可以提高多少速度?加速php網站

+5

一段字符串可以多長時間? – 2009-11-28 15:56:37

回答

4

PHP並不是真正的語言,你可以進行微優化,或者僅僅在代碼上工作。真的沒有意義。儘管PHP並不是特別快,但PHP本身很少成爲給定網站的瓶頸。

在解決問題之前,您需要弄清楚瓶頸的位置。有很多常見的瓶頸,有共同的解決方案。鑑於如此少的細節,很難一概而論,但是有很多適用於大多數網站的性能提示。

第一個好看的地方實際上是在客戶端,而不是服務器端。您的網頁有多大(包括圖片,CSS,JavaScript等)?單個頁面視圖需要多少個HTTP請求?使用類似Firebug(和Firebug的YSlow插件)來查看頁面實際加載的時間以及頁面的哪些位導致問題。一些一般提示:

  • 找出縮小CSS和JavaScript的方法 - 刪除任何不需要的東西,然後通過類似YUI Compressor的工具運行剩下的東西。
  • 如果您有多個CSS和JavaScript文件,請嘗試將它們合併到一個文件中。
  • 儘可能優化所有圖片,並查看您是否可以使用CSS精靈或類似工具將這些圖片合併爲一個文件。 PunyPNG適用於無損圖像。一個體面的JPEG編碼器(不是Photoshop)適用於照片。
  • 將CSS移動到頁面頂部,將JavaScript移動到頁面底部,這樣瀏覽器就可以在JavaScript完成下載之前呈現頁面。
  • 確保您的所有CSS,JavaScript和HTML都被壓縮。
  • 確保您使用了適當的緩存 - 如果文件沒有更改,則無需重新下載它。

一旦你將客戶端轉移了,你可能不得不把注意力轉向服務器端。

安裝操作碼緩存,如APC,XCache或Zend Optimizer。這很容易做到,並且總會提供一些改進。一旦你完成了這些工作,就可以對你的頁面進行分析,找出實際花費的時間。

更可能的是,您將花大部分時間等待數據庫返回結果。因此,在最低限度內:

  • 確定哪些查詢耗時最長,並首先處理它們。儘管如此,在沒有人注意的管理頁面上需要五秒鐘的查詢並不像在首頁上需要一秒鐘的查詢那麼重要。
  • 確保您的查詢使用適當的索引。沒有常見的查詢應該需要進行全表掃描。某些類型的排序或分組可能無法使用索引 - 嘗試避免它們,或者修改查詢以使其可以使用索引。
  • 確保您的查詢不使用臨時表。
  • 使用EXPLAIN關鍵字 - 這非常有用。
  • 調整數據庫服務器本身。 MySQL通常不會針對性能進行優化。

一旦你這樣做了,通常最好開始研究如何使用緩存。加速PHP代碼的最好方法是減少它要做的工作量。

  • 確保您的數據庫的查詢緩存工作正常。
  • 使用像Memcached這樣的東西來存儲經常使用的結果,而不是從數據庫中獲取它們。
  • 如果您有足夠的內存,請嘗試將所有內容保留在Memcached中,只有在緩存中不存在某些內容時才使用數據庫。
  • 如果您的頁面是動態的,但對所有用戶都是相同的,請嘗試緩存這些塊。例如,如果兩個用戶正在查看文章,那麼即使頁面的其餘部分不是,每篇文章的文章本身也會完全相同。爲文章生成HTML,並將其放入緩存中。
  • 如果您有很多未經過身份驗證的用戶,他們完全可能會看到完全相同的頁面。兩位未經過身份驗證的用戶在查看上述文章時不會看到相同的文章 - 他們會看到一個相同的頁面,直至登錄鏈接。設置您的PHP腳本,以便您可以使用HTTP緩存標題(檢查最後修改日期,如果未更改,則返回304未修改)。一旦你這樣做了,在Web服務器前面粘上一個Squid反向代理,讓Squid將頁面從它的緩存中提取出來。

之後,一般的方法是開始使用更多的服務器,問題變成縮放而不是原始速度。總體計劃是確保您的網站具有無共享體系結構 - 所有持久性數據都存儲在數據庫中。然後,您安裝多個Web服務器,將數據庫服務器移至單獨的計算機,並在緩存逆向代理後面運行整個事件。要添加更多容量,請添加更多機器。

0

你或許應該做但現有的回答這個問題,一些搜索...

  • APC的指令緩存
  • 的Memcached的對象存儲(以減少數據庫查詢的次數)
  • 檢查/優化緩慢的SQL查詢
  • 衡量並找到瓶頸
  • 不要依賴(緩慢)每個網頁加載等的Web服務等
1

我會說一般性問題。嘗試網上尋找優化調度提示...

幾個參數涉及:

  • I/O訪問(使用了很多 - file_exists,is_file費用)
  • 數據庫訪問(優化查詢,使用存儲程序,檢查你的數據庫高速緩存)
  • 使用操作碼緩存(如APC)
  • 壓縮輸出
  • 服務JS/CSS微細化以及壓縮(使用子域它們傳遞到BR owser)
  • 使用內存緩存來緩存數據到內存中以便快速訪問

可以使用基準測試工具前和優化後,來測試您的環境。

嘗試使用apache bench。

1

文件大小。

一個500 KB的文件需要較長的時間下載一個300 KB的文件。因此,儘可能優化和裁剪。

Accelators

自我解釋的:List of PHP accelerators

Server升級

雖然這要花錢,有很多流量處理的時候,就會對影響有多快.PHP文件獲取進程以及將數據發送給用戶的速度有多快。 雖然有其他(免費)方法可以提高速度,但我不推薦這樣做。

不要用戶外部資源

如果要鏈接的一些圖像低谷其他網站,下載的速度也不會在你的控制。相反,如果您計劃使用其他人的圖像,請首先將它們下載到您自己的服務器上(或將它們上傳到您自己的提供商)並以這種方式加載它們。

審查和改善你的代碼

找到捷徑,刪除不必要的代碼,刪除未使用的變量,重用他人等

還有其他的方法,但我相信上述信息對最影響你的速度

+0

您應該補充說明您正在討論第一點中發送的HTML代碼。PHP文件的大小並不重要(儘可能多)... – Franz 2009-11-28 19:43:56

0

雅虎在加速網頁方面獲得了一些good basic advice,其中很多都很容易實現。你也可以下載firefox for yslow + firebug;他們將有助於從客戶請求角度指出可能的基本瓶頸。

其餘的建議在這裏是好的,所以我不會添加別的以外;在你100%確定你已經發現瓶頸之前,不要打擾優化任何代碼。我無法強調這一點。不要浪費時間調整代碼或實施新事物(即緩存),因爲「感覺」會使事情變得更快,只會影響真實的證據(即性能分析)。