Procházet zdrojové kódy

Optimization: cache icons files (scan directories for the Icon selection edition widget) benefiting to each dashboard page (20% faster with PHP7 + OpCache + APCu)

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@4423 a333f486-631f-4898-b8df-5754b55c2be0
romainq před 8 roky
rodič
revize
79616493eb
1 změnil soubory, kde provedl 24 přidání a 1 odebrání
  1. 24 1
      application/forms.class.inc.php

+ 24 - 1
application/forms.class.inc.php

@@ -1368,6 +1368,29 @@ class RunTimeIconSelectionField extends DesignerIconSelectionField
 
 	static protected function FindIconsOnDisk($sBaseDir, $sDir = '')
 	{
+		$sKey = md5($sBaseDir.'/'.$sDir);
+		$sCacheFile = utils::GetCachePath().'available-icons-'.$sKey.'.php';
+		if (file_exists($sCacheFile))
+		{
+			require_once($sCacheFile);
+			$aFiles = AvailableIcons::$aIconFiles;
+		}
+		else
+		{
+			$aFiles = self::_FindIconsOnDisk($sBaseDir, $sDir);
+			$sAvailableIcons = '<?php'.PHP_EOL;
+			$sAvailableIcons .= '// Generated and used by '.__METHOD__.PHP_EOL;
+			$sAvailableIcons .= 'class AvailableIcons'.PHP_EOL;
+			$sAvailableIcons .= '{'.PHP_EOL;
+			$sAvailableIcons .= '   static $aIconFiles = '.var_export($aFiles, true).';'.PHP_EOL;
+			$sAvailableIcons .= '}'.PHP_EOL;
+			file_put_contents($sCacheFile, $sAvailableIcons);
+		}
+		return $aFiles;
+	}
+
+	static protected function _FindIconsOnDisk($sBaseDir, $sDir = '')
+	{
 		$aResult = array();
 		// Populate automatically the list of icon files
 		if ($hDir = @opendir($sBaseDir.'/'.$sDir))
@@ -1378,7 +1401,7 @@ class RunTimeIconSelectionField extends DesignerIconSelectionField
 				if (($sFile != '.') && ($sFile != '..') && ($sFile != 'lifecycle') && is_dir($sBaseDir.'/'.$sDir.'/'.$sFile))
 				{
 					$sDirSubPath = ($sDir == '') ? $sFile : $sDir.'/'.$sFile;
-					$aResult = array_merge($aResult, self::FindIconsOnDisk($sBaseDir, $sDirSubPath));
+					$aResult = array_merge($aResult, self::_FindIconsOnDisk($sBaseDir, $sDirSubPath));
 				}
 				if (preg_match("/\.(png|jpg|jpeg|gif)$/i", $sFile, $aMatches)) // png, jp(e)g and gif are considered valid
 				{