rea*_*ers 29 javascript ajax html5 facebook pushstate
为了使IM客户端始终保持登录状态,在将文档插入文档之前,通过使用AJAX加载页面来避免整页加载.
但是,在Facebook AJAX请求期间,浏览器似乎明显加载; 重新加载按钮变为X,浏览器内置的进度指示器指示加载/等待等)
我已经能够成功实现基于AJAX的导航,但我的浏览器没有显示任何加载的指示(因为请求是异步的)Facebook如何做到这一点?
小智 25
当文档中存在正在加载的元素时,浏览器显示加载状态.Ajax请求完全来自JavaScript; 文档不受影响,因此不会触发加载状态.
另一方面,Facebook的大部分请求是通过<script>
在文档中插入标记,指向包含他们想要的数据的JavaScript文件来完成的.(基本上是JSONP,除了它们使用不同的格式.)浏览器将显示其加载状态,因为<script>
标记是文档中的卸载元素.
如果您不小心,此技术/ JSONP可能会使您的网站面临安全风险,因为允许跨站点请求.Facebook通过为每个资源生成随机URL来处理此问题,这些URL在初始页面加载时发送到浏览器.
Ali*_*guy 12
Facebook使用他们开发的名为Big Pipe的工具基本上将他们的网站流式传输到客户端.他们向客户端发送带有裸DOM的初始脚本标记,并且脚本异步加载页面上的模块 - 客户端在服务器获取模块2时呈现模块1的想法,因此改善了加载时间.
最重要的是,他们使用了一种称为长轮询的技术.使用HTTP 1.1,他们可以利用持久连接,而不必担心超时.呈现页面时,客户端脚本向Facebook发出AJAX请求,基本上"监听"事件.它将坐在那里听,直到事件发生.与此同时,浏览器似乎是"加载"数据.
当Facebook上的某个事件被触发时(比如有人评论你的墙贴),FB会将该响应发送回客户端以触发相应的回调(比如弹出一个小工具提示,让你知道评论)并立即发布向FB发送另一个请求以收听下一个事件.
归档时间: |
|
查看次数: |
5167 次 |
最近记录: |