2011-11-24 98 views
25

我有一個高流量的網站,我需要確保我的網站足夠快,以快速顯示我的網頁給每個人。PHP網站優化

我搜索在谷歌關於速度和優化許多文章和這裏是我的發現:

  • 緩存的頁面
  • 將其保存到磁盤

在內存中緩存的頁面:

這是非常快,但如果我需要改變我的網頁的內容,我必須從緩存中刪除它,並且然後將該文件重新保存在磁盤上。

保存到磁盤

這是很容易維護,但每次訪問頁面時我必須在磁盤上讀取。

我應該使用哪種方法?

+3

你應該添加更多關於你的網站的細節:os,server,cms?...etc – soju

+0

我使用apache + php + mysql + centos - 沒有cms或框架 – ana

+0

你有什麼類型的託管?共享?專用? –

回答

40

月& IDM是正確的,但這裏是如何:

緩存(頁或內容)對於性能來說非常重要。無論您的內容是靜態還是動態,您向數據庫或文件系統請求的最少調用都會更好。

,如果你需要運行動態內容,您可以使用PHP加速器:

我的建議是使用Alternative PHP Cache (APC)

下面是一些標杆:

What is the best PHP accelerator to use?

PHP Accelerators : APC vs Zend vs XCache with Zend Framework

Lighttpd – PHP Acceleration Benchmarks

要緩存內容,甚至可以使用以下頁面:MemcachedRedis

的Memcached: 免費&開源的,高性能的,分佈式內存對象緩存系統,通用的性質,但擬用於減少數據庫負載,加快動態Web應用程序。 Memcached是內存中的鍵值存儲,用於從數據庫調用,API調用或頁面呈現結果中爲任意數據(字符串,對象)創建小塊。

Redis Redis是一個開源的高級鍵值存儲。它通常被稱爲數據結構服務器,因爲密鑰可以包含字符串,哈希,列表,集合和有序集合。

兩者都是緩存內容或變量的非常好的工具。

下面是一些基準,你可以選擇你喜歡哪一個:

Redis vs Memcached

Redis vs Memcached

Redis VS Memcached (slightly better bench)

On Redis, Memcached, Speed, Benchmarks and The Toilet

ÿ您可以同時安裝也VarnishnginxG-Wan

光油: 光油是專爲內容較多的動態網站的HTTP加速器。與其他HTTP加速器相比,如開始生命作爲客戶端緩存的Squid或主要是原始服務器的Apache,Varnish從最初設計爲HTTP加速器。

nginx的 的nginx(發音?發動機-X?)是一個輕量級的,高性能的Web服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,下一個類似BSD許可證授權。它運行在Unix,Linux,BSD變體,Mac OS X,Solaris和Microsoft Windows上。

g-wan G-WAN是一個Web服務器,其ANSI C腳本和Key-Value存儲性能優於所有其他解決方案。

下面是一些基準,你可以選擇你喜歡哪一個:

Serving static files: a comparison between Apache, Nginx, Varnish and G-WAN

Web Server Performance Benchmarks

Nginx+Varnish compared to Nginx

Apache, Varnish, nginx and lighttpd

G-WAN vs Nginx

+6

我使用nginx + redis,它們超快速+1 – Gabriel

4

你有一個好主意,這是接近我自己。如果我有一個100%靜態的頁面,我將保存它的html版本並將其提供給用戶,而不是每次都重新生成內容。這在一些情況下可以同時保存mysql查詢和多個io操作。每次我進行一些更改時,我的管理界面都會簡單地刪除html文件並重新創建它。

此方法已被證明在我的服務器上快100倍左右。

+0

這是最好的緩存方法之一,只需重新創建靜態html頁面的變化。 –

+2

這個過程可以很容易地自動化。 –

1

我可以添加:

  • 緩存一切你能

  • 最小數量的包括

  • 使用加速器

請調查,是什麼讓你的網站慢。不要忘記YSlow和類似的東西,他們可以幫助你很多。

此外,如果你有大量計算,你可以寫PHP擴展他們,但我不認爲這是你的情況

3

網站性能的一個大問題是「您是否提供靜態頁面,或者您是否提供動態頁面?」。

靜態頁面

加快靜態頁面的最佳方法是對其進行緩存您的網站之外。如果你能負擔得起,從CDN(Akamai,Cotendo,Level3)提供服務。在這種情況下,流量不會觸及您的網站。有幾種方法可以控制緩存 - 從固定持續時間到標準的HTTP緩存指令。

即使您無法從CDN提供HTML,將圖片,JavaScript和其他靜態資產存儲在CDN上可以加速您的網站 - 您可以使用像Amazon這樣的雲服務。

如果您無法承受您的HTML的CDN,那麼您可以使用自己的緩存代理層,如Zeus建議的那樣。我用清漆取得了很好的效果。理想情況下,您可以在自己的硬件上運行緩存代理 - 但可以在現有服務器上運行它。

動態網頁

動態網頁更難緩存 - 那麼你需要把精力集中在自己的網頁儘可能高效。這基本上意味着尋找瓶頸 - 在大多數系統中,瓶頸是數據庫(但絕不總是)。

如果您確信自己的瓶頸是數據庫,那麼緩存選項有多種方法 - 您可以緩存HTML的「片段」,也可以緩存數據庫查詢。使用加速器有助於此 - 我不會從頭開始創建一個。這可能意味着重新設計(部分)您的應用程序。

2

您必須首先對您的網站進行簡介。

而不是瘋狂猜測一個人必須確定某些瓶頸,然後解決某個問題。

Cahing不是一顆銀子彈,也不是優化的同義詞。
有時緩存不適用(例如廣告),有時它不會有任何幫助,因爲網站緩慢的原因可能在某個不相關的位置。
您的網站可能會耗盡內存。所以,內存緩存會讓事情變得更糟。

我不能相信某人有一個高流量的網站,並說nmot一個先前的分析的話。你怎麼能知道它的內部結構? CPU負載,內存負載,磁盤I/O等。