2012-03-03 35 views
3

我正在研究Google Image Charts API服務的PHP包裝器。它支持來自多個域的服務圖像,例如:跨域傳播圖片下載的策略?

http://chart.googleapis.com 
http://0.chart.googleapis.com 
http://1.chart.googleapis.com 
... 

數字範圍是0-9,因此共有11個域可用。

我想自動追蹤生成的圖像的數量並旋轉域以在瀏覽器中獲得最佳性能。然而谷歌本身只vaguely recommends

...你應該只當加載或許五個或更多的圖表在頁面上需要這個。

  • 應該是什麼我的策略是什麼?我應該只更改每個N圖像的域名,並且在現代瀏覽器的情況下,N值會有多好?

  • 是否有點重用域而不是引入新域(有助於保存DNS查找)?

我沒有考慮到圖像的具體數目 - 因爲這是開源的,可公開獲得的代碼,我想實現通用的解決方案,而不是優化我的特定需求。

回答

1

注意事項:

  • 是一個主機比其他的快?
  • 瀏覽器是否限制每個主機的連接?
  • 瀏覽器需要多長時間才能解析DNS名稱?

正如你想要這樣做一個組件,我建議你讓它能夠有多個策略來找到使用的主機名。這不僅可以讓你有不同的策略,而且可以對彼此進行測試。

另外,您可能希望添加對可以在將來在頁面上呈現數據的JavaScript庫的支持,因此無論如何您可能都希望保持模塊化。

變種:

  1. 選擇一個域名,並堅持下去,硬編碼:http://chart.googleapis.com
  2. 選擇一個域名了許多的,堅持下來:例如http://#.chart.googleapis.com
  3. 與2一樣,但在一些圖像後開始旋轉名稱。
  4. 與3一樣,但在頁面末尾添加一些javascript塊,以解決後臺丟失主機名的DNS問題,以便爲下一個請求緩存(提供目前未使用的主機名數據)。

然後你可以讓你的庫可配置,所以你不需要在代碼中強化代碼的值,但你提供的默認配置。

然後,您可以將策略添加爲配置,以便實施的人員可以對其進行決策。

然後,您可以使組件提供從外部加載配置,因此,假設您創建Wordpress插件,插件可以存儲配置併爲插件用戶提供管理界面以更改設置。

由於配置已經包含遵循哪些策略已完全放棄責任組件的消費者,你可以更容易地在不同的網站或應用程序集成的不同使用情況的場景。

+0

在考慮(1)我會想象這些主機別名和性能相等(2)我知道瀏覽器做的限制,但不知道什麼是實際通用的限制由去(這是問題的一部分)3( )我認爲這將取決於環境而大幅波動,但可以肯定的是,它需要_some_(如在非零時間)來解決先前未知的域。 – Rarst 2012-03-03 20:45:49

+0

**編輯:**(1)聲音。 (2)根據每個主機名的RFC 2併發連接,瀏覽器通常會在當前執行更多和其他類型的連接,請參閱[並行化跨主機名下載](http://code.google.com/speed/page-speed/docs/rtt。 HTML#ParallelizeDownloads)。 (3)請參閱[最小化DNS查找](http://code.google.com/speed/page-speed/docs/rtt.html#MinimizeDNSLookups) – hakre 2012-03-03 21:30:12

+0

根據這些文章和您的答案,我使用了可配置的選項,默認爲每6個圖像更改一次域名,並只能通過3個域名輪換。 – Rarst 2012-03-04 12:44:56

0

我完全不明白旋轉域的請求。我猜這在您的瀏覽器可能一次只允許X給定域名打開請求的情況下有意義,因此如果您有10張圖片來自chart.googleapis.com,您可能需要等待第一個完成下載在開始接收第五個之前,依此類推。

與隨機旋轉域的問題是,那麼你打敗瀏覽器緩存完全。如果圖像是在1.chart.googleapis.com上從一個頁面加載,然後從7.chart.googleapis.com在下一頁加載時提供的,則緩存的圖表將失效,用戶需要等待請求,生成並重新下載。

我能想到的最好的解決方法以某種方式確定從算法來請求來自所述請求的域。如果它在某個函數中,可以以某種方式將參數md5,轉換爲整數,然後提供{$result % 10}.chart.googleapis.com中的圖像。

可能有點矯枉過正,但你至少可以保證一個給定的圖像將始終從同一個服務器提供服務。

+0

準確地說 - 這個想法是繞過連接限制,並使瀏覽器從不同域的paralles下載。我同意隨機似乎不是一個好主意。邏輯應該是持久的,以便以相同的順序生成的相同圖像每次都會得到相同的URL。校驗和是隨機的,並且讓它變得偶然,可能會讓事情變得更糟... 10個圖像分佈在10個域中可能沒有意義 - 從DNS查找中丟失可能比從域擴展中獲得更多。 – Rarst 2012-03-03 21:33:15

+0

是的。我認爲任何現代瀏覽器的默認都不會有低於4的併發請求限制,所以也許更好的方法是保留一個靜態計數器併爲一個域的前4個圖表提供服務,然後繼續通過這些域進行訪問。 – goldenapples 2012-03-03 21:41:37