You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask部署后数据加载缓慢且交互异常问题求助

Flask部署后数据加载缓慢且交互异常问题求助

兄弟,我看了你的代码和问题描述,发现两个核心问题导致了部署后的慢加载和交互bug,咱们一步步来解决:

一、加载缓慢的根源:串行请求拖慢速度

你在遍历文件夹列表时,每个item都用await发起单独的请求,这意味着前一个请求完成后才会发下一个。本地环境网络延迟几乎为0,所以感觉不到,但部署后网络往返时间叠加,就会出现内容逐个加载的情况。

解决方案:改用并行请求

把所有子项的请求一次性发出去,用Promise.all等待所有请求完成,这样就能大幅缩短加载时间:

async function fetch_data(path) {
    if (path == 'space') {
        document.querySelector('#back').style.display = 'none';
    } else {
        document.querySelector('#back').style.display = 'block';
    }

    var response = await fetch(`${address}/${path}`);
    var data = await response.json();
    current_path = path;

    document.querySelector('#list').innerHTML = "";
    document.querySelector('#status').innerHTML = `CURRENT PATH : ${path.toUpperCase()}`;
    
    if ("folder" in data) {
        // 先收集所有子项的请求Promise
        const itemPromises = data["folder"].map(async (item) => {
            let newPath = `${path}/${item}`;
            let itemResponse = await fetch(`${address}/${newPath}`);
            let itemData = await itemResponse.json();
            // 返回每个item的HTML片段
            if ("folder" in itemData) {
                return `<a class="list-group-item list-group-item-action" onclick="fetch_data('${newPath}')"> ${item}</a>`;
            } else {
                return `<a class="list-group-item list-group-item-action" onclick="preview_file('${newPath}')"> ${item}</a>`;
            }
        });

        // 等待所有请求完成,拿到所有HTML片段
        const itemHtmls = await Promise.all(itemPromises);
        // 一次性插入到DOM,避免频繁修改
        document.querySelector('#list').innerHTML = itemHtmls.join('');
    } else {
        console.log("Unknown response format.");
    }
}

二、交互bug的根源:频繁修改innerHTML导致DOM混乱

你原来的代码每次循环都用innerHTML +=,这会导致浏览器每次都重新解析整个列表的HTML,如果用户在加载过程中点击,DOM还处于更新状态,就会出现未加载的内容“跑”到已点击项里的异常。

上面的修改已经解决了这个问题:先把所有HTML片段准备好,一次性插入DOM,避免了频繁修改带来的DOM混乱。

额外的优化建议(部署后更流畅)

  • Flask端开启Gzip压缩:可以用flask-compress扩展,减少传输的数据量,加快加载速度。
  • 使用反向代理(如Nginx):Nginx可以帮你处理静态文件缓存、请求转发,进一步优化响应速度。
  • Flask接口优化:如果可以的话,修改后端接口,在获取文件夹列表时直接返回每个子项的类型(文件/文件夹),这样前端就不用再发二次请求了——这才是最彻底的性能提升方式!

备注:内容来源于stack exchange,提问作者IllTime00qw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 15:29:50