Ajax的异步请求, 可以帮助我们节省时间吗?
问题的来源是这样的, 我正在做页面载入性能的优化, 我把原来的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 阅读(...) 评论(...) 编辑 收藏