From 2643daa534640773a0533a66366bf9718f8d743a Mon Sep 17 00:00:00 2001 From: Carsten Brandt Date: Mon, 17 Jun 2013 16:38:21 +0200 Subject: [PATCH] Improve application speed by using classMap for autoloader --- framework/yii/YiiBase.php | 239 ++++++++++++++++++++++++++++++++++++- framework/yii/base/Application.php | 4 +- framework/yii/web/UrlManager.php | 2 +- 3 files changed, 239 insertions(+), 6 deletions(-) diff --git a/framework/yii/YiiBase.php b/framework/yii/YiiBase.php index ee75822..8aecbdc 100644 --- a/framework/yii/YiiBase.php +++ b/framework/yii/YiiBase.php @@ -337,9 +337,9 @@ class YiiBase $className = ltrim($className, '\\'); if (isset(self::$classMap[$className])) { - $classFile = static::getAlias(self::$classMap[$className]); - if (!is_file($classFile)) { - throw new InvalidConfigException("Class file does not exist: $classFile"); + $classFile = self::$classMap[$className]; + if ($classFile[0] === '@') { + $classFile = static::getAlias($classFile); } } else { // follow PSR-0 to determine the class file @@ -645,3 +645,236 @@ YiiBase::$aliases = array( '@yii' => __DIR__, ), ); + +YiiBase::$classMap = array( +'yii\YiiBase' => YII_PATH . '/YiiBase.php', +'yii\debug\Module' => YII_PATH . '/debug/Module.php', +'yii\debug\controllers\DefaultController' => YII_PATH . '/debug/controllers/DefaultController.php', +'yii\debug\Toolbar' => YII_PATH . '/debug/Toolbar.php', +'yii\web\PageCache' => YII_PATH . '/web/PageCache.php', +'yii\web\CaptchaAction' => YII_PATH . '/web/CaptchaAction.php', +'yii\web\HttpException' => YII_PATH . '/web/HttpException.php', +'yii\web\Application' => YII_PATH . '/web/Application.php', +'yii\web\CacheSession' => YII_PATH . '/web/CacheSession.php', +'yii\web\UserEvent' => YII_PATH . '/web/UserEvent.php', +'yii\web\VerbFilter' => YII_PATH . '/web/VerbFilter.php', +'yii\web\JsExpression' => YII_PATH . '/web/JsExpression.php', +'yii\web\CookieCollection' => YII_PATH . '/web/CookieCollection.php', +'yii\web\ResponseFormatter' => YII_PATH . '/web/ResponseFormatter.php', +'yii\web\AccessRule' => YII_PATH . '/web/AccessRule.php', +'yii\web\AssetManager' => YII_PATH . '/web/AssetManager.php', +'yii\web\Session' => YII_PATH . '/web/Session.php', +'yii\web\AccessControl' => YII_PATH . '/web/AccessControl.php', +'yii\web\DbSession' => YII_PATH . '/web/DbSession.php', +'yii\web\IAssetConverter' => YII_PATH . '/web/IAssetConverter.php', +'yii\web\Identity' => YII_PATH . '/web/Identity.php', +'yii\web\Controller' => YII_PATH . '/web/Controller.php', +'yii\web\User' => YII_PATH . '/web/User.php', +'yii\web\HttpCache' => YII_PATH . '/web/HttpCache.php', +'yii\web\UrlManager' => YII_PATH . '/web/UrlManager.php', +'yii\web\Request' => YII_PATH . '/web/Request.php', +'yii\web\Cookie' => YII_PATH . '/web/Cookie.php', +'yii\web\UploadedFile' => YII_PATH . '/web/UploadedFile.php', +'yii\web\ResponseEvent' => YII_PATH . '/web/ResponseEvent.php', +'yii\web\UrlRule' => YII_PATH . '/web/UrlRule.php', +'yii\web\XmlResponseFormatter' => YII_PATH . '/web/XmlResponseFormatter.php', +'yii\web\Response' => YII_PATH . '/web/Response.php', +'yii\web\SessionIterator' => YII_PATH . '/web/SessionIterator.php', +'yii\web\AssetBundle' => YII_PATH . '/web/AssetBundle.php', +'yii\web\AssetConverter' => YII_PATH . '/web/AssetConverter.php', +'yii\web\HeaderCollection' => YII_PATH . '/web/HeaderCollection.php', +'yii\logging\Target' => YII_PATH . '/logging/Target.php', +'yii\logging\DebugTarget' => YII_PATH . '/logging/DebugTarget.php', +'yii\logging\Router' => YII_PATH . '/logging/Router.php', +'yii\logging\Logger' => YII_PATH . '/logging/Logger.php', +'yii\logging\EmailTarget' => YII_PATH . '/logging/EmailTarget.php', +'yii\logging\DbTarget' => YII_PATH . '/logging/DbTarget.php', +'yii\logging\FileTarget' => YII_PATH . '/logging/FileTarget.php', +'yii\widgets\ActiveField' => YII_PATH . '/widgets/ActiveField.php', +'yii\widgets\Captcha' => YII_PATH . '/widgets/Captcha.php', +'yii\widgets\ListPager' => YII_PATH . '/widgets/ListPager.php', +'yii\widgets\LinkPager' => YII_PATH . '/widgets/LinkPager.php', +'yii\widgets\MaskedInput' => YII_PATH . '/widgets/MaskedInput.php', +'yii\widgets\InputWidget' => YII_PATH . '/widgets/InputWidget.php', +'yii\widgets\ActiveForm' => YII_PATH . '/widgets/ActiveForm.php', +'yii\widgets\ContentDecorator' => YII_PATH . '/widgets/ContentDecorator.php', +'yii\widgets\Breadcrumbs' => YII_PATH . '/widgets/Breadcrumbs.php', +'yii\widgets\Block' => YII_PATH . '/widgets/Block.php', +'yii\widgets\FragmentCache' => YII_PATH . '/widgets/FragmentCache.php', +'yii\widgets\Menu' => YII_PATH . '/widgets/Menu.php', +'yii\rbac\PhpManager' => YII_PATH . '/rbac/PhpManager.php', +'yii\rbac\Item' => YII_PATH . '/rbac/Item.php', +'yii\rbac\Manager' => YII_PATH . '/rbac/Manager.php', +'yii\rbac\Assignment' => YII_PATH . '/rbac/Assignment.php', +'yii\rbac\DbManager' => YII_PATH . '/rbac/DbManager.php', +'yii\behaviors\AutoTimestamp' => YII_PATH . '/behaviors/AutoTimestamp.php', +'yii\caching\Cache' => YII_PATH . '/caching/Cache.php', +'yii\caching\XCache' => YII_PATH . '/caching/XCache.php', +'yii\caching\DbDependency' => YII_PATH . '/caching/DbDependency.php', +'yii\caching\DbCache' => YII_PATH . '/caching/DbCache.php', +'yii\caching\Dependency' => YII_PATH . '/caching/Dependency.php', +'yii\caching\ApcCache' => YII_PATH . '/caching/ApcCache.php', +'yii\caching\MemCacheServer' => YII_PATH . '/caching/MemCacheServer.php', +'yii\caching\ZendDataCache' => YII_PATH . '/caching/ZendDataCache.php', +'yii\caching\MemCache' => YII_PATH . '/caching/MemCache.php', +'yii\caching\GroupDependency' => YII_PATH . '/caching/GroupDependency.php', +'yii\caching\ChainedDependency' => YII_PATH . '/caching/ChainedDependency.php', +'yii\caching\WinCache' => YII_PATH . '/caching/WinCache.php', +'yii\caching\FileCache' => YII_PATH . '/caching/FileCache.php', +'yii\caching\FileDependency' => YII_PATH . '/caching/FileDependency.php', +'yii\caching\ExpressionDependency' => YII_PATH . '/caching/ExpressionDependency.php', +'yii\caching\DummyCache' => YII_PATH . '/caching/DummyCache.php', +'yii\i18n\Formatter' => YII_PATH . '/i18n/Formatter.php', +'yii\i18n\GettextFile' => YII_PATH . '/i18n/GettextFile.php', +'yii\i18n\I18N' => YII_PATH . '/i18n/I18N.php', +'yii\i18n\PhpMessageSource' => YII_PATH . '/i18n/PhpMessageSource.php', +'yii\i18n\GettextPoFile' => YII_PATH . '/i18n/GettextPoFile.php', +'yii\i18n\data\plurals' => YII_PATH . '/i18n/data/plurals.php', +'yii\i18n\DbMessageSource' => YII_PATH . '/i18n/DbMessageSource.php', +'yii\i18n\GettextMessageSource' => YII_PATH . '/i18n/GettextMessageSource.php', +'yii\i18n\MessageSource' => YII_PATH . '/i18n/MessageSource.php', +'yii\i18n\MissingTranslationEvent' => YII_PATH . '/i18n/MissingTranslationEvent.php', +'yii\i18n\GettextMoFile' => YII_PATH . '/i18n/GettextMoFile.php', +'yii\data\Pagination' => YII_PATH . '/data/Pagination.php', +'yii\data\Sort' => YII_PATH . '/data/Sort.php', +'yii\validators\RequiredValidator' => YII_PATH . '/validators/RequiredValidator.php', +'yii\validators\NumberValidator' => YII_PATH . '/validators/NumberValidator.php', +'yii\validators\BooleanValidator' => YII_PATH . '/validators/BooleanValidator.php', +'yii\validators\UniqueValidator' => YII_PATH . '/validators/UniqueValidator.php', +'yii\validators\StringValidator' => YII_PATH . '/validators/StringValidator.php', +'yii\validators\UrlValidator' => YII_PATH . '/validators/UrlValidator.php', +'yii\validators\EmailValidator' => YII_PATH . '/validators/EmailValidator.php', +'yii\validators\CaptchaValidator' => YII_PATH . '/validators/CaptchaValidator.php', +'yii\validators\DefaultValueValidator' => YII_PATH . '/validators/DefaultValueValidator.php', +'yii\validators\CompareValidator' => YII_PATH . '/validators/CompareValidator.php', +'yii\validators\RangeValidator' => YII_PATH . '/validators/RangeValidator.php', +'yii\validators\Validator' => YII_PATH . '/validators/Validator.php', +'yii\validators\FilterValidator' => YII_PATH . '/validators/FilterValidator.php', +'yii\validators\FileValidator' => YII_PATH . '/validators/FileValidator.php', +'yii\validators\RegularExpressionValidator' => YII_PATH . '/validators/RegularExpressionValidator.php', +'yii\validators\InlineValidator' => YII_PATH . '/validators/InlineValidator.php', +'yii\validators\DateValidator' => YII_PATH . '/validators/DateValidator.php', +'yii\validators\ExistValidator' => YII_PATH . '/validators/ExistValidator.php', +'yii\base\Formatter' => YII_PATH . '/base/Formatter.php', +'yii\base\UnknownMethodException' => YII_PATH . '/base/UnknownMethodException.php', +'yii\base\Application' => YII_PATH . '/base/Application.php', +'yii\base\ErrorException' => YII_PATH . '/base/ErrorException.php', +'yii\base\ActionEvent' => YII_PATH . '/base/ActionEvent.php', +'yii\base\UserException' => YII_PATH . '/base/UserException.php', +'yii\base\Module' => YII_PATH . '/base/Module.php', +'yii\base\ViewEvent' => YII_PATH . '/base/ViewEvent.php', +'yii\base\Action' => YII_PATH . '/base/Action.php', +'yii\base\ViewRenderer' => YII_PATH . '/base/ViewRenderer.php', +'yii\base\ActionFilter' => YII_PATH . '/base/ActionFilter.php', +'yii\base\Theme' => YII_PATH . '/base/Theme.php', +'yii\base\Controller' => YII_PATH . '/base/Controller.php', +'yii\base\View' => YII_PATH . '/base/View.php', +'yii\base\UnknownClassException' => YII_PATH . '/base/UnknownClassException.php', +'yii\base\ErrorHandler' => YII_PATH . '/base/ErrorHandler.php', +'yii\base\Request' => YII_PATH . '/base/Request.php', +'yii\base\Object' => YII_PATH . '/base/Object.php', +'yii\base\Behavior' => YII_PATH . '/base/Behavior.php', +'yii\base\Exception' => YII_PATH . '/base/Exception.php', +'yii\base\Event' => YII_PATH . '/base/Event.php', +'yii\base\ModelEvent' => YII_PATH . '/base/ModelEvent.php', +'yii\base\InvalidConfigException' => YII_PATH . '/base/InvalidConfigException.php', +'yii\base\Component' => YII_PATH . '/base/Component.php', +'yii\base\Response' => YII_PATH . '/base/Response.php', +'yii\base\InvalidParamException' => YII_PATH . '/base/InvalidParamException.php', +'yii\base\Model' => YII_PATH . '/base/Model.php', +'yii\base\UnknownPropertyException' => YII_PATH . '/base/UnknownPropertyException.php', +'yii\base\Arrayable' => YII_PATH . '/base/Arrayable.php', +'yii\base\InvalidRouteException' => YII_PATH . '/base/InvalidRouteException.php', +'yii\base\InlineAction' => YII_PATH . '/base/InlineAction.php', +'yii\base\NotSupportedException' => YII_PATH . '/base/NotSupportedException.php', +'yii\base\Widget' => YII_PATH . '/base/Widget.php', +'yii\base\InvalidCallException' => YII_PATH . '/base/InvalidCallException.php', +'yii\helpers\VarDumper' => YII_PATH . '/helpers/VarDumper.php', +'yii\helpers\FileHelper' => YII_PATH . '/helpers/FileHelper.php', +'yii\helpers\Console' => YII_PATH . '/helpers/Console.php', +'yii\helpers\HtmlPurifier' => YII_PATH . '/helpers/HtmlPurifier.php', +'yii\helpers\SecurityHelper' => YII_PATH . '/helpers/SecurityHelper.php', +'yii\helpers\Inflector' => YII_PATH . '/helpers/Inflector.php', +'yii\helpers\Markdown' => YII_PATH . '/helpers/Markdown.php', +'yii\helpers\Html' => YII_PATH . '/helpers/Html.php', +'yii\helpers\base\VarDumper' => YII_PATH . '/helpers/base/VarDumper.php', +'yii\helpers\base\FileHelper' => YII_PATH . '/helpers/base/FileHelper.php', +'yii\helpers\base\Console' => YII_PATH . '/helpers/base/Console.php', +'yii\helpers\base\HtmlPurifier' => YII_PATH . '/helpers/base/HtmlPurifier.php', +'yii\helpers\base\SecurityHelper' => YII_PATH . '/helpers/base/SecurityHelper.php', +'yii\helpers\base\Inflector' => YII_PATH . '/helpers/base/Inflector.php', +'yii\helpers\base\Markdown' => YII_PATH . '/helpers/base/Markdown.php', +'yii\helpers\base\Html' => YII_PATH . '/helpers/base/Html.php', +'yii\helpers\base\StringHelper' => YII_PATH . '/helpers/base/StringHelper.php', +'yii\helpers\base\Json' => YII_PATH . '/helpers/base/Json.php', +'yii\helpers\base\ArrayHelper' => YII_PATH . '/helpers/base/ArrayHelper.php', +'yii\helpers\StringHelper' => YII_PATH . '/helpers/StringHelper.php', +'yii\helpers\Json' => YII_PATH . '/helpers/Json.php', +'yii\helpers\ArrayHelper' => YII_PATH . '/helpers/ArrayHelper.php', +'yii\bootstrap\Collapse' => YII_PATH . '/bootstrap/Collapse.php', +'yii\bootstrap\Progress' => YII_PATH . '/bootstrap/Progress.php', +'yii\bootstrap\Dropdown' => YII_PATH . '/bootstrap/Dropdown.php', +'yii\bootstrap\Alert' => YII_PATH . '/bootstrap/Alert.php', +'yii\bootstrap\Carousel' => YII_PATH . '/bootstrap/Carousel.php', +'yii\bootstrap\NavBar' => YII_PATH . '/bootstrap/NavBar.php', +'yii\bootstrap\Button' => YII_PATH . '/bootstrap/Button.php', +'yii\bootstrap\Modal' => YII_PATH . '/bootstrap/Modal.php', +'yii\bootstrap\TypeAhead' => YII_PATH . '/bootstrap/TypeAhead.php', +'yii\bootstrap\ButtonDropdown' => YII_PATH . '/bootstrap/ButtonDropdown.php', +'yii\bootstrap\ButtonGroup' => YII_PATH . '/bootstrap/ButtonGroup.php', +'yii\bootstrap\Nav' => YII_PATH . '/bootstrap/Nav.php', +'yii\bootstrap\Widget' => YII_PATH . '/bootstrap/Widget.php', +'yii\bootstrap\Tabs' => YII_PATH . '/bootstrap/Tabs.php', +'yii\jui\DatePicker' => YII_PATH . '/jui/DatePicker.php', +'yii\jui\Accordion' => YII_PATH . '/jui/Accordion.php', +'yii\jui\Spinner' => YII_PATH . '/jui/Spinner.php', +'yii\jui\InputWidget' => YII_PATH . '/jui/InputWidget.php', +'yii\jui\Droppable' => YII_PATH . '/jui/Droppable.php', +'yii\jui\ProgressBar' => YII_PATH . '/jui/ProgressBar.php', +'yii\jui\Draggable' => YII_PATH . '/jui/Draggable.php', +'yii\jui\AutoComplete' => YII_PATH . '/jui/AutoComplete.php', +'yii\jui\Dialog' => YII_PATH . '/jui/Dialog.php', +'yii\jui\Selectable' => YII_PATH . '/jui/Selectable.php', +'yii\jui\assets' => YII_PATH . '/jui/assets.php', +'yii\jui\Widget' => YII_PATH . '/jui/Widget.php', +'yii\jui\Sortable' => YII_PATH . '/jui/Sortable.php', +'yii\jui\Menu' => YII_PATH . '/jui/Menu.php', +'yii\jui\Resizable' => YII_PATH . '/jui/Resizable.php', +'yii\jui\Tabs' => YII_PATH . '/jui/Tabs.php', +'yii\console\Application' => YII_PATH . '/console/Application.php', +'yii\console\Controller' => YII_PATH . '/console/Controller.php', +'yii\console\Request' => YII_PATH . '/console/Request.php', +'yii\console\Exception' => YII_PATH . '/console/Exception.php', +'yii\console\controllers\AssetController' => YII_PATH . '/console/controllers/AssetController.php', +'yii\console\controllers\MessageController' => YII_PATH . '/console/controllers/MessageController.php', +'yii\console\controllers\MigrateController' => YII_PATH . '/console/controllers/MigrateController.php', +'yii\console\controllers\HelpController' => YII_PATH . '/console/controllers/HelpController.php', +'yii\console\controllers\CacheController' => YII_PATH . '/console/controllers/CacheController.php', +'yii\console\Response' => YII_PATH . '/console/Response.php', +'yii\db\StaleObjectException' => YII_PATH . '/db/StaleObjectException.php', +'yii\db\Connection' => YII_PATH . '/db/Connection.php', +'yii\db\Expression' => YII_PATH . '/db/Expression.php', +'yii\db\TableSchema' => YII_PATH . '/db/TableSchema.php', +'yii\db\Transaction' => YII_PATH . '/db/Transaction.php', +'yii\db\QueryBuilder' => YII_PATH . '/db/QueryBuilder.php', +'yii\db\Command' => YII_PATH . '/db/Command.php', +'yii\db\Schema' => YII_PATH . '/db/Schema.php', +'yii\db\ActiveRelation' => YII_PATH . '/db/ActiveRelation.php', +'yii\db\pgsql\QueryBuilder' => YII_PATH . '/db/pgsql/QueryBuilder.php', +'yii\db\pgsql\Schema' => YII_PATH . '/db/pgsql/Schema.php', +'yii\db\Exception' => YII_PATH . '/db/Exception.php', +'yii\db\sqlite\QueryBuilder' => YII_PATH . '/db/sqlite/QueryBuilder.php', +'yii\db\sqlite\Schema' => YII_PATH . '/db/sqlite/Schema.php', +'yii\db\ColumnSchema' => YII_PATH . '/db/ColumnSchema.php', +'yii\db\mysql\QueryBuilder' => YII_PATH . '/db/mysql/QueryBuilder.php', +'yii\db\mysql\Schema' => YII_PATH . '/db/mysql/Schema.php', +'yii\db\DataReader' => YII_PATH . '/db/DataReader.php', +'yii\db\ActiveQuery' => YII_PATH . '/db/ActiveQuery.php', +'yii\db\mssql\PDO' => YII_PATH . '/db/mssql/PDO.php', +'yii\db\mssql\QueryBuilder' => YII_PATH . '/db/mssql/QueryBuilder.php', +'yii\db\mssql\Schema' => YII_PATH . '/db/mssql/Schema.php', +'yii\db\mssql\SqlsrvPDO' => YII_PATH . '/db/mssql/SqlsrvPDO.php', +'yii\db\Migration' => YII_PATH . '/db/Migration.php', +'yii\db\Query' => YII_PATH . '/db/Query.php', +'yii\db\ActiveRecord' => YII_PATH . '/db/ActiveRecord.php', +); diff --git a/framework/yii/base/Application.php b/framework/yii/base/Application.php index 9eeb53b..4d431b3 100644 --- a/framework/yii/base/Application.php +++ b/framework/yii/base/Application.php @@ -126,8 +126,8 @@ abstract class Application extends Module set_exception_handler(array($this, 'handleException')); set_error_handler(array($this, 'handleError'), error_reporting()); // Allocating twice more than required to display memory exhausted error - // in case of trying to allocate last 1 byte while all memory is taken. - $this->_memoryReserve = str_repeat('x', 1024 * 256); + // in case of trying to allocate last 1 byte while all memory is taken. 1024 * 256 bytes + $this->_memoryReserve = str_repeat('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 1024); register_shutdown_function(array($this, 'handleFatalError')); } } diff --git a/framework/yii/web/UrlManager.php b/framework/yii/web/UrlManager.php index 4478a6c..9a616c5 100644 --- a/framework/yii/web/UrlManager.php +++ b/framework/yii/web/UrlManager.php @@ -167,7 +167,7 @@ class UrlManager extends Component public function parseRequest($request) { if ($this->enablePrettyUrl) { - $pathInfo = $request->pathInfo; + $pathInfo = $request->getPathInfo(); /** @var $rule UrlRule */ foreach ($this->rules as $rule) { if (($result = $rule->parseRequest($this, $request)) !== false) {