Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Flask中呈现Datatable非常慢_Python_Flask_Datatable - Fatal编程技术网

Python 在Flask中呈现Datatable非常慢

Python 在Flask中呈现Datatable非常慢,python,flask,datatable,Python,Flask,Datatable,如何优化数据表呈现。我的PG表包含35k+行,pandas dataframe的速度不是很慢,但在我的HTML页面中呈现Datatable需要很长时间: app.py HTML 您的视图函数中有很多内容 您正在从API下载数据 您正在将json转换为字符串,然后再转换为数据帧 您正在以html呈现数据帧 然后将所有这些信息发送回浏览器 当您只考虑等待外部API的网络延迟,然后等待将其转换回客户端时,这可能是等待的一个重要部分。还考虑在HTML中呈现的35000行可以是40-50MB,即使在快速连

如何优化数据表呈现。我的PG表包含35k+行,pandas dataframe的速度不是很慢,但在我的HTML页面中呈现Datatable需要很长时间:

app.py HTML
您的视图函数中有很多内容

  • 您正在从API下载数据

  • 您正在将json转换为字符串,然后再转换为数据帧

  • 您正在以html呈现数据帧

  • 然后将所有这些信息发送回浏览器

  • 当您只考虑等待外部API的网络延迟,然后等待将其转换回客户端时,这可能是等待的一个重要部分。还考虑在HTML中呈现的35000行可以是40-50MB,即使在快速连接的情况下,也需要相当长的时间在网络环境中移动。 如果您创建了一个非常基本的HTML页面,并将以下数据复制了35000次,那么您将得到一个大小为5MB的网页,对于HTML页面来说,这被认为是一个很大的页面

    
    你好
    样本数据
    
    想象一下,如果数据帧的每一行都包含更多的数据,那么数据量会大多少

    加快速度有很多选择,但最基本的是:

    • 如果可以避免的话,不要让视图函数依赖外部API
    • 您可能希望对大型数据集进行分页
    • 以比HTML(JSON甚至CSV)更小的格式将数据发送回浏览器,并允许客户端对其进行解析。这减少了移动大文件的网络延迟
    @app.route('/html_one', methods=["POST","GET"])
    def referentiel_communes():
        r = requests.get('https://api/', params=payload, verify=False)   
        data_dict = r.json()    
        data_str = json.dumps(data_dict)
        df = pd.read_json(data_str) 
        print(df)
        return render_template('referentiel_communes.html', tables=[df.to_html(table_id = 'html_one',classes="display table table-striped table-bordered")], titles=df.columns.values, header="true")
    
    <div class="col-sm-12">
        {% for table in tables %}
                <!-- {{titles[loop.index]}} -->
                {{ table|safe }}
        {% endfor %}
    </div>
    
    var html_one = $('#html_one').DataTable({
        select: true,
        fixedHeader: true,
    
    });