最近刚使用这个库做了个通用的库
https://github.com/billyplus/luatable以前我用过一个 golang 的库,是 tealeg 的,后来看到他在项目说明里面推荐 360 的库,说 360 的库功能更全面,所以这次我先尝试了一下 360 的库。结果不是很理想,读取数据明显比 tealeg 的慢,应该是 xml 解析没有优化,但是对于我的这种导表工具来说,读取速度比功能更有意义。
我用这两个库做了个对比。
总运行时间:4.97s
其中:
github.com/360EntSecGroup-Skylar/excelize.(*File).GetRows (67.00%, 3.33s)
```
Flat Flat% Sum% Cum Cum% Name Inlined?
0 0.00% 0.00% 3.49s 70.22%
github.com/spf13/cobra.(*Command).Execute 0 0.00% 0.00% 3.49s 70.22%
github.com/spf13/cobra.(*Command).ExecuteC 0 0.00% 0.00% 3.49s 70.22% main.main
0 0.00% 0.00% 3.49s 70.22% runtime.main
0 0.00% 0.00% 3.48s 70.02%
github.com/spf13/cobra.(*Command).execute 0 0.00% 0.00% 3.48s 70.02% main.(*generator).GenConfig
0 0.00% 0.00% 3.48s 70.02% main.(*generator).GenConfig.func1
0 0.00% 0.00% 3.48s 70.02% main.(*generator).GenConfig.func1.1
0 0.00% 0.00% 3.48s 70.02% main.glob..func1
0 0.00% 0.00% 3.48s 70.02% path/filepath.Walk
0 0.00% 0.00% 3.48s 70.02% path/filepath.walk
0 0.00% 0.00% 3.46s 69.62% main.(*generator).iterateXlsx
0 0.00% 0.00% 3.46s 69.62% main.(*generator).sheetsFromExcel360
0 0.00% 0.00% 3.33s 67.00%
github.com/360EntSecGroup-Skylar/excelize.(*File).GetRows 0 0.00% 0.00% 2.70s 54.33% encoding/xml.(*Decoder).DecodeElement
0.18s 3.62% 3.62% 2.70s 54.33% encoding/xml.(*Decoder).unmarshal
```
后来试着换了一个库,这个库功能更少,但是使用时候发现读表效率更高,换库只是调整了读表的部分。
github.com/tealeg/xlsx总运行时间:2.34s
top
```
Flat Flat% Sum% Cum Cum% Name Inlined?
0 0.00% 0.00% 1.30s 55.56%
github.com/tealeg/xlsx.readSheetFromFile 0 0.00% 0.00% 1.30s 55.56%
github.com/tealeg/xlsx.readSheetsFromZipFile.func1 0 0.00% 0.00% 1.27s 54.27% encoding/xml.(*Decoder).Decode
0 0.00% 0.00% 1.27s 54.27% encoding/xml.(*Decoder).DecodeElement
0.04s 1.71% 1.71% 1.27s 54.27% encoding/xml.(*Decoder).unmarshal
0.03s 1.28% 2.99% 1.14s 48.72% encoding/xml.(*Decoder).unmarshalPath
0 0.00% 2.99% 1.13s 48.29%
github.com/tealeg/xlsx.getWorksheetFromSheet 0.01s 0.43% 3.42% 0.76s 32.48% encoding/xml.(*Decoder).Token
0.04s 1.71% 5.13% 0.69s 29.49% encoding/xml.(*Decoder).rawToken
0 0.00% 5.13% 0.42s 17.95% runtime.mstart
0 0.00% 5.13% 0.42s 17.95% runtime.systemstack
```
两者对比,读取文件的操作差别还是挺大的,如果文件更大的话,差距就会更明显。