Resumen 2013 y objetivos 2014

2012 fue un año muy intenso pero 2013 tampoco se ha quedado atrás

La gran decisión

Empecé el año todavía en SocialPoint. Probablemente la aplicación más grande de Symfony y uno de los proyectos más importantes de Europa sin ninguna duda. Rodeado de buenos amigos, excelentes ingenieros, pero algo cansado del ritmo frenético de los meses anteriores. Y ya llevaba unos meses dándole vueltas a la posibilidad de marcharme fuera.

Y el 22 de Enero llegó el gran día. Me levanté a las 5AM, me fui al aeropuerto y me planté en la parada de metro de St Paul en Londres para hacer la entrevista final con BrightTalk. El 21 había nevado y hubo un ligero retraso en el vuelo y el tren. A las 11 llegaba a las oficinas de BrightTalk donde me tuvieron casi 5h de entrevistas de todo tipo: técnicas, personales, manejo de conflictos… y conocí a los que serían mis futuros compañeros. Completamente agotado, llegué a casa a eso de la 1AM.

Yo no las tenías todas, pero el gran Marcos Quesada no tenía dudas. La aventura de SocialPoint terminaba para mí y empezaba mi aventura en el extranjero. Al cabo de 3 días llegó la oferta y tras darle MUCHAS MUCHAS MUCHAS vueltas y consultarlo con la almohada y mi mujer, tomamos la gran decisión.

Todavía recuerdo el día de despedida de SocialPoint. Sólo pude decirles con la voz entrecortada GRACIAS a todo el equipo. Me habían apoyado desde el primer hasta el último día y la verdad es que tuve que hacer muchísimos esfuerzos para no llorar aquel día. Almenos no delante de ellos…

8 meses fuera…

Ya escribí un post al respecto aquí. Es muy difícil expresar con palabras el torrente de emociones y experiencias que supone trabajar en un país diferente a donde naciste. Todo pasa súper rápido y todo es muy intenso.

Me gustaría destacar el tema de las diferencias culturales. Hay que entender que estamos fuera y las cosas se hacen diferente, las comunicaciones entre personas son diferentes, los piques también y hay que jugar al mismo juego que ellos. Me ha costado un poco entender esto y tengo mucho que agradecer a mi compañera Johanna Cherry por hacerme ver muchas cosas que percibía de manera incorrecta.

A día de hoy, empezamos a estar integrados. Hemos conocido a un montón de gente y la verdad es que no vemos muy claro si vamos a volver a medio plazo. De momento, seguimos en Hailo y veremos dónde nos lleva el viento el año que viene.

Cogiendo el gusto a las charlas…

En enero di una charla en Betabeers Barcelona sobre Buenas Prácticas en proyectos tecnológicos. Una charla algo diferente, poco técnica, claramente influenciada por Carlos Buenosvinos. Aunque apenas pudimos trabajar juntos unos meses en Emagister, siempre ha sido una gran fuente de inspiración para mí. Igual que Christian Soronellas. Ojalá algún día volvamos a coincidir en algún proyecto.

Y en Junio, llegó deSymfony. Mi charla tenía un título bastante ambicioso. Escalabilidad y alto rendimiento con Symfony2. El auditorio de la universidad de Madrid estaba muy lleno. Y me supo mal por el gran Vicent Soria ya que su charla era super interesante y seguro que él me robó algo de audiencia y yo le robé a él otro buen pico de gente. Si escucháis la charla, veréis que estaba MUY nervioso al principio. Pero salió bastante bien. Quizás la mejor charla hasta la fecha. Gracias deSymfony por dejarme el micro de nuevo para contar mis tonterietas.

No contento con esto, le eché bemoles y envié propuesta a PHP London. Era el mes de Agosto y pensé… no vendrá ni Dios. Redis everywhere fue el título. Al final, casi 100 personas y el grandísimo Derick Rethans en primera fila. El mes anterior había venido Rasmus… casi nada. El contenido de la charla creo que es muy correcto pero claramente tengo que mejorar mi inglés. Por suerte, Londres es muy tolerante en este sentido :) . 5300 visualizaciones hasta la fecha, not bad. Hasta antirez ha visto las slides!

