使用 ftp:/// 加载大型 json 对象的有效方法

Posted

技术标签:

【中文标题】使用 ftp:/// 加载大型 json 对象的有效方法【英文标题】:Efficient way to load large json object with ftp:/// 【发布时间】:2021-09-03 07:20:43 【问题描述】:

我有一个大的 json 对象(最大 200 MB 或更多)。它存储了 plotly.js 渲染图形所需的值。

我尝试使用text/javascriptapplication/json 将json 对象合并到html 中,或者将json 存储在外部javascript 代码中并使用脚本标签加载它。这两种方法都需要花费大量时间来加载 HTML 页面(大约 20-30 秒)。

由于我无法使用ftp:///协议读取本地文件,由于CORS策略出于安全原因,该协议被chrome阻止,因此我无法将数据存储在本地文件中,稍后再读取.

有没有更有效的方法将大型 json 文件嵌入到 html 文件中?也许我们可以稍后用 json 对象评估代码?

【问题讨论】:

为什么不拆分文件? @evolutionxbox 因为需要所有数据。大约有 30,000 个特征和 10,000 个样本。我想让用户选择他们想要显示的功能。 【参考方案1】:

我找到了解决方法。 首先,用js文件定义global variable中的数据。 其次,稍后通过单击按钮或其他事件加载js文件。

// data.js
window.data = [1, 2, 3]

// load the data with the script tag.
const scriptTag = document.createElement("script");
scriptTag.src = "./data.js";
scriptTag.onload = () => console.log("loaded")
document.head.appendChild(scriptTag);

所以现在,我可以将大数据拆分为单独的变量并稍后加载。

【讨论】:

【参考方案2】:

使用<script> 标签时,使用asyncdefer 属性以及onload 在文件加载时开始绘图。

【讨论】:

感谢您的快速建议。我试过了,并没有真正帮助加载速度。我认为asyncdefer 用于在解析DOM 的同时下载js 文件。我的js文件在本地,估计不用下载。如果我错了,请纠正我。 我注意到的一件事是页面加载延迟(或页面冻结,即使所有 html 元素都已显示)是因为将大型 js 文件读入内存。

以上是关于使用 ftp:/// 加载大型 json 对象的有效方法的主要内容,如果未能解决你的问题,请参考以下文章

Python使用json加载解析带有两个json对象列表的文件

Python 处理包含对象列表的大型 JSON 文件

尝试使用文件加载器和 webpack 加载大型 json 文件

将大型 JSON 文件数据加载到 Angular cli 表中

如何从 Snowflake Stage 加载大型 JSON 文件?

使用ajax请求发布大型JSON对象