【问题标题】:Doctrine 2 configuration and performance原则 2 配置和性能
【发布时间】:2013-02-26 23:31:00
【问题描述】:

我的本​​地主机上的 Doctrine 2 有一些问题。仅使用一个查询的一页在大约 1.5 秒内加载到本地主机上。同时,在远程服务器上加载大约需要 300 毫秒 (http://gieromaniak.pl/contact)。我不知道可能出了什么问题。是 Doctrine 2 配置还是其他?或者我的服务器上没有一些 PHP 扩展(WAMP - Apache 2.4.2、PHP 5.4.3)?

不过,我包含了我的 Doctrine 配置文件的源代码:

<?php
use Doctrine\Common\ClassLoader,
    Doctrine\ORM\Configuration,
    Doctrine\ORM\EntityManager,
    Doctrine\DBAL\Types\Type,
    Doctrine\Common\Cache\ArrayCache,
    Doctrine\DBAL\Logging\EchoSqlLogger;


// include the class loader directly
require_once __DIR__ . '/Doctrine/Common/ClassLoader.php';

$doctrineClassLoader = new ClassLoader('Doctrine', __DIR__ . '/');
$doctrineClassLoader->register();

Config::load('base');
Config::load('database');

if(Config::get('base.mode') == 'development') {
    $bProxyGen = TRUE;
} else {
    $bProxyGen = FALSE;
}

// Set up caches
$cache = new ArrayCache;
$config = new Configuration;
$config->setMetadataCacheImpl($cache);
$config->setQueryCacheImpl($cache);

// Metadata Driver
$driverImpl = $config->newDefaultAnnotationDriver($models);
$config->setMetadataDriverImpl($driverImpl);

// Proxy configuration
$config->setProxyDir(PATH_ROOT.Config::get('database.proxy_dir'));
$config->setProxyNamespace(Config::get('database.proxy_namespace'));
$config->setAutoGenerateProxyClasses($bProxyGen);

// Database connection information
$connectionOptions = array(
    'driver' => 'pdo_mysql',
    'charset' => 'utf8',

    'dbname' => 'dbname',
    'user' => 'username',
    'password' => 'password',
);

// Create EntityManager
$entityManager = EntityManager::create($connectionOptions, $config);

提前感谢您的帮助!

【问题讨论】:

  • 你在远程服务器上的服务器配置是什么?
  • @bleuscyther PHP 5.3.21, Linux, Apache 2. 还需要别的吗?
  • 我曾经将 Wamp 作为本地机器测试。我切换到 Xampp,但我可以确认 Wamp/Xampp/Windows 上的过程比 Linux 上的要慢。此外,如果您想提高性能,您应该使用代理和缓存。 docs.doctrine-project.org/en/latest/reference/…
  • 本地有操作码缓存吗?因为这有很大的不同。还可以考虑使用元数据缓存,尤其是在您的配置是注释驱动的情况下。
  • @bleuscyther 如您所见,我正在使用 ArrayCache 和代理。但是,不知道为什么,代理类(“CG”等)没有在所需的目录中生成(在远程服务器上没关系)。

标签: php performance configuration doctrine-orm wamp


【解决方案1】:

我建议安装 apc 并提高 mysql 性能:

安装 APC

我强烈建议使用 Wamp 服务器 (x86),x64 版本的 windows 的 apc.dll 不能正常工作。

按照this 教程进行以下修改:

  • link to apc.dll
  • 从您的 phpinfo() 中找到 Zend Extension BuildPHP Extension Build;您可以将 http://localhost/?phpinfo=1 用于您的 WAMP 本地主机
  • Zend Extension Build 应该是这样的:

API220100525,TS,VC9

  • 注意TS字,可以为空;看看他们是否是一个不同的词,比如 NTS
  • 根据TS或NTS值下载最新版本
  • 重命名 dll php_apc.dll
  • 将 php_apc.dll 放入YourWampFolder/bin/php/ext/
  • wamp 中有 2 个 php.ini 文件:wamp\bin\apache\apacheX.X.XX\bin\wamp\bin\php\phpX.X.X\(将 X.X... 替换为您的版本) 两个都写extension=php_apc.dll;
  • 关闭/打开 Wamp(不重启)
  • 从wamp图标->php->PHP扩展->php_apc.dll检查激活
  • 重启 wamp

您可以通过将 apc.php 文件下载到您的项目目录中来验证 APC 是否正在运行。您将在压缩的file available at the PECL website 中找到它。获取最新版本。

现在从您的浏览器:http://localhost/yourproject/apc.php

您可以从 php.ini 修改 APC 的设置(两者都尝试)

示例:

//php.ini
...

[APC]
apc.ttl=7200
apc.user_ttl=7200
apc.shm_segments=3
apc.shm_size=90M
apc.max_file_size = 2M
apc.include_once_override = 1

以防万一你想清除缓存

// resetcache.php
<?php
if ( $_GET['pass'] == 'yes') {
if(function_exists('apc_clear_cache')){
        if (apc_clear_cache() && apc_clear_cache('user'))
                print 'All Clear!';
        else
                print 'Clearing Failed!';

        print '<pre>';
        print_r(apc_cache_info());
        print '</pre>';
}else print "fuction_doesn't exist";
        } else {
        print 'Authenticate, please!';
}

我设置了一些额外的安全措施来防止不必要的访问,但在生产服务器中不包括 apc.phpclearcache.php

提高 Mysql 性能

  1. link1
  2. link2
  3. link3

清理本地机器

您可以清理浏览器缓存和临时文件夹。 CCleaner

这就是我过去为提高本地机器上 Doctrine2 的速度所做的一切。 您还可以监控 Mysql/Apache 进程使用的 RAM,看看是否不需要购买/分配更多 RAM。

【讨论】:

猜你喜欢
  • 2012-06-30
  • 2017-02-22
  • 2011-09-17
  • 2019-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-10
相关资源
最近更新 更多