簡體   English   中英

Facebook通過iframe撥打AJAX電話嗎?

[英]Facebook makes their AJAX calls through iframe?

我想像Facebook一樣實現AJAX,所以我的網站也可以非常快。 經過數周的研究,並且也了解了bigPipe(不是ajax)。

因此,剩下的唯一一件事就是他們如何拉動其他請求(例如轉到頁面/個人資料),我打開了螢火蟲,並只是檢查那里的內容以查看我單擊其他個人資料后得到的內容。 但是問題是,firebug不會記錄任何這樣的請求,但是頁面仍然加載了AJAX並更改了HTML,firebug的確顯示了html的更改。

因此,我想知道,他們是否正在使用iframe阻止Firebug來查看請求或什么? 因為我想知道他們在每個請求上提取多少數據。 是整個頁面還是頁面的一部分,因為頁面布局也會根據頁面的不同而發生變化(例如:組,頁面,配置文件...)。

如果有專業人士對此提供反饋,我將不勝感激,因為我幾個星期都找不到它。

他們之所以使用iframe,通常是出於安全考慮。 iframe就像新標簽一樣,您的頁面與iframe facebook頁面之間沒有任何交流。 iframe具有自己的cookie和會話,因此實際上您需要像其他窗口一樣思考它,而不是自己頁面的一部分(除了輸出明顯顯示在頁面內的事實)。

就是說-chrome中的開發人員模式確實向您顯示了與iframe之間的通訊。

當我單擊Facebook上的用戶個人資料時,然后在Firebug中,我清楚地看到了對數據的請求是如何發生的,以及div的內容如何變化。 那么,問題是什么呢?

單擊某些用戶個人資料后,Facebook會執行以下GET請求:

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

該請求的響應是一個復雜的JS數據,其中包含構建新頁面的所有必要信息。 個人資料的朋友數組(帶有名稱,頭像縮略圖鏈接等),個人資料的最后一個條目數組(同樣,帶有縮略圖URL,注釋等)。

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

如果您了解bigPipe,那么您將能夠理解這一點,因為您已閱讀有關big pipe的內容,它們的響應如下所示:-

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

因此,如果他們使用ajax,則將無法使用bigpipe,這意味着如果他們使用ajax和一台服務器來刷新緩沖區,則在客戶端上不會產生任何影響,ajax oncomplete僅在接收到完整數據並關閉連接后才調用,否則話說,他們將無法使用那里最好的頁面速度技術之一,

但是,如果他們將iframe用於ajax,該怎么做,他們可以在iframe中使用其大管道,服務器將像這樣發送數據:-

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

因此服務器可以刷新緩沖區,並且只要緩沖區被清除,瀏覽器就可以獲取,這在ajax情況下是不可能的。

重要事項:-

他們僅在頁面URL更改時才使用iframe,這意味着當需要下載包含小頁面的新頁面時,對於其他請求(如某些彈出框或通知等),他們會簡單地發送ajax請求。

所有信息都是非官方的,實際上我正在對此進行研究,所以我發現,(我不是英語為母語的人,對您的拼寫和語法錯誤感到抱歉!)

通過谷歌瀏覽器查看人臉書,他們使用ajax請求文件返回JavaScript,然后將其用於對頁面進行任何更改。

我不知道Facebook為什么/是否使用IFRAME異步加載數據,但我想這背后沒有特殊原因。 我們也使用了IFRAME,但是現在因為項目更靈活,所以切換到XMLHttpRequest用於我們的項目。 也許IFRAME方法在(許多)較舊的瀏覽器上效果更好,但即使IE6也支持XMLHttpRequest。

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

當您單擊其他配置文件時,facebook不會使用ajax加載配置文件,您只需簡單地打開一個新鏈接即可獲取純舊的html ...,但也許我誤會了您

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM