2013-05-09 120 views
3

我使用JS腳本只使用index.html生成整個站點。從客戶端JavaScript生成的站點生成靜態HTML

的JS基於經由服務器側API接收JSON數據創建HTML內容。這非常適合客戶端,並且使網站的加載速度和交互速度非常快,但是有一個障礙......當抓取工具來索引頁面時,它會看到一個空白頁面。

顯而易見的解決方案是爲所有頁面的靜態版本提供一個XML站點地圖。問題是...如何生成每個頁面的靜態版本,當他們只生成客戶端和所有的邏輯和模板是客戶端?

這不是一個新問題。我敢肯定,任何人產生動態網頁客戶端已經打到這個問題,並解決它,但我認爲我會問dev的社區潛水前,並試圖解決這個問題。

+0

當你說它是工作的客戶端你的意思是說,頁面不在服務器,當你把相同的頁面在服務器dosent工作嗎?api服務器有另一個域名,服務器你在哪裏主持頁面? – 2013-05-09 20:34:52

+0

@Rolando網站上的HTML(除了index.html,它只是一個帶有腳本標籤以加載JavaScript應用的主體)都是通過JavaScript生成的。如果你沒有使用任何JavaScript加載index.html文件,它將是一個空白 – 2013-05-09 20:38:05

+0

該網站的工作原理?但谷歌ajax爬蟲不知道? – 2013-05-09 20:43:27

回答

1

我已經成功地生成使用PhantomJS和捕獲頁面後,HTML輸出從客戶端輸出靜態頁面和所有的JS完成加載/執行。這種方法比我想要的要慢,並且不可能很好地擴展,但這是目前我能想到的唯一選擇。

該網站每天接收的頁面瀏覽量超過10,000次,擁有超過8,000個唯一身份訪問者,因此在創建新評論/帖子時定期更新頁面,然後將這些更改添加到隊列中,以便在單獨的服務器中獲取進程以生成靜態與幻影的頁面。

我能想到的唯一方法是創建一個Node.js進程,該進程使用相同的jsRender庫並根據某些數據從模板文件構建HTML輸出,但這樣做會很耗時並且不會生成與動態網站創建的完全相同的輸出。谷歌可能會對我服務的靜態頁面皺眉,這些頁面並不真正代表「普通」訪問者可以看到的動態版本。

這似乎是一個無法解決的問題。我可以在服務器端完全生成頁面,或者爬網程序不能爲頁面建立索引。 :(