Symfony2 sah so vielversprechend, leistungsstark und flexibel aus. Also würden wir Symfony2 + mongodb für eines unserer Projekte verwenden. Aber es erschien zu langsam (Apache/2.2.25 + PHP/5.4.20). Derzeit ist die App ziemlich einfach. aber ich habe festgestellt, dass die httpd.exe die CPU bis zu 28% belastet, wenn eine einfache Seite geladen wird. Die Seite ist ziemlich lite - nur Benutzerprofilinformationen und die Liste seiner Beiträge. Ich kann mir gar nicht vorstellen, wie Hunderte von Benutzern bedient werden können (nicht einmal über Nummern wie 100k Nutzer), wenn die Leistung nicht viel besser ist.Symfony2 Leistungsoptimierung
Zum Beispiel ist die CPU-Auslastung 2% beim Öffnen der schweren 'Produkte' Seite des ActivationCloud Accounts (der eine gute Datenmenge abruft) (PHP + Smarty + SQL).
Nach einem Blick auf Xdebug Ausgang nehmen, habe ich festgestellt, dass ein gret viel Zeit 20% von ClassLoader- genutzt wird> loadclass (...) - 265 Anrufe
Nachdem Sie die folgenden Schritte ausführen:
* generierte Klasse Karte
php composer.phar dump-autoload --optimize
* installiert und aktiviert
APC[APC]
extension=php_apc.dll
apc.enabled=1
apc.shm_segments=1
;32M per WordPress install
apc.shm_size=128M
;Relative to the number of cached files (you may need to
watch your stats for a day or two to find out a good number)
apc.num_files_hint=7000
;Relative to the size of WordPress
apc.user_entries_hint=4096
;The number of seconds a cache entry is allowed to idle
in a slot before APC dumps the cache
apc.ttl=7200
apc.user_ttl=7200
apc.gc_ttl=3600
;Setting this to 0 will give you the best performance, as APC will
;not have to check the IO for changes. However, you must clear
;the APC cache to recompile already cached files. If you are still
;developing, updating your site daily in WP-ADMIN, and running W3TC
;set this to 1
apc.stat=1
;This MUST be 0, WP can have errors otherwise!
apc.include_once_override=0
;Only set to 1 while debugging
apc.enable_cli=0
;Allow 2 seconds after a file is created before
it is cached to prevent users from seeing half-written/weird pages
apc.file_update_protection=2
;Leave at 2M or lower. WordPress does't have any file sizes close to 2M
apc.max_file_size=2M
;Ignore files
apc.filters = "/var/www/apc.php"
apc.cache_by_default=1
apc.use_request_time=1
apc.slam_defense=0
apc.mmap_file_mask=/var/www/temp/apc.XXXXXX
apc.stat_ctime=0
apc.canonicalize=1
apc.write_lock=1
apc.report_autofilter=0
apc.rfc1867=0
apc.rfc1867_prefix =upload_
apc.rfc1867_name=APC_UPLOAD_PROGRESS
apc.rfc1867_freq=0
apc.rfc1867_ttl=3600
apc.lazy_classes=0
apc.lazy_functions=0
erwartet ein Wunder danach aber es ist nicht passiert.
* aktiviert loader APC-Klasse - in Symfony \ web \ app.php uncommented
/*
$loader = new ApcClassLoader('sf2', $loader);
$loader->register(true);
*/
Die ClassLoader-> loadclass (...) noch besser geworden 'Selbst' 11 statt 21
Ehrlich gesagt war ich schockiert von dem, was ich in xdebug sah :(viele wiederholte Anrufe wie Container-> get (...) -317 Aufrufe, DocumentManager-> getClassMeataData (...) - 301 Aufrufe. Völlig mehr als 2k Funktionsaufrufe, kaum zu glauben, dass.
Diese Pakete installiert sind:
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = array(
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
new Symfony\Bundle\TwigBundle\TwigBundle(),
new Symfony\Bundle\MonologBundle\MonologBundle(),
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
new Symfony\Bundle\AsseticBundle\AsseticBundle(),
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
new Doctrine\Bundle\MongoDBBundle\DoctrineMongoDBBundle(),
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
new HWI\Bundle\OAuthBundle\HWIOAuthBundle(),
new Knp\Bundle\MenuBundle\KnpMenuBundle(),
... our bundles ...
);
if (in_array($this->getEnvironment(), array('dev', 'test'))) {
$bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
$bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
$bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
}
return $bundles;
}
Es war traurig zu finden, dass Symfony2 bekam eine der schlimmsten Benchmark-Ergebnisse unter anderem PHP http://www.techempower.com/benchmarks/#section=data-r8&hw=i7&test=json&l=sg
Zugleich Francois Zaninotto in seinem Blog, sagte Frameworks http://symfony.com/blog/who-really-uses-symfony dass Yahoo Anwendungen Symfony2 für den Lesezeichen-Dienst, versuchte einige Anwendungen aus der Liste http://trac.symfony-project.org/wiki/ApplicationsDevelopedWithSymfony - sie suchen nicht langsam auch auf Quora http://www.quora.com/Who-is-using-Symfony2-in-production seine Sprache, dass dailymotion es auch verwendet.
Wie wird die Leistung akzeptabel?
Nicht sicher den Rest seiner Antwort auf php.ini, sondern als 1ed erwähnt; Stellen Sie sicher, dass Sie alle drei Doctrine-Caches eingeschaltet haben, es macht einen großen Unterschied. Führen Sie diese Tests auch in der Prod- oder Entwicklungsumgebung aus? – Mathew