服务端指南 | 报表导出

原文地址:服务端指南 | 报表导出
博客地址:blog.720ui.com/前端

有的时候,咱们须要将一部分报表数据以 Excel 文件的形式进行导出,并以离线的方式进行查阅。对于 Excel 报表导出,一种作法是服务端提供 JSON 格式的报表数据,前端基于 HTML5 的 JavaScript 功能控件实现 Excel 的导出功能,这种作法的好处在于服务端的 API 接口具备复用性,减小服务端的性能压力,并将生成报表的压力转移到了前端。可是,若是存在 Excel 的样式渲染,就有点力不从心了。apache

另外一种作法是所有由服务端实现 Excel 的生成与渲染,并提供给前端进行导出。Java 语言中,最经常使用的操做 Excel 的类库包括 jxl 和 poi。 jxl 是一个比较老的框架,只能支持低版本的 excel,即 .xls 格式的 Excel,好比 Excel 95, Excel 97, Excel 2000, Excel 2003 等版本,可是在 65535 行如下量级的数据性能更好些。poi 是 apache 的项目,能够支持 .xlsx 格式的 Excel,包括 Excel 2007, Excel 2010 等版本。所以,如今主流操做 Excel 的类库是 poi。如今,咱们来参考 poi 操做 Excel 的类图。微信

值得注意的是,通常状况下,报表导出是同步执行,经过字节流的方式与前端通讯。此外,咱们也能够将生成的 Excel 报表文件先上传的资源中心,并生成 URL 地址返回给前端供用户下载,这样能够利用 CDN(内容分发网络)将网络内容发布到靠近用户的边缘节点,使不一样地域的用户在访问相同网页时能够就近获取。网络

为了减小服务端的压力,对于报表导出的数量须要进行限制,例如一次只能导出 5 万条记录,而且建议用户分批导出。框架

此外,若是数据源都是在存放在当前系统中,那么处理起来就方便地多,只须要经过 JDBC 获取到数据源而且进行 Excel 的生成与渲染。然而,若是部分数据源存储在外部系统中,那么就须要 RPC 调用或者 RESTful API 调用才能获取到。这样,一方面会很大影响到性能,另外一方面可能存在接口调用超时。此时,优先考虑将数据冗余到本地,其次折中的处理方案是,调用失败或者调用超时进行重试来实现数据补偿,而且在重试以后没法获取到某些外部数据时,进行一个友好的提示,例如“系统太累了,暂时没有取到哟”。异步

有时,报表导出等待时间过久会致使 Nginx 超时,咱们能够将报表导出改变成异步方式,当用户发起报表导出请求后,服务端当即响应应答,并异步执行 Excel 的生成与渲染。当完成任务时,经过消息队列或者心跳包机制通知前端进行下载。性能

(完)ui

更多精彩文章,尽在「服务端思惟」微信公众号!
excel

相关文章
相关标签/搜索