Intenté presentar tanto en Symfony London como en la SymfonyCon pero mis propuestas fueron rechazadas. Habrá que mejorar para volverlo a intentar la próxima vez.

Y me han aceptado en SunshinePHP y en PHPUK. Así que en Febrero estaré dando la brasa por ahí con mi inglés. A ver cómo sale!

Revisando objetivos de 2013

- Seguir mejorando en Symfony2 <- MEH... ya no hago Symfony salvo proyectos personales así que lo dejamos en estable.
- Presentar en algún evento fuera de España <- DONE!
- Sacarme las certificaciones de MySQL <- Me saqué la MYSQL5-DEV I. La acaban de cambiar. Y creo que paso de volver a hacerla
- Sacarme la certificación de Symfony <- Con el cambio de certificación, me la dieron aprobada. Poco digno quizás jajaja
- Aprender algo de Python y Erlang <- Erlang psche y aprendiendo Go
- Lo de Front-End… lo doy por imposible… bueno va aprender Twitter Bootstrap :) <- Proyecto personal en HTML5/CSS3 coming soon!

Objetivos 2014

- Lanzar el proyecto personal que llevo liado hace meses. Queda muy poco!
- Dar alguna charla en un evento que no sea solo PHP. Más difícil todavía!
- Mejorar en Cassandra, Go, Erlang, RabbitMQ, NSQ
- Estudiar Algoritmos. Hice el Algorithms I de Coursera pero tengo que repetir, que soy muy malo
- Tomarme las cosas con más calma :)

Y vosotros… ¿cómo os ha ido el año? ¿Habéis cumplido los objetivos? ¿Retos para el año que viene?

4 meses en Londres – Experiencias

Este post no va de tecnología, o por lo menos no va a haber código. Sin embargo, voy a intentar resumir algunas experiencias que he tenido en mis primeros 4 meses en Londres. Tal vez con eso consiga animar (o incluso desanimar, y quizás ahorraros algo de sufrimiento) a todos aquellos que os estéis planteando dar el salto.

Todo viene de unos tweets cruzados con los grandes @asiermarques y @pgodel así que ya sabéis a quién culpar!

Ya os adelanto que creo que he tenido bastante suerte comparado con muchos compañeros españoles, así que quizás mi visión sea algo más optimista que la cruda realidad, pero intentaré ser realista.

Y si os gusta, os parece interesante, tenéis dudas concretas, etc… decídmelo por Twitter o en los comentarios del post y haré más posts al respecto. Y si no es así, pues no habrá muchos más posts como este :)

El idioma: fundamental

Tuve la gran suerte de que mis padres me llevaron al Instituto Americano de Barcelona desde los 5 años. En aquel momento me parecía un coñazo, era los sábados por la mañana y yo prefería jugar. Jamás he podido agradecerles lo suficiente el montón de dinero que se gastaron en que supiera hablar algo de inglés.

Para que os hagáis una idea de mi nivel antes de venir, y compararlo con el que podáis tener, os diré que en su día en COU (muchos ya no sabéis qué era eso :) ) me saqué el 1st Certificate con una A y allá por 2002 me saqué el Advanced con una B. Desde entonces, he intentado leer comics y ver películas y series en V.O. subtitulada. También por suerte, en el mundillo Internet es bastante frecuente tener compañeros de otros países y siempre practicas algo más de inglés que en otros trabajos, aunque como sabéis, no demasiado.

Debo decir que la verdad es que en Londres en especial la gente es bastante tolerante con los acentos (diablos, hasta hay gente que le parece interesante / sexy, aunque los franceses nos ganan en eso) y más o menos te puedes hacer entender y conseguir alimento sin demasiado esfuerzo (en la mayoría de bares hay mínimo un español atendiendo). Pero el problema suele ser entender sus acentos, sobretodo si son de naciones anglo-parlantes. Y es que entender a un escocés, a un neozelandés o el “precioso” acento Cockney es toda una odisea por más que hayamos estudiado años y años.

El proceso suele ser el siguiente: 2-3 entrevistas por Skype (salvo que estés por aquí de viaje y puedas arreglarlo para ir) y siempre hay una entrevista final presencial. Personalmente, me sigue costando horrores entender a la gente por teléfono / Skype comparado con el cara a cara, así que sumadle complejidad a todo esto.

Por tanto, si no te ves capaz de tener una conversación fluida, no solo técnicamente sino en general, te recomendaría que hicieras un intensivo de inglés orientado a hacer entrevistas o tendrás MUY complicado conseguir trabajo, por muy bueno que seas. Y es que aparte de ser bueno técnicamente, se valora también que encajes con el equipo y sobretodo que te puedas comunicar. Lo que ellos llaman “to be fluent”.

Venid con trabajo

Londres es una ciudad muy cara y es bastante complicado conseguir alojamiento decente sin un contrato de trabajo. Bueno, es complicado de todas maneras, pero sin contrato más :) .

Mucha gente, especialmente chavales jóvenes de otros sectores profesionales sin oportunidades en España vienen engañados pensando que encontrar trabajo es súper fácil. Se cogen sus 5mil euros de ahorros y piensan “mal me irá si en 3 meses no encuentro nada”. Y bueno, muchas veces no encuentran nada de lo suyo y acaban trabajando en hostelería con horarios muy duros y el salario mínimo. Y normalmente, los ahorros han volado. Y entonces, entran en la rueda de que viven al día, están agotados y dejan de buscar trabajo de su sector. No solo eso, sino que tampoco aprendes inglés con un trabajo así, lo cual limita tus posibilidades de encontrar lo que buscas.

Y los ingleses encantados, tienen gente muy currante, licenciada, preparada y contentos de tener el salario mínimo. Más de un inepto de los que tenemos en la clase política debería pasearse por los restaurantes y bares del centro de Londres y caérsele la cara de vergüenza de ver a toda una generación desperdiciada por culpa de su pésima gestión y del cortijo que tienen montado. Es un tema que me cabrea y me da muchísima pena. Vamos, se me caen los huevos al suelo cada vez que hablo con algún chaval con carrera, master y 4 idiomas sirviéndome sushi preparado.

En fin, basta de irme por las ramas. Por suerte, en nuestro sector hay mucho trabajo y los desarrolladores buenos van buscados, pero tampoco os penséis que el proceso es súper rápido ni que va a ser aterrizar y tener algo. Intentad por favor venir con algo desde allí, aunque no sea la mejor empresa del mundo. Una vez aquí todo es muchísimo más fácil.

Presupuesto

Como he dicho, Londres es muy caro. Por suerte, los sueldos son más altos (y el IRPF más bajo) que en España, pero antes de venir haced cálculos de qué sueldo necesitáis para el nivel de vida que queréis.

La vivienda es más o menos el doble que en Barcelona y vivir sin compartir te puede salir tranquilamente por 1600-2000 pounds, por supuesto todo relativo a la distancia al centro o a una parada de metro bien comunicada con el centro.

El transporte suele salir por unos 80-100 pounds al mes, de nuevo depende de las zonas.

En Inglaterra existe el NHS, que es “parecido” a la Seguridad Social. Hay historias para todo, desde gente que le han atendido súper bien a gente bastante descontenta. Por suerte, y toco madera, aún no he tenido que ir aún así que no os puedo decir. Las mutuas suelen ser bastante caras y ir por ejemplo al dentista también.

La comida, depende mucho de lo que os guste comer, podríamos decir que es un 20% más caro que en España en promedio.

Y el resto de cosas que puedas comprar, especialmente si son marcas, pues más o menos, incluso diría que algo más barato (debido al cambio euro vs pound que no está actualizado, sino de cuando el pound estaba más alto). Mención especial a las cosas frikis, los videojuegos y no entiendo por qué, los zapatos, que son entre un 30 y un 50% más baratos. El paraíso de las mujeres y los nerds como yo.

Tras hablarlo con bastante gente, supongo que dependerá de las pretensiones de cada uno, pero los 2000 primeros pounds son para vivir y a partir de ahí resto de gastos. Por supuesto, depende de muchísimos factores, pero es lo que suele decir la mayoría de gente que está por aquí.

¿La gente es mucho más buena?

Resumiendo mucho, diría que el nivel medio es similar a España, incluso diría que algo peor.

Lo que pasa es que hay muchos proyectos con dinero, mucha gente buena (simplemente porque hay mucha gente y es un tema estadístico) y en general, a la gente le suenan más cosas como las Best Practices, hacer APIs, testing, etc… que en España. Vamos que el que es bueno en España, aquí no desentona y el que es normalito allí, aquí va a encontrar un trabajo digno pero tampoco va a destacar. Y es que aquí compites con todo el mundo, y hay muchos países donde en vez de doblar cada maldita serie (y volverla a doblar al catalán por si acaso) la gente ve la tele en VO. Y eso hace que hablen MUCHO mejor que nosotros. Y eso siempre ayuda a encontrar una mejor posición.

Lo que sí que hay es un mucho mejor ecosistema, muchísimos meetups de cualquier tecnología que se os ocurra y por ejemplo, puedes ir a una PHP London y hablar con gente como Derick Rethans o Rasmus Lerdorf. Pero también te puedes encontrar con que el speaker sea yo!

Y al final, la mayoría de empresas grandes tienen sede aquí. Por tanto, puedes aspirar a trabajar en Facebook, Skype, etc… o almenos a conocer a sus ingenieros, cosa que en España es totalmente imposible. Y tener empresas de este tipo, hace que el nivel medio suba.

Forma de trabajar

Se trabaja diferente que en España y en general se tiene más respeto / consideración a los desarrolladores. Pero no os penséis que todo se hace mucho mejor que allí y que todo el mundo es buenísimo. Sencillamente, no es así.

Quizás la gente sea algo más fría e individualista a la hora de trabajar. Ojo, el pair programming y pedir code reviews es habitual y se habla a menudo, pero quizás la relación es algo menos personal. El hecho de que la mayoría hablemos en un idioma común que no es el materno contribuye a ello. Eso a mí me gusta pero seguro que hay mucha gente que discrepa.

El horario suele ser mejor que en España pero se trabaja bastante más intenso. Pocos cafelitos y menos de 1 hora para comer suele ser la norma. Y a mí me parece genial, pero quizás a mucha gente no. Cuestión de gustos. Y se intenta hacer Scrum o cuanto menos Agile de verdad. No estos apaños españoles que ni son Agile ni nada de nada.

Un tema que me gusta es que aquí no se eluden los problemas. La gente suele hablar claro y al grano (con respeto, sin duda) y si algo no se ha hecho bien, se dice y se intenta corregir. Parece un buen sistema, ¿verdad? En España la gente suele estar más callada y si a alguien le corriges se suele ofender. Aquí la gente se lo toma más constructiva o deportivamente. Y el resultado final suele ser mejor.

Y como ejemplo, me gustaría hablar del día que comuniqué que me iba de BrightTalk a Hailo tras solo 2 meses. Esperaba una reacción “Spanish style” y la verdad es que aunque debían estar cagándose en mí, aluciné de lo deportivamente que se lo tomaron. Me desearon la mejor de las suertes, entendieron que Hailo era una empresa mucho más acorde a lo que buscaba, se disculparon de que la cosa no hubiera cuajado, tomaron nota de todo mi feedback positivo y negativo y en general reconocieron muchos de sus (para mí) errores o cosas a mejorar. Y me agradecieron todo lo bueno que les aporté en el poco tiempo que estuve (con una lista y todo).

En todo esto, quizás he tenido suerte con este tema en los dos sitios que he estado. Pero así ha sido.

Intentadlo, pero solo si os apetece

Animo a todo el mundo a que intente dar el salto. Es súper enriquecedor no solo a nivel profesional sino a nivel personal. Pero no es un camino de rosas y te tiene que apetecer. Y si tienes pareja, le tiene que apetecer también. Si no lo veis claro, esperad a verlo claro del todo o descartad la idea ya que también hay momentos duros.

Lo dicho, vaya tostón, esperando vuestro feedback y comentarios al respecto! Pensad que todo esto es mi visión y seguramente está muy sesgada por las experiencias que he tenido, que seguramente han sido mejores que las de muchos compañeros ex-pats.

Symfony2 versus Go: Round 1 – Hello world (static pages)

In my new job at Hailo we are introducing Go as the main language in the new architecture and because of that I have started playing with it. Besides that, there has been a lot of comments and opinions in both the Symfony2 and the PHP community regarding the TechEmpower framework benchmarks where Symfony2 appears at the bottom of the list for most of the tests.

Needless to say, PHP is and will always be slower than a compiled new-generation language. If it was faster… something would be absolutely wrong… but is this speed difference valuable? Most people will talk about the amount of servers you could save… and this is absolutely true. However, engineers able to develop applications in languages as Go or Scala are definitely more expensive and scarce so this is a cost and a risk to be taken into account as well.

Apart from that, comparing Symfony2 with Go is an absolute unfair and somehow even stupid comparison. Symfony2 is a full-stack PHP framework and because of that, it runs inside an existing web server as a module (being Apache, Nginx/PHP-FPM, etc) while with Go, we create a web-server within the code. So, it is comparing apples with bananas, but still, people like benchmarks, so there we go.

My whole idea for these series is to be able to somehow benchmark the difference if we decide to switch part of the application from PHP to Go (for instance, some slow API, some heavy calculation endpoint, etc…) and one of the easiest ways to do it without changing a lot of things is to use Apache mod_proxy extension to redirect some HTTP calls to a different port where Go would be listening. Of course, in a production environment, this would be done in some HTTP Load Balancer on top of our application, that might be Apache, Nginx, or other available options.

In our experiment, we will end up with these 2 urls: http://localhost/hello-php and http://localhost/hello-go. There will be Apache serving both but for the second one we will proxy the Request to another port where Go is listening. And this can be easily done with these lines in our VirtualHost configuration:

    ProxyPreserveHost on
    ProxyPass /hello-go http://localhost:8080/hello

And to build a simple hello world in Go, that listens on port 8080:

package main 
 
import (
    "net/http"
    "fmt"
)
 
func hello(w http.ResponseWriter, r *http.Request) {
      w.Header().Set("Content-Type", "text/html")
      fmt.Fprint(w, "Hello world, from Go!")
}  
 
func main() {
    http.HandleFunc("/hello", hello)
    http.ListenAndServe(":8080", nil)
}

And a Hello world in Symfony2 is something like this:

<?php
 
namespace Ricardclau\SymfonyVsGoBundle\Controller;
 
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;
 
class DefaultController extends Controller
{
    /**
     * @Route("/hello-php")
     */
    public function indexAction()
    {
        return new Response('Hello world, from PHP!');
    }
}

And if we use Apache Benchmark tool to benchmark the difference vs both calls we will get that our Symfony2 application is able to serve about 230 req/s and our Go endpoint can serve about 6300 req/s!.

So, for this particular case, without databases and not heavy business logic, Go is about 30 times faster than Symfony2. Pretty amazing, isn´t it? Let´s switch to Go? Well, let´s think about it a little bit.

If we were in a production environment, with a heavy traffic website, would we be serving static pages with PHP? Absolutely not! We would put Varnish or some other reverse proxy cache layer in front of our application! So, this difference is absolutely useless in real world applications! Of course, if you are confident with Go, you can develop your website entirely in Go and save some CPU cycles (and perhaps, even the Varnish setup) but again, if you are a CEO or the average Joe CTO who need to hire developers it is more likely that you can get 20 engineers with proper skills in PHP / Apache / Varnish than in Go.

To me, in this first experiment, the conclusion would be that for this case, switching to faster languages in absolutely worthless… but, what do you think about these numbers? In the following chapter of the series we will compare both stacks with database “select” queries and applications with intensive writing POST HTTP requests, so stay tuned for more crazy and perhaps stupid benchmarks!

APC Settings: stat and shm_size

Most of you already know that APC is really important to boost PHP performance. It will probably be replaced in the next months / years by Zend Optimizer+ but meanwhile it is important to know how to properly tweak this amazing PHP extension.

If we have a look at http://php.net/manual/en/apc.configuration.php we will see in the first couple of lines that both stat and shm_size are the most important directives but most people seem to not know about them, and this is why I am writing this post. Yes, most sysadmins don’t even know that these settings exist and the big difference you can make playing with them.

