从服务端生成Excel电子表格(GcExcel + SpreadJS)

在服务端生成Excel电子表格,除了使用 Node.js + SpreadJS 外,葡萄城官方推荐使用 SpreadJS + GcExcel。该方案不仅能够解决批量绑定数据源并导出Excel、批量修改大量Excel内容及样式、服务端批量打印以及生成PDF文档等需求,还提供了远超行业标准的组件性能。

为了验证SpreadJS + GcExcel的处理性能,本文将就GcExcel for Java和Node.js中运行SpreadJS的各项数据进行对比。由于SpreadJS和GcExcel的组件功能非常丰富,本文仅选择最为常见的两个功能点做对比,分别是设置区域数据和导出Excel文档。

一、本次测试的几个大前提

由于Node.js是基于V8引擎来执行JavaScript的,因此它的js也是基于事件机制的非阻塞单线程运行,其文件的I/O都是异步执行的,而Node.js之所以选择单线程的方式是因为编码简单、开发难度低、对"码农"码农的心智消耗相对较小;而且它的文件I/O是异步执行的,所以不需要像Java那样需要创建、回收线程(Node.js的I/O操作在底层也是线程,这里不做深入讨论),这方面开销较小。
但是,单线程在做复杂运算方面相比多线程则没有任何优势,也无法利用多线程来有效调配多核CPU进行优化,因此在Node.js中运行SpreadJS就只能是单线程JS,这也会影响SpreadJS 的数据处理性能。

所以,为了获得更加准确的测试结果,本篇中设计的测试用例,在两个环境(Java 和 Node.js)中都采用单线程执行,并且选择了与Node.js更加匹配的批量I/O操作作为测试用例。
二、 Node.js 与 SpreadJS 的测试代码和结果:

在这里插入图片描述

测试代码:如下所示,用一个Performance类执行1000次设置数据、导出Excel文档的操作。

const fs = require('fs');

// Initialize the mock browser variables
const mockBrowser = require('mock-browser').mocks.MockBrowser;
global.window = mockBrowser.createWindow();
global.document = window.document;
global.navigator = window.navigator;
global.HTMLCollection = window.HTMLCollection;
global.getComputedStyle = window.getComputedStyle;

const fileReader = require('filereader');
global.FileReader = fileReader;

const GC = require('@grapecity/spread-sheets');
const GCExcel = require('@grapecity/spread-excelio');

GC.Spread.Sheets.LicenseKey = GCExcel.LicenseKey = "Your License";

const dataSource = require('./data');

function runPerformance(times) {
   

  const timer = `test in ${
   times} times`;
  console.time(timer);

  for(let t=0; t<times; t++) {
   
    // const hostDiv = document.createElement('div');
    // hostDiv.id = 'ss';
    // document.body.appendChild(hostDiv);
    const wb = new GC.Spread.Sheets.Workbook()//global.document.getElementById('ss'));
    const sheet = wb.getSheet(0);
    for(let i=0; i<dataSource.length; i++) {
   
      sheet.setValue(i, 0, dataSource[i]["Film"]);
      sheet.setValue(i
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值