我想实现像facebook这样的AJAX,所以我的网站也可以非常快。经过数周的研究并了解bigPipe(不是ajax)。
所以唯一剩下的就是他们如何提取其他请求,比如转到页面/个人资料,我打开了萤火虫,只是在那里查看我得到的东西,如果我点击不同的个人资料。但问题是,firebug不记录任何此类请求,但仍然页面加载了AJAX并更改了HTML,firebug确实显示了对html的更改。
所以我想知道,如果他们使用iframe阻止firebug来查看请求或者什么?因为我想知道他们在每个请求上提取了多少数据。它是完整页面还是仅页面的一部分,因为页面布局也会发生变化,具体取决于页面(例如:组,页面,配置文件......)。
如果专业人士对此提出一些反馈意见,我将非常感激,因为我无法在任何地方找到它几周。
答案 0 :(得分:2)
他们使用iframe的原因,通常是它的安全性。 iframe就像新标签一样,您的网页与iframe facebook页面之间没有通信。 iframe有自己的cookie和会话,所以你需要把它想象成另一个窗口,而不是你自己页面的一部分(除了输出显示在页面中的明显事实)。
那就是说 - Chrome中的开发者模式会向您显示与iframe之间的通信。
答案 1 :(得分:1)
当我在Facebook上点击用户的个人资料时,在Firebug中我清楚地看到了数据请求是如何发生的,以及div的内容如何变化。 那么,问题是什么?
点击某个用户个人资料后,Facebook会按照GET请求进行操作:
http://www.facebook.com/ajax/hovercard/user.php?id=100000655044XXX&__a=1
此请求的响应是一个复杂的JS数据,其中包含构建新页面所需的所有信息。有一系列个人资料的朋友(包括姓名,头像缩略图链接等),个人资料最后一个条目的数组(同样,还有缩略图网址,注释等)。
没有魔法,没有代码隐藏或混淆等。 =)
答案 2 :(得分:0)
通过谷歌chromes检查员查看脸书,他们使用ajax请求文件返回javascript,然后用于对页面进行任何更改。
答案 3 :(得分:0)
我不知道为什么/ Facebook使用IFRAME来异步加载数据,但我猜这背后没有特殊原因。我们也使用了IFRAME,但现在为我们的项目切换到XMLHttpRequest,因为它更灵活。也许IFRAME方法在(很多)旧浏览器上运行得更好,但即使是IE6也支持XMLHttpRequest。
无论如何,我确信在使用IFRAME时没有性能优势。如果您需要快速异步数据加载来动态更新您的页面,请使用XMLHttpRequest,因为任何现代浏览器都支持它,并且它可以像HTTP一样快。
答案 4 :(得分:0)
如果您了解bigPipe,那么您将能够理解, 正如你所读到的关于大管道的反应看起来像这样: -
<script type="text/javascript"> bigpipe.onPageArrive({ 'css' : '', '__html' : ' ' }); </script>
因此,如果他们ajax然后他们将无法使用bigpipe,意味着如果他们使用ajax和一个服务器他们刷新缓冲区,在客户端将没有效果,ajax oncomplete只会在收到完整数据和连接关闭时调用,换句话说,他们将无法使用他们最好的页面速度技术,
但如果他们为ajax使用iframe,这点,他们可以在iframe中使用他们的bigpipe,服务器会发送这样的数据: -
<script type="text/javascript"> parent.bigpipe.onPageArrive({ 'some' : 'some' });
所以服务器可以刷新缓冲区,一旦缓冲区清除,浏览器就会得到,这在ajax情况下是不可能的。
重要: -
他们仅在页面网址更改时使用iframe,意味着需要下载包含小网页的新网页时,对于其他请求(如弹出框或通知等),他们只需发送ajax请求。
所有信息都是非官方的,实际上我正在研究这个,所以我发现, (我不是母语为英语的人,对于拼写错误和语法错误感到抱歉!)
答案 5 :(得分:-2)
当您点击不同的个人资料时,Facebook不会使用ajax来加载个人资料 你简单地打开一个新的链接普通的旧HTML ...但也许我误解了你