2012-12-17 15 views
0

我正在考慮通過將渲染移動到客戶端來提高網站性能。目前的堆棧是:(router, sphinx, db) + HTML。我正在考慮將其更改爲:(router, sphinx, db) + JSONJSON或HTML:哪個輸出可以執行得更好?

所有的客戶端都運行i7處理器,他們不關心客戶端渲染性能。我們還有客戶端應用程序,可以連接到響應式JSON API(這不是討論客戶端與服務器端呈現)。

1)在服務器上的渲染佔用大約20%的時間(80%用於路由,sphinx,db)。我聽說輸出JSON需要花費大約一半的時間來輸出HTML,所以我認爲它會提高10%,而這10%可以用於數據處理。我對嗎? 2)我相信一臺服務器的改進10%意味着,爲了獲得與100臺物理服務器的大型應用程序相同的性能,我們需要減少10%的服務器:在這種情況下,90而不是100。它是否正確?

3)如何才能在Ruby中獲得最佳性能來輸出JSON而不是其他任何格式?

4)以日常情況爲例,如果我們輸出JSON而不是HTML,會有什麼不同?

回答

0

看到http://openmymind.net/2012/5/30/Client-Side-vs-Server-Side-Rendering/也許這將幫助你

最好的辦法,找出你具體情況是要實現它和測試。 您可以使用新的文物和谷歌分析(也可能是其他人)來查看客戶端的性能和渲染時間和體驗

+0

謝謝,但我已經閱讀該網頁的一切,但仍然沒有收集足夠的信息和參數的一個或另一個。同樣在這一點上,我不關心用戶體驗,我所關心的是將服務器負載降到最低。所以我需要知道我可以通過將東西移動到客戶端渲染中贏得多少。 –

1

1,2)可能是的,但可能有不計其數的因素,可能會導致性能增加比你想象的要少。就像,如果瓶頸是IO,並且HTML創建可能是CPU限制的,那麼減少CPU負載將只會讓CPU空閒更多。只有找到真正的方法是在運行並行請求處理時獲得可靠的基準,並獲得硬編碼。另外,花費時間開發客戶端渲染可能比僅支付更多的服務器容量更昂貴......摩爾定律仍然持有,對這樣的小改進做這種優化可能是不值得的開發成本...可能更好地將這些開發資源集中在增加收入的東西上,而不是試圖節省小額資金。

3)JSON生成可能使用本地庫,而HTML生成發生在Ruby腳本代碼中。在低級別操作中,本地代碼通常比解釋(而不是JIT編譯)代碼快1-2個數量級。它是更高層次的操作,差距越窄,所以如果「生成JSON」是高級操作,那麼從Ruby或編譯語言代碼調用它就同樣快。

4)好了,不知道我理解的問題,但看到回答1,2 ...

+0

根據我的經驗,從頭開發客戶端應用程序比開發服務器端應用程序更加簡單快捷,因此擁有正確技能的合適團隊不會造成問題。另外關於#3仍然不明白原生JSON庫更快還是Ruby腳本代碼? –

+0

@VytautasButkus關於開發成本,是的,它可能會或可能不是一個問題。如果您可以通過一次調用生成JSON數據,那麼在服務器端或客戶端生成HTML並不重要,但是如果您需要相同數量的代碼來生成JSON作爲HTML,那麼如果您有服務器端的JSON生成和客戶端的HTML生成。關於Ruby與本機,我更新了答案。 – hyde