From 393823ea01c08dbd3048a43e82b450435b192c8b Mon Sep 17 00:00:00 2001 From: Nik Anderson Date: Tue, 10 Jul 2018 10:30:37 -0700 Subject: [PATCH 1/2] Add check to Message::getText() to avoid unnecessary argument processing --- includes/message.message.inc | 51 +++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/includes/message.message.inc b/includes/message.message.inc index e6aeaf9..5cfd21a 100644 --- a/includes/message.message.inc +++ b/includes/message.message.inc @@ -172,32 +172,35 @@ class Message extends Entity { if (!empty($arguments)) { $args = array(); foreach ($arguments as $key => $value) { - if (is_array($value) && !empty($value['callback']) && function_exists($value['callback'])) { - // A replacement via callback function. - $value += array('pass message' => FALSE); - if ($value['pass message']) { - // Pass the message object as-well. - $value['callback arguments'][] = $this; + // Don't bother processing for keys not present in the output + if (strpos($output, $key) !== FALSE) { + if (is_array($value) && !empty($value['callback']) && function_exists($value['callback'])) { + // A replacement via callback function. + $value += array('pass message' => FALSE); + if ($value['pass message']) { + // Pass the message object as-well. + $value['callback arguments'][] = $this; + } + + $value = call_user_func_array($value['callback'], $value['callback arguments']); } - $value = call_user_func_array($value['callback'], $value['callback arguments']); - } - - switch ($key[0]) { - case '@': - // Escaped only. - $args[$key] = check_plain($value); - break; - - case '%': - default: - // Escaped and placeholder. - $args[$key] = drupal_placeholder($value); - break; - - case '!': - // Pass-through. - $args[$key] = $value; + switch ($key[0]) { + case '@': + // Escaped only. + $args[$key] = check_plain($value); + break; + + case '%': + default: + // Escaped and placeholder. + $args[$key] = drupal_placeholder($value); + break; + + case '!': + // Pass-through. + $args[$key] = $value; + } } } $output = strtr($output, $args); From 3d01cb17dc472562d33c485dcdab44ec30286327 Mon Sep 17 00:00:00 2001 From: Nik Anderson Date: Tue, 10 Jul 2018 11:36:05 -0700 Subject: [PATCH 2/2] Refactor key check for diff compactness and early return per amitaibu --- includes/message.message.inc | 56 +++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/includes/message.message.inc b/includes/message.message.inc index 5cfd21a..c15f2db 100644 --- a/includes/message.message.inc +++ b/includes/message.message.inc @@ -172,35 +172,37 @@ class Message extends Entity { if (!empty($arguments)) { $args = array(); foreach ($arguments as $key => $value) { - // Don't bother processing for keys not present in the output - if (strpos($output, $key) !== FALSE) { - if (is_array($value) && !empty($value['callback']) && function_exists($value['callback'])) { - // A replacement via callback function. - $value += array('pass message' => FALSE); - if ($value['pass message']) { - // Pass the message object as-well. - $value['callback arguments'][] = $this; - } - - $value = call_user_func_array($value['callback'], $value['callback arguments']); - } + if (strpos($output, $key) === FALSE) { + // The replacement key is not in the output, so save computation. + continue; + } - switch ($key[0]) { - case '@': - // Escaped only. - $args[$key] = check_plain($value); - break; - - case '%': - default: - // Escaped and placeholder. - $args[$key] = drupal_placeholder($value); - break; - - case '!': - // Pass-through. - $args[$key] = $value; + if (is_array($value) && !empty($value['callback']) && function_exists($value['callback'])) { + // A replacement via callback function. + $value += array('pass message' => FALSE); + if ($value['pass message']) { + // Pass the message object as-well. + $value['callback arguments'][] = $this; } + + $value = call_user_func_array($value['callback'], $value['callback arguments']); + } + + switch ($key[0]) { + case '@': + // Escaped only. + $args[$key] = check_plain($value); + break; + + case '%': + default: + // Escaped and placeholder. + $args[$key] = drupal_placeholder($value); + break; + + case '!': + // Pass-through. + $args[$key] = $value; } } $output = strtr($output, $args);