Facebook如何在AJAX页面加载过程中显示浏览器加载进度
How does Facebook show browser loading progress during AJAX Page Loads?
为了让IM客户端始终登录,Facebook在将页面插入文档之前使用AJAX加载页面,从而避免了完整页面加载。
然而,在Facebook AJAX请求期间,浏览器似乎正在加载;重新加载按钮变为X,浏览器中内置的进度指示器指示加载/等待等)
我已经能够成功地实现基于AJAX的导航,但我的浏览器没有显示任何加载指示(因为请求是异步的)Facebook是如何做到的?
当文档中有一个元素正在加载时,浏览器会显示加载状态。Ajax请求完全来自JavaScript;文档不受影响,因此不会触发加载状态。
另一方面,Facebook的大多数请求都是通过在文档中插入<script>
标签来完成的,该标签指向包含他们想要的数据的JavaScript文件。(本质上是JSONP,只是它们使用不同的格式。)浏览器将显示其加载状态,因为<script>
标记是文档中的一个卸载元素。
如果您不小心,这种技术/JSONP可能会使您的站点面临安全风险,因为允许跨站点请求。Facebook通过为每个资源生成随机URL来处理这一问题,这些URL在初始页面加载时发送到浏览器。
Facebook使用他们开发的名为Big Pipe的工具,基本上将他们的网站分块流式传输到客户端。他们向客户端发送一个带有裸DOM的初始脚本标记,脚本异步地将模块加载到页面上——其想法是客户端呈现模块1,而服务器获取模块2,从而缩短加载时间。
除此之外,他们还使用了一种名为长轮询的技术。使用HTTP1.1,他们可以利用持久连接,而不必担心超时。当页面被呈现时,客户端脚本向Facebook发出AJAX请求,本质上是"监听"一个事件。它会坐在那里听,直到事件发生。与此同时,浏览器将显示为正在"加载"数据。
当Facebook端触发一个事件(比如有人对你的墙帖发表了评论)时,FB会将该响应发送回客户端,以启动相应的回调(比如弹出一个小工具提示,让你知道评论),并立即向FB发送另一个请求,以收听下一个事件。
Facebook在希望浏览器显示"繁忙"状态时使用iframe进行通信。您可以通过在父窗口中具有iframe调用函数来使用iframe进行跨域ajax。
- 使用jQuery预加载目录中的所有图像
- 如何在不使用require语句的情况下使用webpack加载目录中的所有文件
- 在OfficeJS Office加载项中标识活动的Office应用程序
- 如何从vb.net中的页面加载事件中调用特定的javascript函数
- proxychains可以't加载过程
- Codeigniter JQuery在JQuery.get请求后动态加载视图中的数据
- ng-show内容在页面加载过程中闪烁,尽管它不是真实的,并且ng-cloak不适用于FF
- FileReader加载端中循环变量的值
- 将 POST 页面加载到
- 将 var 的值应用于加载页面中的另一个变量
- 如何在boomrang页面加载时间中添加ajax执行时间
- Backbone Js加载部件中的应用程序
- 警告:字体加载过程中出错:轨道上的PDFJS超过了最大调用堆栈大小错误
- 预加载图像,使其不会't在加载过程中重新调整大小
- 我的网站加载缓慢且挂起,因为实时加载过程被添加到我的 index.hml 中
- 加载过程中附加 CSS 类问题
- 让 HTML5 MP3 播放器在页面加载过程中持续存在
- 在页面加载过程中,在不重定向到其他页面的情况下,在同一页面上打印距离结果
- Facebook如何在AJAX页面加载过程中显示浏览器加载进度
- IE在页面加载过程中失去焦点或落在所有窗口后面