javascript - JSON.stringify 对于大对象来说非常慢

标签 javascript json performance

我在 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/

相关文章:

javascript - “following” 在获取好友/列表 API Twitter 中 key 始终返回 false

java - Jackson 的 RESTEasy 和 ContextResolver<ObjectMapper>

CSS剪辑使用GPU?

c++ - 为什么省略 push_back 会使循环运行得更慢?

javascript - 存储文本输入并显示在页面上

javascript - 单击按钮即可从 DTP 获取给定日期的完整日历中的事件。 Jquery/Javascript

javascript - 如果启用复选框,如何定向到不同的 url

javascript - 是否可以对php中未定义的值进行json_encode?

javascript - Visual Studio 上的紧凑代码

javascript - 使用 AngularJS 作为 JQuery 的替代品