2016-10-20 2 views
-1

Я отправляю довольно много сложных Java-объектов клиенту через джексон с отдыхом, но для записи объектов в виде JSON требуется слишком много времени. У меня есть около 200 объектов, которые структурированы так:POJO для JSON с Джексоном слишком медленный

public class LotListMV implements Serializable { 

    private static final long serialVersionUID = -1296813516060999040L; 

    Map<String, GroupingMissionMV> lotList; 

    String currency; 
    ... 
} 


public class GroupingMissionMV implements Serializable { 

    private static final long serialVersionUID = -343336819042189462L; 

    private List<MissionMV> missionMVList; 

    private int statusNiveau; 

    private String statusImgColor; 

    ... 
} 

Я не хочу, чтобы вставить код MissionMV, потому что это немного большим, но он имеет как 50 атрибутов и 3 довольно мелких объектов. Ответ на стороне клиента составляет 17 kb как gzip. Я слышал, что Джексон довольно быстро, поэтому я не понимаю, почему он так медленно. Я поставил регистратор до и после mappr.writeValueAsString(myObject), чтобы убедиться, что это проблема.

+1

Возможно, вместо того, чтобы посылать гигантский ответ на один запрос, вы можете отправить около 200 запросов и ответов. Это по-прежнему занимает много времени, но клиент может получать и отображать первые ответы быстрее. –

ответ

0

Это недостаточная информация, и, в частности, неясно, что тратится время на обработку JSON. Например, вы указываете, что gzip, и разжатие содержимого, закодированного в gzip, занимает больше времени, чем разбор JSON. Вы уверены, что время на это не потрачено? Также неясно, можете ли вы рассчитывать вовремя, чтобы получать контент через HTTP; или, если вы измеряете стабильную работу (в Java, первые вызовы на любой код намного медленнее, чем дальнейшее использование). Короче говоря, непонятно, почему вы думаете, что парсинг JSON медленный; и невозможно оценить (размер контента не упоминается).

Если вы хотите узнать о производительности JSON-анализа, вам придется проверить это, прочитав из памяти (уже загруженный контент); или, по крайней мере, буферный контент из сети, измеряя разные части отдельно.