shm_size: This is about how much memory will be reserved for APC. Please take into account that this memory is occupied both by your userland variables and by the opcode cache. So, the more PHP files your application has, the more memory you need. Thanks God, well thanks Rasmus, there is a PHP script to inspect how much memory we are actually using. You can grab it at http://svn.php.net/viewvc/pecl/apc/trunk/apc.php?view=markup. And of course, in modern big PHP applications, with lots of libraries, dependencies, frameworks, etc.. it should be set at least at 64M and probably at 128M. Just inspect it in your production servers and you will find the most appropiate value.

stat: This setting is a really cool one. By default, every time we require a file in PHP, if it is stored in APC, it looks at the filesystem stat to see if the file has changed to load a new version in memory. Of course, this is really inefficient and it is much better to set apc.stat to Off. This way you can literally rm your application folder and all files cached in APC will still work! Of course, this also helps doing deploys even in big traffic moments. The only drawback is that you need to wipe APC (via Apache reload or similar) after every deploy so that the new code actually is installed. But the benefits are far more interesting that this minor drawback! And I honestly hope you are no longer editing remote files with Vim to quick fix Friday afternoon bugs :)

So, quite a short post, but I think it is worth it, provided there are already quite a bunch of companies where I had to fix this!

APC vs Zend Optimizer+ Benchmarks with Symfony2

If you are following some of the biggest names in the PHP scene you may have seen that Zend Optimizer+ is now open-source on Github at https://github.com/zend-dev/ZendOptimizerPlus and it seems that will be included in PHP 5.5 distribution.

This is awesome news as we will finally get a PHP Accelerator bundled with the main language distribution and there should not be (let’s hope) weird issues like the ones happening in early versions of PHP 5.4 with APC that has prevented massive adoption of the new stable version of our favorite language.

There are some really promising performance tests available here but at the time of writing this post there are neither Symfony2 nor Zend Framework 2 benchmarks so I decided to grab the extension and do my own performance tests.

So… let’s see the results

Hardware and software used

What is tested? Basically the simplest application you can develop with Symfony2 (Version 2.2.0).
Composer was run with -o flag which, as you should know, optimizes autoload creating a classmap (except the test which is said that it war ran without it)

Machine used is my laptop, basically a Macbook Air with 1.8 Ghz i5 processor, 8Gb RAM and SSD HD

PHP version is 5.4.12, APC is 3.1.13 and OS is MacOSx Mountain Lion

And the tests are run with Apache Benchmark against a Macports default Apache installation with these settings:

ab -n 5000 -c 10 <symfony2_url>

A Symfony2 Hello world

I’ve seen some “Hello world” performance tests around the Internet using Twig but I guess the fairest test for a Symfony2 minimal footprint is some controller like this one:

<?php
 
namespace RicardClau\Bundle\BenchmarkBundle\Controller;
 
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\HttpFoundation\Response;
 
class DefaultController extends Controller
{
    /**
     * @Route("/benchmark", name="benchmark")
     * @return \Symfony\Component\HttpFoundation\Response
     */
    public function benchmarkAction()
    {
        return new Response('APC vs ZO+');
    }
}

Results with Xdebug

PHP 5.4.12 without APC, but with composer optimization

~ 37 req / s (really poor performance)

PHP 5.4.12 with APC 3.1.13 no custom, but without composer autoload optimization

~ 155 req / s

PHP 5.4.12 with APC 3.1.13 no custom

~ 180 req / s (nice boost with composer autoload optimization!)

PHP 5.4.12 with APC 3.1.13 and apc.stat = Off

~ 195 req / s

PHP 5.4.12 with APC 3.1.13, APC Universal ClassLoader and apc.stat = Off

~ 195 req / s (almost same performance if you use composer autoload optimizer and stat is set to off)

PHP 5.4.12 with Zend Optimizer+ no custom

~ 211 req / s

PHP 5.4.12 with Zend Optimizer+ recommended settings

zend_optimizerplus.memory_consumption=128
zend_optimizerplus.interned_strings_buffer=8
zend_optimizerplus.max_accelerated_files=4000
zend_optimizerplus.revalidate_freq=60
zend_optimizerplus.fast_shutdown=1
zend_optimizerplus.enable_cli=1

~ 220 req / s

PHP 5.4.12 with Zend Optimizer+ extreme settings

