我正在尝试制作一个能够从网站上读取网页的程序。要读取的数据仅为18kb。我有一个大学的wifi连接,速度非常快(2 mbps)并且有一个代理服务器正在运行。
当我尝试运行代码时:
import urllib
data=urllib.urlopen("http://www.google.com")
运行大约需要8到10秒(同样的链接在网络浏览器中打开得非常快)
然而,当我在其他互联网连接上运行相同的代码时,这个代码并不像大学的wifi那么快,代码会在不到一秒的时间内运行。
我很困惑,为什么它在wifi上速度较慢。这是因为代理服务器吗?但如果是因为这个原因,为什么同一个链接在浏览器中打开的时间会减少。
提前致谢
答案 0 :(得分:0)
作为一项常见功能,webBrowsers在他们自己的+校园基础设施(作为周边传输减少策略)可能会受益于缓存页面存储,因此不会等待与远程服务器页面相关的端到端传输延迟 - 描述检索。
与从远程服务器页面完全重新加载页面相比,缓存页面立即加载
以下关于删除缓存网页的评论:
虽然用户能够发布localhost缓存,但答案是讨论基于基础架构的缓存的园区/ ISP实践,这可以减少访问/骨干网络的整体流量,并且不受最终用户控制。< / p>
修改OP后,要包含明确的网址目标:
添加了您的测试与www.google.com的http发起的会话相反,您应该查看前向滚动的事务,这些事件恰好在本指令的“幕后”开始。 DNS解析(如果没有缓存)在browser / python中需要相同的时间,重定向握手,加密服务导入,加密密钥交换握手以及设置http S 所需的其他导入/处理-session是下一个隐藏的步骤,作为通用语言解释器的python必须导入/处理ad-hoc,而浏览器已经准备好作为专用软件继续进行。如果使用分析器(来自处理侧跟踪/定时)和/或网络嗅探器(来自传输侧跟踪/定时),您会看到更多详细信息。
答案 1 :(得分:0)
下载18kb文件并不能代表您的互联网连接速度。由于文件较小,我们一直在寻找有效的延迟。
启动urllib.urlopen("http://www.google.com")
将在幕后进行大量操作。举几个例子:
www.google.com
转换为IP 但是,为了解决您的问题,我建议您使用traceroute
(ICMP)和traceproto
来查看您,Google和两者之间的每个节点之间的延迟。例如:
$ traceroute google.com
traceroute to google.com (173.194.40.135), 30 hops max, 60 byte packets
1 par10s10-in-f7.1e100.net (173.194.40.135) 18.142 ms 18.116 ms 18.111 ms
但请注意,在网络通信中,您必须关注OSI model
的所有元素