2010-12-13 48 views
2

我需要編寫一個腳本,它需要一個鏈接並解析鏈接頁面的HTML,以拉取標題和其他一些數據,如可能的簡短描述,就像鏈接到Facebook上的某些內容時一樣。使用PHP解析服務器上的HTML還是使用JavaScript解析HTML的最終用戶?

當用戶添加一個鏈接到該網站,所以可以看到命中一個體面的數量,當客戶端啓動網站將會被調用。

我很好奇,如果我應該這樣做在服務器端使用PHP或使用JavaScript終端用戶側?我一直在編寫邏輯,試圖找出標記的哪些區域充滿了潛在的內容,這讓我懷疑如果我繼續使用PHP,負載是否太多。

客戶端具有隻是一個體面的Web服務器和我擔心解析/分析HTML頁面可能太多負荷,我們能做到這一點的Javascript和農場出來給用戶添加的鏈接。

任何有關此事的建議或想法都會很棒。謝謝。

編輯:此數據不會直接進入數據庫,它是用來幫助通過自動填充其鏈接的描述仍然通過我的定期審覈去被存儲到數據庫之前用戶。

+2

評論,而不是回答,因爲這是意見:如果「負荷」是太多PHP腳本在服務器上,它可能會在客戶端上表現得更糟。考慮到你無法預測客戶端的環境或資源,並且我會整天通過JavaScript訪問PHP。 – Stephen 2010-12-13 21:09:59

+0

@Stephen - 當PHP被編譯成字節碼時,它的運行速度比JS快得多。另外,JS關閉的瀏覽器比例很小(非常小)。 – Bojangles 2010-12-13 21:33:36

+0

除了您的php代碼在所有客戶端的單個服務器上運行外,您的js可以分別在每個客戶端上運行 – 2010-12-13 21:38:24

回答

5

嗯,這很簡單,因爲從客戶端純粹使用JavaScript來執行此操作僅僅是簡單的,因爲same origin policy並不是一個選項。

解析HTML並不是那麼重的任務,你應該在PHP中做得很好。

+0

我不認爲相同的原產地政策會有很多問題。我網站上的JS只會通過iframe或類似的方法拉入一頁標記,以便請求與常規頁面加載沒有區別。而最糟糕的情況是,用戶不會獲得預先的人口收益。 – gokujou 2010-12-13 22:19:34

+0

另外,是的。我擔心的是,在HTML上運行搜索的負載會對內容區域進行評分,以及對服務器的潛在請求會使系統陷入停滯狀態。 – gokujou 2010-12-13 22:23:50

+0

另一個好處是JavaScript版本看起來不像我的服務器不斷向其他站點請求頁面。它來自用戶想要鏈接到該網站的瀏覽器。 – gokujou 2010-12-13 22:28:29

0

我會通過javascript卸載這對最終用戶,向監聽器,你可以把它綁定到服務器。的原因很簡單:

  • 這是一個輔助的前端而不是後端(值不存儲或直接操作在後端。)
  • 負載更好傳遍比定位於你的服務器,如果最終用戶只需要拉動1個url而服務器拉動數千個,那麼你也可以在這裏提供更好的用戶體驗。
  • 在前端處理還可以減少惡意代碼直接在您的服務器上執行的可能性。
0

如果您考慮讓客戶真正得到並獲取一些隨機站點,請在Javascript中爲您解析它,獲取標題,描述和其他數據,然後在表單中爲您提交它,表單的提交時間將成爲用戶訪問該網頁的連接速度的人質,以及用於解析數據的任何開銷(可能微乎其微)。如果你使用cURL來做那個服務器端,那麼命中將會解析你所需要的文檔。最好的速度解決方案可能是讓用戶輸入URL,用PHP重新獲得它,讓PHP把它交給一個Perl腳本(它有一些快速的DOM解析器),併爲PERL腳本獲取所需的數據。從個人經驗來看,Perl腳本整天表現優於cURL,並且cURL通常優於JavaScript。AJAX獲得的回報遠大於家庭用戶。

+0

用於提取數據的JS將在稍後完成,以便它不會掛起用戶的表單。我想做的最後一件事是讓一個知道他們想要的東西的用戶放慢速度。 – gokujou 2010-12-13 22:22:12

0

你可以做兩個....

1)PHP:

  • 結賬HTML DOM Parser,可幫助
  • 或使用PHP捲曲,然後用DOM文檔解析

2)的JavaScript:

  • 你不不必打擾你的服務器(親)
  • 解析內容與jQuery是容易的(原)
  • 你需要處理跨域策略(缺點)
+0

我知道我可以做到這一點,只是想弄清楚哪些對用戶體驗會更好。不要放慢我的服務器,如果處理這些將是一個大負載。 – gokujou 2010-12-13 22:20:33