最晚回到宿舍,室友在做Web开发,隧溜过去瞅瞅,发现室友在调试代码,问之,室友原来卡在了一个加载数据显示的地方。问:100万条记录如何能以最高效率呈现在网页上,保持良好的浏览效果?在跟室友交流的过程中得知室友第一次把所有数据从服务器读取并加载到浏览器页面的时候势必会导致浏览器负载过大而卡机,通过改良,打算通过分页加载的方式,分次向服务器请求,一次请求顺利执行完成之后紧接着下一次,结果效果依旧不好,滚动条滚动过程中缓滞时间过长,浏览效果太差。后来从用户需求出发,改良为先进行一次请求,加载一定的数据量供用户浏览,然后根据用户的需求为先来决定要不要继续发送请求,毕竟用户每次能看到的也就浏览器那么大范围内的数据,这样其实隐藏了后台的请求方式,但是这样仍然有一定的弊端,执行效率不高,遇到没耐心的用户还嫌弃这玩意还得依赖我想不想要?其实小编有个想法,不过没得到实际验证,大概是这样的:可以参考移动端的ListView控件,当进入浏览器也面的时候(当滚动条往下拖动的时候),发送一次请求,加载一定的数据量;而当页面上端的数据移除显示窗口的时候,被回收如一个资源回收池,当想重新加载已经显示过的数据的时候就可以从资源回收池里重新读取,这样既不用一次或连续多次向服务器发送请求,又可以避免闲置的大量数据占据存储空间,以一种动态需求的优先方式来加载数据(概念上来说就是上下各有一个资源回收池)。不过小编觉得向服务器请求那部分始终需要优化,如果有朋友能有其他很好行之有效的方法欢迎交流。
以上只是一个小插曲吧,为了引出本文的正文内容,.到底我们在打开一个网页的过程中,短短1秒甚至更短的时间内发生了什么呢?
我们必须了解的是:一个HTTP请求的过程总结来说就是如下:
获得URL对应的IP地址---------------->浏览器服务器建立TCP/IP连接---------------->发送HTTP请求-------------------->服务器回送响应
来分析下以上四个步骤:(1)、为了获取正确的IP地址,要和无数个DNS服务器通信匹配,并且再得到了这个地址之后并没有直接的与服务器通信;
(2)、有了钥匙,还坑爹的你来我往握三次手,从而建立TCP/IP连接;
(3)、发送一堆的HTTP请求,网络带宽是有一定限度的,在当前的网页有很多后续的资源会随着主要的请求一并的发送给服务器,这时候如果请求量很大怎么办?这时候如果网络很拥堵怎么办?比如网络高峰时间段等;
(4)、终于等到服务器响应了,服务器回送的资源同样会受到带宽的影响,也会受到距离的影响,并且,你发送给服务器的请求并不是优先第一个被处理的,您需要排队的,这时候怎么办?
所以,短短的网页打开其实经历了IP检索、建立连接、发送请求、接收响应这一系列的内部细节处理,我们所要了解的就是如果针对这4个步骤进行良好的优化设置。