我在 javascript 中有一个非常大的对象(大约 10MB)。
当我对它进行字符串化时,它需要很长时间,所以我将它发送到后端并将其解析为一个对象(实际上是带有数组的嵌套对象),这也需要很长时间,但这不是我们在这个问题中的问题。
问题:
我怎样才能使 JSON.stringify
更快,任何想法或替代方案,我需要一个 javaScript 解决方案,我可以使用的库或这里的想法。
我尝试过的
我在谷歌上搜索了很多,看起来没有比 JSON.stringify
更好的性能了,或者我的谷歌搜索技能生疏了!
结果
我接受任何可能解决我在请求中长时间保存(发送到后端)的建议(我知道它的大请求)。
问题代码示例(问题详情)
Request URL:http://localhost:8081/systemName/controllerA/update.html;jsessionid=FB3848B6C0F4AD9873EA12DBE61E6008
Request Method:POST
Status Code:200 OK
我发送一个 POST 到后端,然后在 JAVA
request.getParameter("BigPostParameter")
然后我阅读它以使用
转换为对象 public boolean fromJSON(String string) {
if (string != null && !string.isEmpty()) {
ObjectMapper json = new ObjectMapper();
DateFormat dateFormat = new SimpleDateFormat(YYYY_MM_DD_T_HH_MM_SS_SSS_Z);
dateFormat.setTimeZone(TimeZone.getDefault());
json.setDateFormat(dateFormat);
json.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
WebObject object;
// Logger.getLogger("JSON Tracker").log(Level.SEVERE, "Start");
try {
object = json.readValue(string, this.getClass());
} catch (IOException ex) {
Logger.getLogger(JSON_ERROR).log(Level.SEVERE, "JSON Error: {0}", ex.getMessage());
return false;
}
// Logger.getLogger("JSON Tracker").log(Level.SEVERE, "END");
return this.setThis(object);
}
return false;
}
像这样
BigObject someObj = new BigObject();
someObj.fromJSON(request.getParameter("BigPostParameter"))
P.S:仅供引用这一行 object = json.readValue(string, this.getClass());
也非常非常非常慢。
再次总结
发布时间问题(字符串化)JavaScript 瓶颈。
解析字符串化为对象的另一个问题(使用jackson),主要是我在那个字符串化对象中有svg标签内容作为样式列,其他列是字符串,主要是int
最佳答案
正如评论者所说 - 没有办法使解析速度更快。
如果担心应用在字符串化/解析时被阻塞,则尝试将数据拆分为单独的对象,将它们字符串化并组合回一个对象,然后再保存到服务器上。
如果应用的加载时间不是问题,您可以尝试在现有应用的基础上进行临时增量更改。
- ... 应用加载
- 加载 map 数据
- 制作完整的数据副本
- ...结束加载
- ...应用无需更改即可运行
- ...保存更改时
- diff copy with changed data to get JSON diff
- 发送更改(比完整数据小得多)
- ... 在服务器上
- 将服务器上的 JSON 差异更改应用于存储在服务器上的完整数据
- 保存更改的数据
我使用了 json-diff https://github.com/andreyvit/json-diff计算变化,并且几乎没有类似物。
关于javascript - JSON.stringify 对于大对象来说非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45513821/