From: Roland Häder Date: Sat, 11 Dec 2021 21:47:55 +0000 (+0100) Subject: Continued: X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=a5f4ff71b33335bd7386413fba0e1f1f5bdb2108;p=core.git Continued: - invoking ksort() by every invocation of setConfigEntry() is very "expensive" as sorting arrays take time. Better is to load all configuration files and then sort it only once. Signed-off-by: Roland Häder --- diff --git a/framework/bootstrap/class_FrameworkBootstrap.php b/framework/bootstrap/class_FrameworkBootstrap.php index 6894866e..4655cd37 100644 --- a/framework/bootstrap/class_FrameworkBootstrap.php +++ b/framework/bootstrap/class_FrameworkBootstrap.php @@ -359,6 +359,9 @@ final class FrameworkBootstrap { self::loadInclude($fileInstance); } + // After this, sort the configuration array + self::getConfigurationInstance()->sortConfigurationArray(); + // Scan for application's classes, exceptions and interfaces ClassLoader::scanApplicationClasses(); } diff --git a/framework/config/class_FrameworkConfiguration.php b/framework/config/class_FrameworkConfiguration.php index e43a3b86..ee54fa0d 100644 --- a/framework/config/class_FrameworkConfiguration.php +++ b/framework/config/class_FrameworkConfiguration.php @@ -108,6 +108,7 @@ class FrameworkConfiguration implements Registerable { */ public function getConfigEntry (string $configKey) { // Is it null? + //* NOISY-DEBUG: */ printf('[%s:%d]: configKey=%s - CALLED!' . PHP_EOL, __METHOD__, __LINE__, $configKey); if (empty($configKey)) { // Entry is empty throw new InvalidArgumentException('configKey is empty', self::EXCEPTION_CONFIG_KEY_IS_EMPTY); @@ -117,12 +118,14 @@ class FrameworkConfiguration implements Registerable { $configKey = StringUtils::convertDashesToUnderscores($configKey); // Is a valid configuration key provided? + //* NOISY-DEBUG: */ printf('[%s:%d]: configKey=%s - AFTER!' . PHP_EOL, __METHOD__, __LINE__, $configKey); if (!$this->isConfigurationEntrySet($configKey)) { // Entry was not found! throw new NoConfigEntryException(array(__CLASS__, $configKey), self::EXCEPTION_CONFIG_KEY_WAS_NOT_FOUND); } // Return the requested value + //* NOISY-DEBUG: */ printf('[%s:%d]: Returning configData[%s]=[%s]:%s - EXIT!' . PHP_EOL, __METHOD__, __LINE__, $configKey, gettype(self::$configData[$configKey]), self::$configData[$configKey]); return self::$configData[$configKey]; } @@ -137,6 +140,7 @@ class FrameworkConfiguration implements Registerable { */ public final function setConfigEntry (string $configKey, $configValue) { // Is a valid configuration key key provided? + //* NOISY-DEBUG: */ printf('[%s:%d]: configKey=%s,configValue[]=%s' . PHP_EOL, __METHOD__, __LINE__, $configKey, gettype($configValue)); if (empty($configKey)) { // Entry is empty throw new InvalidArgumentException('configKey is empty', self::EXCEPTION_CONFIG_KEY_IS_EMPTY); @@ -149,11 +153,8 @@ class FrameworkConfiguration implements Registerable { $configKey = StringUtils::convertDashesToUnderscores($configKey); // Set the configuration value - //* NOISY-DEBUG: */ print(__METHOD__ . ':configEntry=' . $configKey . ',configValue[' . gettype($configValue) . ']=' . $configValue . PHP_EOL); + //* NOISY-DEBUG: */ printf('[%s:%d]: configKey=%s,configValue[%s]=%s' . PHP_EOL, __METHOD__, __LINE__, $configKey, gettype($configValue), $configValue); self::$configData[$configKey] = $configValue; - - // Resort the array - ksort(self::$configData); } /** @@ -163,9 +164,26 @@ class FrameworkConfiguration implements Registerable { */ public final function getConfigurationArray () { // Return it + /* NOISY-DEBUG: */ printf('[%s:%d]: self::configData()=%d - EXIT!' . PHP_EOL, __METHOD__, __LINE__, count(self::$configData)); return self::$configData; } + /** + * Sorts the configuration array, saves A LOT calls if done after all configuration files have been loaded. You should NOT + * set any configuration entries by your own, means outside any configuration file. If you still do so, you HAVE to call + * this method afterwards + * + * @return void + */ + public final function sortConfigurationArray () { + // Resort the array + //* NOISY-DEBUG: */ printf('[%s:%d]: Sorting %d records - CALLED!' . PHP_EOL, __METHOD__, __LINE__, count(self::$configData)); + ksort(self::$configData); + + // Debug message + //* NOISY-DEBUG: */ printf('[%s:%d]: EXIT!' . PHP_EOL, __METHOD__, __LINE__); + } + /** * Unset a configuration key, the entry must be there or else an * exception is thrown. @@ -177,6 +195,7 @@ class FrameworkConfiguration implements Registerable { */ public final function unsetConfigEntry (string $configKey) { // Validate parameters + //* NOISY-DEBUG: */ printf('[%s:%d]: configKey=%s - CALLED!' . PHP_EOL, __METHOD__, __LINE__, $configKey); if (empty($configKey)) { // Entry is empty throw new InvalidArgumentException('configKey is empty', self::EXCEPTION_CONFIG_KEY_IS_EMPTY); @@ -186,13 +205,18 @@ class FrameworkConfiguration implements Registerable { $configKey = StringUtils::convertDashesToUnderscores($configKey); // Is the configuration key there? + //* NOISY-DEBUG: */ printf('[%s:%d]: configKey=%s - AFTER!' . PHP_EOL, __METHOD__, __LINE__, $configKey); if (!$this->isConfigurationEntrySet($configKey)) { // Entry was not found! throw new NoConfigEntryException(array(__CLASS__, $configKey), self::EXCEPTION_CONFIG_KEY_WAS_NOT_FOUND); } // Unset it + //* NOISY-DEBUG: */ printf('[%s:%d]: Unsetting configKey=%s ...' . PHP_EOL, __METHOD__, __LINE__, $configKey); unset(self::$configData[$configKey]); + + // Debug message + //* NOISY-DEBUG: */ printf('[%s:%d]: EXIT!' . PHP_EOL, __METHOD__, __LINE__); } /**