2011-03-24 10 views
0

我想實現類似Facebook的AJAX,所以我的網站也可以非常快。經過數週的研究並瞭解bigPipe(這不是ajax)。Facebook通過iframe使他們的AJAX調用?

那麼剩下的唯一的事情是,他們是如何拉動其他請求喜歡去頁/個人資料,我打開了螢火蟲和只是檢查的東西有什麼我得到的,如果我點擊不同的配置文件。但問題是,螢火蟲doen'tt記錄任何這樣的要求,但仍然頁面載入AJAX並更改HTML,螢火蟲確實顯示在html上的變化。

所以我想知道,如果他們使用iframe來阻止螢火蟲看到請求還是什麼?因爲我想知道他們在每個請求上提供了多少數據。它是完整頁面還是頁面的一部分,因爲頁面佈局也會根據頁面的不同而變化(例如:組,頁面,配置文件等)。

我會很感激,如果親給出了一些這方面的反饋意見,因爲我無法找到任何地方好幾個星期。

+2

FB在很大程度上依賴於iframe的實施。他們如何呈現第三方應用程序的簡單視圖是一個很好的開始。大多數情況下它們速度很快,但是由於Akamai加快了他們數據的可用性:D – Shouvik 2011-03-24 09:32:23

+0

我發現了一些東西:如果你進入個人資料頁面,它會轉到以下網址http://www.facebook.com/hillary.schwei? __a = 15&ajaxpipe = 1&quickling [version] = 357399; 0並且得到這個http://pastie.org/1708275(這不是完整的代碼,導致了pastie限制),但是它隱藏起來並且顯示未找到錯誤,如果你直接通過url。所以你必須儘早停止腳本,因爲它更進一步。無論如何,我認爲它可能只是與ajax一起使用bigPipe,只是在iframe中獲取數據。如果有人發現其他東西或知道的東西,請分享... – Basit 2011-03-24 14:16:21

回答

2

他們使用iframe的原因,通常是它的安全性。 iframes就像新的標籤,你的頁面和iframe facebook頁面之間沒有溝通。 iframe擁有自己的cookie和會話,所以你真的需要將它看作另一個窗口而不是你自己頁面的一部分(除了明顯的事實,即輸出顯示在你的頁面中)。

也就是說 - 在Chrome開發模式不告訴你的通信,並從IFRAME。

+0

Oh ok ,我也在想,但是你看到請求頁面的數據在開發者模式(網絡選項卡)中是空的。如果您嘗試在瀏覽器中打開相同的網址,數據會快速顯示,然後隱藏未發現的錯誤,但如果您快速停止重定向,則會看到數據被抓取。嘗試它,請讓我知道爲什麼它這樣做..謝謝.. – Basit 2011-04-01 14:32:38

+0

最有可能的是因爲它檢查,看它是否加載在iframe中。我想你在這裏瘋狂追逐。 – 2011-04-01 14:56:57

+0

另外,facebook會希望通過阻止您在另一個窗口中打開iframe頁面來保護其品牌,而不會弄亂品牌。我真的無法想象他們會在iframe中看到什麼,因爲它無法保護。儘管你的臉書按鈕看起來像所有其他臉書按鈕一樣,但他們仍然很謹慎。 – 2011-04-01 15:02:02

-2

當你點擊不同的配置文件,Facebook並沒有使用AJAX加載配置文件 你簡單的開一個新的鏈接普通的老HTML ...但也許我誤解你了

+0

Facebook呈現頁面,內部iframes。看一看,打開聊天窗口,然後點擊個人資料鏈接或其他內容。你會注意到Facebook的框架從來沒有真正消失,聊天也沒有。只有內部的畫布內容被刷新...... – Shouvik 2011-03-24 09:36:57

0

通過谷歌鉻合金望着臉書他們使用ajax檢查器來請求文件返回javascript,然後用於對頁面進行任何更改。

+0

雖然如此,但是我有時會注意到有這個fb保護的標籤,它實際上隱藏了iframe的HTML。我不知道它是否只是我,但似乎他們可以隱藏腳本... =/ – Shouvik 2011-03-24 09:35:27

+0

嘗試刪除隱藏的iframe節點,它不會對功能有任何影響,所以我不認爲這就是他們做Ajax的區域上。測試它。 – Basit 2011-03-24 13:40:54

1

當我點擊用戶在Facebook的個人資料,然後在Firebug我清楚地看到對數據的請求是如何發生的,以及如何DIV內容變化。 那麼,有什麼問題呢?

點擊一些用戶的個人資料後,Facebook並以下GET請求:

http://www.facebook.com/ajax/hovercard/user.php?id=100000655044XXX&__a=1 

這個請求的響應是一個複雜的JS數據,其中包含所有必要的信息來建立一個新的頁面。有一個配置文件的朋友陣列(名稱,頭像縮略圖鏈接等),配置文件的最後一個條目陣列(再次,縮略圖URL,註釋等)。

沒有魔法,沒有類似代碼隱藏或混淆的東西。 =)

+0

以及嘗試點擊一些頁面或一些pofile,你會看到數據不顯示,如果你使用chrome ..試試吧。 – Basit 2011-03-31 10:02:58

+1

@Basit問題是關於FireBug。不是? _「但問題是,** firebug ** doen'tt記錄任何這樣的請求,但仍然頁面得到加載與AJAX和HTML也改變,**螢火蟲**確實顯示在html上的變化。」#: – 2011-03-31 18:59:50

0

我不知道爲什麼/閹Facebook的使用iframe來asynchroneously負載數據,但我想有一個背後沒有特殊原因。我們也使用了IFRAME,但現在爲我們的項目切換到XMLHttpRequest,因爲它更靈活。也許IFRAME方法在(很多)較舊的瀏覽器上工作得更好,但即使IE6也支持XMLHttpRequest。

無論如何,我確定在使用IFRAME時沒有性能優勢。如果您需要快速異步數據加載來動態更新頁面,請使用XMLHttpRequest,因爲任何現代瀏覽器都支持它,並且HTTP的速度很快。

0

如果你知道bigPipe,那麼你就能夠明白, 正如您已經閱讀大煙槍他們的反應是這樣的: -

<script type="text/javascript"> bigpipe.onPageArrive({ 'css' : '', '__html' : ' ' }); </script> 

所以,如果他們阿賈克斯那麼他們將無法使用bigpipe,意思是如果他們使用ajax和一個服務器他們沖洗緩衝區,在客戶端上將沒有任何影響,只有完成數據接收和連接關閉時,ajax oncomplete纔會調用,換句話說,他們將無法使用其中的一個那裏最好的頁面速度技術,

但如果他們使用iframe的ajax,這使得p oint ,,他們可以使用bigpipe在iframe和服務器將發送數據是這樣的: -

<script type="text/javascript"> parent.bigpipe.onPageArrive({ 'some' : 'some' }); 

使服務器可以刷新緩衝區,一旦緩衝區將清零,瀏覽器將得到的是,在阿賈克斯那是不可能的案件。

重要: -

他們使用iframe只有當頁面的URL變化,意味着當需要一個新的頁面下載包含小頁,像一些彈出框或通知等,他們簡單的發送Ajax請求其他請求。

所有信息都是非官方的,其實我是研究上,所以我發現, (我不是以英語爲母語,遺憾的拼寫和語法錯誤!)