Page<EntityDto>, когда вызываю .map(myMapper::toDto) над Page<Entity>. А вот для List почти без разницы во времени. Как-нибудь можно ускорить маппинг для Page?
Для того чтобы ускорить, надо понять, что именно ускорять. Посмотри имплементацию маппера для Page<Entity>. Запусти профайлер и посмотри в каких местах идут просадки
В интерфейсе метода возвращающего Page<> и не описывал. Вот отрывок кода в контроллере return new ResponseEntity<>(SuccessResponse.builder() .data(itemService.getAllWithPagination(page, size) .map(item -> itemMapper.toDto(item, context))) .build(), HttpStatus.OK); Тут он проходит так же как и для List<Entity> по сути
Почему ты решил что медленно выполняется. Это какие субъективные ощущения или есть конкретные цифры? Прогони этот метод через профайл
Сравни профайл с листом и профайл с page
время ответа в 3-4 раза медленее чем без маппинга. Профайл проверю, ок
а вариант с листом?
В интерфейсе описывал. @InheritInverseConfiguration D toDto(E entity, @Context CycleAvoidingMappingContext context); @InheritInverseConfiguration List<D> toDto(List<E> entity, @Context CycleAvoidingMappingContext context); itemMapper.toDto(item, context) -> D toDto(E entity вот этот метод вызывается
Как понял что замедляется?)
так а аменно вот этот код но с листом вместо пейджа?
Вангую в листе все поля проинициализированы, а в пейдже все лейзи не загружены
без маппера Page из 10 объектов возвращает за 15-20 мс с маппером 48-55 мс
ну так смапить ясен пень надо. ты говорил что с листом быстрее - там замерял?
в листе почти без разницы, findAll() вызываю
в смысле без разницы?
Возможно потомучто Page еще getTotalElements сериализуется а это +1 запрос каунта всех записей
Хмм, в модели я прописал все нужные аннотации. Где то LAZY где то EAGET c BatchSize. Они ведь должны применяться и для List и для page? Hibernate 6.2.7
когда возвращаю List<> findAll() из 100 объектов: с маппером 70-80 мс без маппера 60-65 мс
я поставлю на то что в варианте с листом нету настоящей пагинации вот он и возращается быстрее
должны. но при этом на маппинге ты эти поля трогаешь и подтягиваешь прямо во время мапинга
так я об этом и говорю. Что List<Entity> быстрее мапится чем Page<Entity> ))
ну тут не в маппинге дело, а в запросе на count
И сравнивай на одинаковом количестве. Если проверяешь на 10 элементах в page то и в лист вытаскивай 10 элементов
Что для List, что для Page из 100 элементов время одинаковое) Я хотел чтобы Page для 10 элементов за 15-20 мс отвечал😅
Ну тогда надо убрать все что медленное и оставить только быстрое 😊
разницы в 100 или 10 элементов не будет. понимаю между 10 и 10 000 000 000 - была бы разница чувствительная
Обсуждают сегодня