From ab6ab965c77d804f38ab287ec370884bb4fe35b2 Mon Sep 17 00:00:00 2001 From: Bruce Davidson Date: Tue, 18 Feb 2025 20:19:36 +0000 Subject: [PATCH] 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. --- lib/creek/sheet.rb | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/creek/sheet.rb b/lib/creek/sheet.rb index 69d8497..43dbc50 100644 --- a/lib/creek/sheet.rb +++ b/lib/creek/sheet.rb @@ -119,12 +119,14 @@ def rows_generator(include_meta_data = false, use_simple_rows_format = false) name_v = "#{prefix}v" name_t = "#{prefix}t" end - if node.name == name_row && node.node_type == opener + node_name = node.name + node_type = node.node_type + if node_name == name_row && node_type == opener row = node.attributes row['cells'] = {} cells = {} y << (include_meta_data ? row : cells) if node.self_closing? - elsif node.name == name_row && node.node_type == closer + elsif node_name == name_row && node_type == closer processed_cells = fill_in_empty_cells(cells, row['r'], cell, use_simple_rows_format) @headers = processed_cells if with_headers && row['r'] == HEADERS_ROW_NUMBER @@ -138,11 +140,11 @@ def rows_generator(include_meta_data = false, use_simple_rows_format = false) row['cells'] = processed_cells y << (include_meta_data ? row : processed_cells) - elsif node.name == name_c && node.node_type == opener + elsif node_name == name_c && node_type == opener cell_type = node.attributes['t'] cell_style_idx = node.attributes['s'] cell = node.attributes['r'] - elsif (node.name == name_v || node.name == name_t) && node.node_type == opener + elsif (node_name == name_v || node_name == name_t) && node_type == opener unless cell.nil? node.read cells[cell] = convert(node.value, cell_type, cell_style_idx)