我正在测量我网站的页面加载时间。我使用了Python requests.get(url)
方法,偶尔会给我这么大的响应时间(12秒以上)。但是当我尝试使用PowerShell Invoke-WebRequest -Uri
时,它永远不会超过1秒。
我想知道这两种方法之间的区别是什么,最好的方法是什么。
的Python:
r = requests.get(url)
r.elapsed.total_seconds()
的PowerShell:
$result1 = Measure-Command { $request = Invoke-WebRequest -Uri $url }
$result1.TotalMilliseconds
答案 0 :(得分:1)
我确实尝试过google.com
import sys, os, re, shlex, urllib, subprocess
cmd = 'dig -x %s @192.1.1.1' % sys.argv[1]
proc = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE)
out, err = proc.communicate()
sys.stdout = open("/tmp/test.txt", "w")
print(out)
sys.stdout.close()
635是结果
我尝试了一种不同的执行时间方法:
$result1 = Measure-Command { $request = Invoke-WebRequest -Uri "http://google.com" }
$result1.TotalMilliseconds
结果:0.4560821056365967秒
我尝试使用print(r.elapsed.total_seconds())也有类似的结果
import requests
import time
start = time.time()
r = requests.get("http://google.com")
print(" %s seconds" % (time.time() - start))
我没有发现你所说的剧烈差异,并且在随后的执行中,这些值非常相似
答案 1 :(得分:0)
在Windows中有一个称为dns缓存的东西,当您模拟对URL
的调用时,powershell将使用它们。
示例:假设x.company.com
是您要命中的URL。当您使用invoke-webrequest时,它将解析dns缓存中的地址。
刷新缓存并查看区别。您会在同一时间看到Invoke-webrequest
和python的request.get(url)