2010-02-19 18 views
3

我目前在提高我的的Grails網站性能並按照我在互聯網上發現了許多最佳實踐的過程中,我現在需要做重構我的代碼前兩種解決方案之間做出一個決定是否值得在單獨的域/服務器中使用靜態資源?

  • 解決方案1 ​​:將我的所有靜態資源(js,css,圖像)導出到單獨的域和服務器(如SO團隊已完成 - 請參閱here)。

  • 解決方案2:只要讓我的資源投入到我的WAR文件,並配置阿帕奇充當反向/緩存代理,這樣進入的請求/圖像/ CSS,/ JS等都是緩存由apache。

什麼你推薦,什麼是利弊

PS:關於解決方案1,有沒有專門針對靜態內容的網站託管服務提供商?

謝謝。

回答

1

如果您已經進行了配置並確定由瀏覽器排隊下載導致的延遲是網站性能的主要因素,那麼您應該只進行此操作。如果靜態資源在幾毫秒內加載,但在服務器必須到達數據庫之後,HTML本身需要3秒才能下載......然後,提高這幾個毫秒將不會有太大的好處。

+1

+1:一致,聽起來像不成熟的優化。 – 2010-02-19 22:45:46

+0

我已經確定下載我的靜態資源是一個瓶頸。那就是說,你建議什麼解決方案,爲什麼? – fabien7474 2010-02-19 23:04:20

+1

@OMG小馬:這真的不是過早的優化!首先,如果我進行優化,這是因爲我已經確定了需求。其次,看看這篇文章(http://www.yuiblog.com/blog/2006/11/28/performance-research-part-1/),你會發現優化的第一步是減少HTTP請求,因爲40%的用戶是第一用戶,並且不使用瀏覽器緩存。因此,你應該首先處理你的靜態內容,可以優化和捆綁 – fabien7474 2010-02-19 23:08:18

1

解決方案一是更好的解決方案。如果你還沒有,你應該諮詢YSlow performance guide,因爲它會更深入地討論這個問題。

通常瀏覽器會以並行方式加載頁面資源。但是,瀏覽器會限制對特定域的請求數量,因此如果您的所有資源都位於該域中,則其中一些資源將會阻塞,直到前一個並行請求完成。將資源分割到不同的域有助於解決這個瓶頸問題,因爲您可以同時有多個請求前往images.yourdomain.comflash.yourdomain.com。構建應用程序以便從一開始就利用這種類型的資源分離方式,這可能會在以後帶來好處,即使您最初都是從單個服務器爲它們提供服務。

您可以將解決方案2的全部作爲解決方案1的一部分實施,即。在多個域中緩存。一般來說,從#2開始比較便宜,因爲您可以繼續從現有服務器提供服務,但將它們配置爲進行緩存。

一旦大流量啓動,你打了,你真的想優化性能,分裂你的域名可以有所作爲。

0

這取決於您的頁面/頁面需要多少資源。請記住,瀏覽器一次只能從單個服務器進行有限數量的連接。對於IE 8,這是每次2個。如果您有40個資源,則一次只能檢索2個資源。將資源分散到多個子域中可以大大提高網站上的網頁加載速度。

您可以在您的DNS中設置多個CNAME記錄,這些記錄都指向相同的物理服務器,並大大提高資源加載速度。

還可以查看Google PageSpeed瞭解有關加快頁面加載速度的其他建議。

+0

嗨傑弗裏。我不確定增加CNAME的數量會不會加快您的頁面速度。實際上,從我所讀的內容來看,至少需要2個域名才能達到4個域名。在您獲得顯着的性能下拉後。有關更多詳細信息,請參閱此文章:http://www.yuiblog.com/blog/2007/04/11/performance-research-part-4/ – fabien7474 2010-02-19 23:15:32

1

如果你還沒有使用它,我會看看ui-performance grails plugin。它實現了許多圍繞緩存,縮減和壓縮事物的最佳實踐。正如其他海報已經指出的那樣,我會確保你在做任何過於激烈的事情之前知道你的瓶頸在哪裏。

相關問題