|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 liu-aguang 于 2015-7-17 17:57 编辑
直接上两个附件.两附件中代码结构一样. 想聚焦在实现"并行+持久连接"的VBA代码结构,代码并没有进行容错处理.请同志们指出代码中可能的潜在问题.
XMLHTTP并行.rar
(27.18 KB, 下载次数: 173)
XMLHTTP并行 持久连接.rar
(30.05 KB, 下载次数: 192)
说明:
一. 测试中可能遇到的问题
1. 首次运行时,无论何种连接方式速度会慢许多,原因有:
...... 各连接需要首先解析DNS,即要向远程DNS主机查询IP. 解析出的IP会在电脑缓存中保存,所以第二次以后,会省下这个时间.
......用XMLHTTP方式, 它自带缓存. 第二次执行时,只要页面在生存期内,请求页面不会去远程服务器索取,而直接读缓存内容.
2. 如果在工作表中, 修改并发连接数为1, 这时相当于OPEN的第三个参数选择False的效果.
3. 不要试图通过拷贝代码的方式, 把类模块中代码拷贝到其它工作薄来测试. 如果需要在其它工作薄测试,请把附件工作薄中的类模块导出,然后导入其它工作薄.
二. 关于串行, 并行和持久连接
1. 持久连接与非持久连接
非持久连接方式. 每取回一个页面之前,首先建立一个连接, 取回后,立即断开连接.
持久连接方式在取回页面后, 客/服双方连接并不会断开,下一个请求可以重用.这种方式可以提高取回复合页面的效率.
HTTP /1.0默认是非持久连接方式, 欲转换为持久连接,需要在头部增加Connection:Keep-Alive. Http /1.1默认是持久连接的.
如果客户端和服务器其中一方设置Connection: Close, 或某个中间设备不支持Connection头部,都不可能实现持久连接.
在上面第一个附件中的网站服务器的Connection设置为Close,所以即使每个连接的IP一样,也不可能实现持久连接.
2. 持久连接或非持久连接是串行实现HTTP事务的.
所谓串行, 即是每完成一个事务(一个页面取回结束),才能够重新发送请求. 这种方式可能带来的问题是:
......浪费带宽. 即使你有20M的带宽, 也只有让一个也许只有几个K的数据传送完后,才可以进行下一次请求.
......在多页面的下载中, 如果中途遇到一个打开很困难的网页,那么你除了等待它慢慢完成外,其它什么事也做不成.
3. 并行连接
HTTP连接是由操作系统控制的, 它允许同时进行多个连接. 且并发操作.这样多数情形下,可以提高多页面下载的速度.
但并行连接太多也不是什么好事:
.......违反社会道德. 可以想像服务器会有多累. 并且用户间相互竞争的结果,谁也不得到好处.所以HTTP协议中规定只能并行2个,而现实中各种浏览器一般在2-8个之间.IE8在宽带时为4个.
.......由于每一个新的连接在建立时会消费一定软硬资源, 并行连接太多可能导致电脑性能急剧下降,从而得不偿失.
.......连接存在一个慢启动机制. 在连接刚建立时,传输速度会很慢,依次传输成功后,速度才会渐渐提升. 也就是说开始有一个速度"调谐"过程. 太多并行连接也就意为着每次都在使用慢传送.
.......如果带宽受限, 太多并行连接对带宽的争夺会导致每连接都十分缓慢.
.......多数网站会判断为攻击,封你IP!
4.适量的并行+持久连接-------理想的实现方式. 抓包可看出IE是按这种方式组织的.
|
|