服務端指南 | 報表導出

原文地址:服務端指南 | 報表導出
博客地址: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

相關文章
相關標籤/搜索