summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRandy Morgan <[email protected]>2012-03-26 04:17:55 -0700
committerRandy Morgan <[email protected]>2012-03-26 04:17:55 -0700
commitb07ea515f85c9314ca4fa981cb9267693effa821 (patch)
tree1fc548ff843cbce5e06db0c6133407f503d3e78c
parent42f45f4138a1f71b19411fd8600f2a2bce67a46b (diff)
parentf6c3a491ef014914524a98259a8679a5e4f64d57 (diff)
downloadcaxlsx-b07ea515f85c9314ca4fa981cb9267693effa821.tar.gz
caxlsx-b07ea515f85c9314ca4fa981cb9267693effa821.zip
Merge pull request #64 from ochko/go-faster
Go faster
-rw-r--r--axlsx.gemspec1
-rw-r--r--lib/axlsx/workbook/worksheet/row.rb2
-rw-r--r--lib/axlsx/workbook/worksheet/worksheet.rb3
-rw-r--r--test/profile.rb33
4 files changed, 37 insertions, 2 deletions
diff --git a/axlsx.gemspec b/axlsx.gemspec
index c8fda02f..d67401d3 100644
--- a/axlsx.gemspec
+++ b/axlsx.gemspec
@@ -29,6 +29,7 @@ Gem::Specification.new do |s|
s.add_development_dependency 'yard'
s.add_development_dependency 'yard'
s.add_development_dependency 'rdiscount'
+ s.add_development_dependency 'perftools.rb'
s.required_ruby_version = '>= 1.8.7'
s.require_path = 'lib'
diff --git a/lib/axlsx/workbook/worksheet/row.rb b/lib/axlsx/workbook/worksheet/row.rb
index db7a56e5..cec2eb25 100644
--- a/lib/axlsx/workbook/worksheet/row.rb
+++ b/lib/axlsx/workbook/worksheet/row.rb
@@ -63,7 +63,7 @@ module Axlsx
if custom_height?
"<row r=\"%s\" customHeight=\"1\" ht=\"%s\">%s</row>" % [index+1, height, @cells.inject("") { |memo, obj| obj.to_xml_string }]
else
- "<row r=\"%s\">%s</row>" % [index+1, @cells.inject("") { |memo, obj| memo.concat obj.to_xml_string }]
+ "<row r=\"%s\">%s</row>" % [index+1, @cells.map{ |obj| obj.to_xml_string }.join]
end
end
# Serializes the row
diff --git a/lib/axlsx/workbook/worksheet/worksheet.rb b/lib/axlsx/workbook/worksheet/worksheet.rb
index 1d128235..a85da6fc 100644
--- a/lib/axlsx/workbook/worksheet/worksheet.rb
+++ b/lib/axlsx/workbook/worksheet/worksheet.rb
@@ -386,7 +386,7 @@ module Axlsx
str.concat '</cols>'
end
- str.concat "<sheetData>%s</sheetData>" % [@rows.reduce('') { |memo, obj| memo += obj.to_xml_string }]
+ str.concat "<sheetData>%s</sheetData>" % @rows.map { |obj| obj.to_xml_string }.join
str.concat page_margins.to_xml_string if @page_margins
str.concat "<autoFilter ref='%s'></autoFilter>" % @auto_filter if @auto_filter
str.concat "<mergeCells count='%s'>%s</mergeCells>" % [@merged_cells.size, @merged_cells.reduce('') { |memo, obj| "<mergeCell ref='%s'></mergeCell>" % obj } ] unless @merged_cells.empty?
@@ -493,6 +493,7 @@ module Axlsx
# @param [Array] cells an array of cells
# @param [Array] widths an array of cell widths @see Worksheet#add_row
def update_auto_fit_data(cells, widths=[])
+ return cells unless self.workbook.use_autowidth
# TODO delay this until rendering. too much work when we dont know what they are going to do to the sheet.
styles = self.workbook.styles
cellXfs, fonts = styles.cellXfs, styles.fonts
diff --git a/test/profile.rb b/test/profile.rb
new file mode 100644
index 00000000..97d2e2bc
--- /dev/null
+++ b/test/profile.rb
@@ -0,0 +1,33 @@
+#!/usr/bin/env ruby -s
+# -*- coding: utf-8 -*-
+
+# Usage:
+# > ruby test/profile.rb
+# > pprof.rb --gif /tmp/axlsx_noautowidth > /tmp/axlsx_noautowidth.gif
+# > open /tmp/axlsx_noautowidth.gif
+
+$:.unshift "#{File.dirname(__FILE__)}/../lib"
+require 'axlsx'
+require 'csv'
+
+# require 'benchmark'
+require 'perftools'
+row = []
+input = (32..126).to_a.pack('U*').chars.to_a
+20.times { row << input.shuffle.join}
+times = 1000
+
+PerfTools::CpuProfiler.start("/tmp/axlsx_noautowidth") do
+ p = Axlsx::Package.new
+ p.use_autowidth = false
+ wb = p.workbook
+
+ #A Simple Workbook
+
+ wb.add_worksheet do |sheet|
+ times.times do
+ sheet << row
+ end
+ end
+ p.serialize("example.xlsx")
+end