Skip to content

Commit ab6ab96

Browse files
Reduce repeated calls to node
In the main loop we may call node.name and node.node_type several times. node.name in particular results in allocation of a string, boosting memory usage. Calling them once and storing them locally will reduce memory use.
1 parent f0c683f commit ab6ab96

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

lib/creek/sheet.rb

+6-4
Original file line numberDiff line numberDiff line change
@@ -119,12 +119,14 @@ def rows_generator(include_meta_data = false, use_simple_rows_format = false)
119119
name_v = "#{prefix}v"
120120
name_t = "#{prefix}t"
121121
end
122-
if node.name == name_row && node.node_type == opener
122+
node_name = node.name
123+
node_type = node.node_type
124+
if node_name == name_row && node_type == opener
123125
row = node.attributes
124126
row['cells'] = {}
125127
cells = {}
126128
y << (include_meta_data ? row : cells) if node.self_closing?
127-
elsif node.name == name_row && node.node_type == closer
129+
elsif node_name == name_row && node_type == closer
128130
processed_cells = fill_in_empty_cells(cells, row['r'], cell, use_simple_rows_format)
129131
@headers = processed_cells if with_headers && row['r'] == HEADERS_ROW_NUMBER
130132

@@ -138,11 +140,11 @@ def rows_generator(include_meta_data = false, use_simple_rows_format = false)
138140

139141
row['cells'] = processed_cells
140142
y << (include_meta_data ? row : processed_cells)
141-
elsif node.name == name_c && node.node_type == opener
143+
elsif node_name == name_c && node_type == opener
142144
cell_type = node.attributes['t']
143145
cell_style_idx = node.attributes['s']
144146
cell = node.attributes['r']
145-
elsif (node.name == name_v || node.name == name_t) && node.node_type == opener
147+
elsif (node_name == name_v || node_name == name_t) && node_type == opener
146148
unless cell.nil?
147149
node.read
148150
cells[cell] = convert(node.value, cell_type, cell_style_idx)

0 commit comments

Comments
 (0)