All of the above plus
zend_optimizerplus.save_comments=0
zend_optimizerplus.enable_file_override=1

~ 202 req / s (which is really weird to be lower actually but I’ve tested it many times and seems to happen in my setup)

Please note that to make this last test work properly, you should have your Symfony2 cache warmed before the test if you are using annotations. Otherwise these settings will make your annotations get ignored!

Results WITHOUT Xdebug

(thx to @pborreli suggestion)

PHP 5.4.12 without APC, but with composer optimization

~ 40 req / s (really poor performance)

PHP 5.4.12 with APC 3.1.13 no custom, but without composer autoload optimization

~ 249 req / s

PHP 5.4.12 with APC 3.1.13 no custom

~ 260 req / s (nice boost with composer autoload optimization but less impressive than before!)

PHP 5.4.12 with APC 3.1.13 and apc.stat = Off

~ 280 req / s (still nice boost)

PHP 5.4.12 with APC 3.1.13, APC Universal ClassLoader and apc.stat = Off

~ 280 req / s (almost same performance again if you use composer autoload optimizer and stat is set to off)

PHP 5.4.12 with Zend Optimizer+ no custom

~ 307 req / s

PHP 5.4.12 with Zend Optimizer+ recommended settings

zend_optimizerplus.memory_consumption=128
zend_optimizerplus.interned_strings_buffer=8
zend_optimizerplus.max_accelerated_files=4000
zend_optimizerplus.revalidate_freq=60
zend_optimizerplus.fast_shutdown=1
zend_optimizerplus.enable_cli=1

~ 337 req / s

PHP 5.4.12 with Zend Optimizer+ extreme settings

All of the above plus
zend_optimizerplus.save_comments=0
zend_optimizerplus.enable_file_override=1

~ 312 req / s (again slower)

Some Excel graphics

APC vs Zend Optimizer Plus in Symfony2

Conclusions

First of all, I would like to say that these results must be taken with a pinch of salt as they were made in my personal laptop which is NOT a production server. Operating System is MacOSx so they might differ a little bit on a Linux machine prepared for production.

Having said that, there are some interesting facts:

- With APC, Symfony2 performance is dramatically boosted!. What would we do without PHP Accelerators? Thus, the importance of having an accelerator bundled with the standard distribution

- With composer autoload optimization we might get a benefit of ~20-25% even with a small test like this. Don’t forget it in your production environments!. However, disabling xDebug made this benefit get reduced to ~10%.

- With apc.stat set to Off, we get an extra boost of ~8-10% even in such a small test. This gets bigger when the amount of files opened increases. Don’t forget to consider it. However, remember that whenever a change is uploaded you should reset APC so that your changes are noticed.

- Xdebug make things SLOW. However, most of the % are similar, except maybe the performance boost with composer autoloader optimizer. Please check that you have not it enabled in your production servers!

- Zend Optimizer+ is faster than APC, even with the default installation. With recommended settings and in the best scenario we get our requests to be 10 times faster than PHP with no Accelerator!

- With recommended settings we get a performance boost of ~11% with xDebug and of ~15% without it, if we compare with APC best performance, but there seems to be something wrong with the extreme settings which were getting worse performance. This was consistent in 5 test I did in different moments, so it seems we can discard that there might have been some background process consuming CPU.

- Is it worth to switch? Well, it depends, at least at the moment of writing these lines. If you are not using APC as a local storage cache, it seems that you will get an extra boost for free, which is always good. Also, if it is bundled with the standard distribution, there is one less PECL package to get into account for automated machine deploys. However, if you are using APC as local storage in your application, I don’t think the performance boost is worth if we’re losing the easy caching that APC provides.

- As Lukas Smith states in his comment, there is some work being done with ApcU (which can be seen at https://github.com/krakjoe/apcu) which will be APC minus the byte choice cache. If they make it, with the launch of PHP 5.5 we will have an optimizer bundled with PHP and we will still be able to install ApcU. This will allow us to benefit of the performance boost in ZO+ while not losing APC storage and upload files hook. It definitely seems PHP 5.5 will be another amazing version of our favorite language with Generators and Zend Optimizer+ being the biggest improvements!

Please, feel free to add any comments to these tests!