Vaadin 21.0.7 Grid懒加载请求数据量远超设置分页大小问题咨询
解决方案
以下是可直接落地的调整步骤:
- 调整分页与预加载参数
Vaadin Grid默认会预加载当前视口外多倍pageSize的内容,你可以通过调低预加载偏移量+修改分页大小实现单次仅请求25条:
this.equityInfoGrid.setPageSize(25); // 关闭额外预加载,默认值通常为2倍pageSize,设为0后仅请求当前视口所需的分页数据 this.equityInfoGrid.setPreloadOffset(0);
- 禁用自动全量加载配置
检查是否调用了setAllRowsVisible(true)或setHeightByRows()方法,这两个配置会让Grid自动计算填满高度所需的行数,直接禁用懒加载一次性请求全量数据,删除这类配置即可恢复懒加载逻辑。 - 修正DataProvider边界逻辑
你当前的边界判断逻辑有误,当偏移量+请求量超出总数据量时会返回全量数据流,会带来额外性能开销,修改为如下实现:
DataProvider<FinVizEquityInfoModel, Void> lazyLoadingProvider = DataProvider.fromCallbacks( query -> { int offset = query.getOffset(); int limit = query.getLimit(); List<FinVizEquityInfoModel> allModels = FinVizEquityInfoModel.getFIN_VIZ_MODELS(); int end = Math.min(offset + limit, allModels.size()); return allModels.subList(offset, end).stream(); }, query -> FinVizEquityInfoModel.getFIN_VIZ_MODELS().size() );
- 开启DataProvider缓存避免重复请求
给DataProvider添加和pageSize一致的缓存配置,相同分页的重复请求会直接读缓存,不需要重新查询:
lazyLoadingProvider = lazyLoadingProvider.withCache(25);
完成以上配置后,Grid单次请求的数量会稳定在25条,不会出现超额请求的问题。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

