“为什么我的代码很慢?”是一个很难回答的问题。基本上有无数可能的原因。我可能无法回答这个问题,但我可以提供一些建议,希望能帮助您自己回答。
有几十个问题要问...您使用的是哪种硬件?你有什么样的网络/互联网连接?只是第一个请求慢,还是所有请求都慢?只是对一种类型的请求(每天、每周、每月)或所有请求的调用速度很慢?等等等等。
您表示总体请求时间约为 1800 毫秒,但正如您所指出的,在处理该请求期间发生了很多事情。根据我的经验,通常最好的找出方法之一是添加一些计时代码来缩小缓慢的范围。
例如,一种快速而肮脏的方法是使用 python 时间模块。我很快在每周贡献方法中添加了一些代码:
import time
# [...]
@app.route("/contributions/weekly/<uname>")
def contributionsWeekly(uname):
before = time.time()
rects = getContributionsElement(uname)
after = time.time()
timeToGetContribs = after - before
# [...]
print(' timeToGetContribs: ' + str(timeToGetContribs))
print('timeToIterateRects: ' + str(timeToIterateRects))
print(' timeToBuildJson: ' + str(timeToBuildJson))
在本地运行此代码产生以下结果:
timeToGetContribs: 0.8678717613220215
timeToIterateRects: 0.011543750762939453
timeToBuildJson: 1.5020370483398438e-05
(注意最后一次结束时的e-05...时间非常短)。
从这些结果中,我们知道获取贡献的时间占据了完整请求的大部分时间。现在我们可以深入研究该方法,以尝试进一步隔离最耗时的部分。下一组结果显示:
timeToOpenUrl: 0.5734567642211914
timeToInstantiateSoup: 0.3690469264984131
timeToFindRects: 0.0023255348205566406
由此看来,大部分时间都花在了实际打开 URL 和检索 HTML 上(这意味着可能存在网络延迟、互联网连接速度、GitHub 服务器响应时间等问题)。其次是实例化 BeautifulSoup 解析器所花费的时间。
对所有这些具体数字持保留态度。这些在我的硬件(12 岁的 PC)和我的本地互联网连接上。在您的系统上,数字可能会有所不同,甚至可能有很大不同。关键是,跟踪缓慢的最佳方法是通过一些基本的故障排除步骤来确定出现缓慢的位置。确定问题区域后,您可能可以搜索更具体的答案,或提出更有针对性的问题。