Commit 769acfbd by Qiang Xue

Merge pull request #550 from cebe/speed

Improve application speed by using classMap for autoloader
parents 7dfae28b 2fa52d8c
...@@ -23,3 +23,4 @@ class Yii extends \yii\YiiBase ...@@ -23,3 +23,4 @@ class Yii extends \yii\YiiBase
} }
spl_autoload_register(array('Yii', 'autoload')); spl_autoload_register(array('Yii', 'autoload'));
Yii::$classMap = include(__DIR__ . '/classes.php');
...@@ -337,9 +337,9 @@ class YiiBase ...@@ -337,9 +337,9 @@ class YiiBase
$className = ltrim($className, '\\'); $className = ltrim($className, '\\');
if (isset(self::$classMap[$className])) { if (isset(self::$classMap[$className])) {
$classFile = static::getAlias(self::$classMap[$className]); $classFile = self::$classMap[$className];
if (!is_file($classFile)) { if ($classFile[0] === '@') {
throw new InvalidConfigException("Class file does not exist: $classFile"); $classFile = static::getAlias($classFile);
} }
} else { } else {
// follow PSR-0 to determine the class file // follow PSR-0 to determine the class file
......
...@@ -126,8 +126,8 @@ abstract class Application extends Module ...@@ -126,8 +126,8 @@ abstract class Application extends Module
set_exception_handler(array($this, 'handleException')); set_exception_handler(array($this, 'handleException'));
set_error_handler(array($this, 'handleError'), error_reporting()); set_error_handler(array($this, 'handleError'), error_reporting());
// Allocating twice more than required to display memory exhausted error // Allocating twice more than required to display memory exhausted error
// in case of trying to allocate last 1 byte while all memory is taken. // in case of trying to allocate last 1 byte while all memory is taken. 1024 * 256 bytes
$this->_memoryReserve = str_repeat('x', 1024 * 256); $this->_memoryReserve = str_repeat('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 1024);
register_shutdown_function(array($this, 'handleFatalError')); register_shutdown_function(array($this, 'handleFatalError'));
} }
} }
......
<?php
/**
* This is a map of all classes included in Yii framework.
* It is used to speed up autoloading.
*/
return 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',
);
...@@ -167,7 +167,7 @@ class UrlManager extends Component ...@@ -167,7 +167,7 @@ class UrlManager extends Component
public function parseRequest($request) public function parseRequest($request)
{ {
if ($this->enablePrettyUrl) { if ($this->enablePrettyUrl) {
$pathInfo = $request->pathInfo; $pathInfo = $request->getPathInfo();
/** @var $rule UrlRule */ /** @var $rule UrlRule */
foreach ($this->rules as $rule) { foreach ($this->rules as $rule) {
if (($result = $rule->parseRequest($this, $request)) !== false) { if (($result = $rule->parseRequest($this, $request)) !== false) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment