Jackiesteed

www.github.com/jackiesteed

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

问题的来源是这样的, 我正在做页面载入性能的优化, 我把原来的4个同步执行的ajax请求改成了4个异步的.

但是不能仅仅这样做就ok了, 因为我要在这4个请求都结束之后, 做一次页面初始化.

解决方案是, 设计一个状态位count, 每次异步请求的回调函数完成后, 把count 累加1.

然后在最后一个完成的请求的回调函数中, 发现count==4, 那么就可以页面初始化.

 

改成异步之后, 我发现加载速度快了不少.

但是js不是单线程的吗? 即使是进行了事件排队, 那么最终结算的时间不应该还是相等的吗?

虽然js是单线程的, 但是浏览器不是单线程的.

ajax的请求都是委托给浏览器去做的, 浏览器会开启一个新线程完成request.

而ajax的异步, 就是不阻塞的意思.

如果ajax同步执行, 那么浏览器就没有机会完成多线程效果.

ajax异步的时候, 启动一个请求之后, 不会阻塞后面的请求的启动.

这样, 就可以在浏览器层面开启多个线程, 其实可以理解为浏览器的多线程帮助我们提高了效率.

 

而利用浏览器的多线程下载来提高页面性能的例子也是比比皆是, 比如script 标签的 defer属性.

又比如, web组件分离的目的等等...

 

posted on 2014-01-20 15:52  Jackiesteed  阅读(316)  评论(0编辑  收藏  举报