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
相关产品推荐
相关产品推荐

