如何加快Flask响应下载速度

时间:2017-05-14 23:05:48

标签: python performance networking flask download

我的前端Web应用程序在缓存的端点上调用我的python Flask API,并返回一个大约80,000行和1.7兆字节的JSON。

下载所有内容需要大约7.5秒的UI。 ui_loading_time

直接调用路径大约6.5秒需要Chrome。 enter image description here

我知道我可以拆分此端点以获得性能提升,但出于好奇,还有哪些其他很好的选项可以提高所有这些内容的下载速度?

到目前为止我能想到的选项:

1)压缩内容。但后来我必须在前端解压缩

2)使用像gRPC这样的东西

更多信息: 我的烧瓶服务器使用gevent的WSGIServer,端点代码如下。 PROJECT_DATA_CACHE是已经返回的Jsonified数据:

@blueprint_2.route("/projects")
def getInitialProjectsData():
    global PROJECT_DATA_CACHE
    if PROJECT_DATA_CACHE:
        return PROJECT_DATA_CACHE
    else:
        LOGGER.debug('No cache available for GET /projects')
        updateProjectsCache()
        return PROJECT_DATA_CACHE

2 个答案:

答案 0 :(得分:1)

也许你可以流式传输文件?我没有办法在没有某种下载或等待的情况下将文件传输80,000行。

这将是一个压缩和解压缩的机会,就像你建议的那样。绝对要确保JSON缩小。

  1. 缩小JSON的一种方法:https://www.npmjs.com/package/json-minify
  2. 流媒体文件: https://blog.al4.co.nz/2016/01/streaming-json-with-flask/
  3. 这也取决于项目,也许你可以让用户完全下载它?

答案 1 :(得分:1)

执行此操作的最佳方法是将JSON分解为块并通过将生成器传递给Response来传输它。然后,您可以在收到数据时呈现数据,或显示显示已完成百分比的进度条。我有一个如何在从AWS s3 here下载文件时流式传输数据的示例。这应该指向正确的方向。