retour sur confoo2011 et Symfony2

1 478 vues

Publié le

Présentation interne sur Symfony2, plus notes sur le conférence montréalaise Confoo 2011

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
1 478
Sur SlideShare
0
Issues des intégrations
0
Intégrations
2
Actions
Partages
0
Téléchargements
19
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive
  • Pareilousimilaire: routing (plus flexible)Cascade des configuration
  • Pareilousimilaire: routing (plus flexible)Cascade des configuration
  • Avantage du helper: si le reverse proxy nesignale pas qu’ilsupporte les ESI, alors pas de tag ESI
  • Avantage du helper: si le reverse proxy nesignale pas qu’ilsupporte les ESI, alors pas de tag ESI
  • Avantage du helper: si le reverse proxy nesignale pas qu’ilsupporte les ESI, alors pas de tag ESI
  • retour sur confoo2011 et Symfony2

    1. 1. Confoo 2011<br />SaadTazi<br />
    2. 2. Au programme…<br />Symfony2<br />Caching, ESI<br />AutresinformationsConfoo<br />Des questions? Quandvousvoulez!<br />
    3. 3. Introduction<br />“Un autre framework MVC PHP (encore??)”<br />Batiàpartir de composantsréutilisables (Yaml, Dependency Injection Container, Twig…)<br />Full-stack framework (pas micro – voirsilex)<br />
    4. 4.
    5. 5. Différence avec symfony 1<br />Entièrementréécrit<br />Beaucoup d’apprentissage avec symfony 1 => meilleurepratiquedansSymfony 2<br />Pas de séparation entre plusieursapps<br />Supprime les problèmes de routing entre applications<br />maisen bundle sinécessaire<br />Caching HTTP (on va en parlerjuste après…)<br />Utilisation des namespace php 5.3<br />Mon “feeling”: courbed’apprentissage plus importante, moins de “magie”, beaucoup plus de Design Patterns appliqués (DIC, decoupling…)<br />
    6. 6. Introduction<br />http://symfony.com<br />Qui a travaillé avec symfony (1)? Un autre framework PHP?<br />
    7. 7. Une image vaut 1000 mots…<br />Structure de Symfony (code)<br />
    8. 8. Structure<br />
    9. 9. Structure<br />Est-cequej’aiparlé de:<br />Config<br />Routing<br />Vendors<br />Swiftmailer<br />Doctrine 2<br />Monolog (et non Zend)<br />
    10. 10. De la requêteà la réponse<br />Unerequêteestreçue par le front controller de Symfony<br />Le routing déterminequelle action estappelée<br />L’actionestexécutée<br />L’actionretourneuneréponse<br />En un mot, Symfonyest en charge de convertirunerequête en réponse.<br />
    11. 11. Front Controller<br /><ul><li>Très simple
    12. 12. Touterequêtepasse par le front controller</li></li></ul><li>routing<br />Unerequêteestreçue par le front controller de Symfony<br />Le routing déterminequelle action estappelée<br />L’actionestexécutée<br />L’actionretourneuneréponse<br />En un mot, Symfonyest en charge de convertirunerequête en réponse.<br />
    13. 13. Routing (2)<br />Dans app/config/routing.yml:<br /><ul><li>DansDemoController.php:</li></li></ul><li>Routing (3)<br />Diffrérentesapprochespossibles (combinées)<br />Yaml<br />Php<br />Annotation<br />Xml<br />Avantage par rapport àSymfony 1<br />Plus flexible<br />Inclusion de règlesexternes(Bundles… slide suivantes)<br />
    14. 14. Bundles<br />Un bundle est un répertoire avec une structure prédéfinie, qui contient des classes, des controlleurs, des templates et des ressources (images, css…), des règles de routing<br />Remplace les plugins… mais en plus générique<br />Configuration, routing par bundle possible<br />
    15. 15. Action<br />Unerequêteestreçue par le front controller de Symfony<br />Le routing déterminequelle action estappelée<br />L’actionestexécutée<br />L’actionretourneuneréponse<br />En un mot, Symfonyest en charge de convertirunerequête en réponse.<br />
    16. 16. Action (2)<br />Le C du MVC<br />Ou (plus “verbose”):<br />return $this->render(’EcmaBundle:Demo:hello.twig', array('name' => $name));<br />
    17. 17. Twig<br />Le V du MVC<br />Template engine<br />Inspiré de Jinja, template engine Python<br />Rapide, car compilé en PHP<br />Supportel’héritage<br />Pas obligatoire avec Symfony 2<br />
    18. 18. Twig (2)<br />(asset, block title (défaut), block content, extends)<br />
    19. 19. D’autresfonctionnalités…<br />
    20. 20. Web Debug Toolbar<br />Similaireà la debug toolbar de symfony 1<br />Activable par environnement (dev, prod…) <br />
    21. 21. Profiler<br />
    22. 22. Console<br />
    23. 23. Doctrine 2<br />Le M du MVC (“enfin!”)<br />ORM / ODM au dessus de PDO<br />Data Mapper Design Pattern au lieu de Active Record<br />Pas nécessaireque les Classes Modèleshéritentd’uneclasse parent<br />Uneclasse qui s’occupe de faire les actions DB (Mapper - classegénéréeautomatiquement)<br />Support de MongoDB (ODM) et CouchDB et…<br />
    24. 24. Doctrine 2 (2)<br />Annotation, XML, YAML pour définir les Entités (= les classes Modèles)<br />
    25. 25. Tests<br />PHPUnit +classeWebTestCase + le Crawler Component<br />Permet de:<br />simuler des requêtes HTTP, <br />Faire des “back”, <br />Soumettre des formulaires…<br />http://symfony.com/doc/2.0/book/testing.html#the-test-client<br />
    26. 26. Tests (2)<br />
    27. 27. Cache<br />GET (Etag, ...)<br />Cache existe? valide?<br />NON<br />OUI<br />
    28. 28. But: ne pas “frapper” le serveur Web àchaqueappel<br />HTTP RFC 2616 Compliant<br />Expiration<br />Expires=Date<br />Surtout pour ce qui eststatique (synchronisation)<br />Cache-control: Maxage=20, s-maxage=20 (seconds)<br />Validation<br />Etag / if none match<br />Last-modified / if modified since<br />Inséré par le cache<br /> (retourne un 304 not modified)<br />Cache (2)<br />
    29. 29. Cache (3)<br />Front Controller:<br />Sans cache<br />Avec cache<br />
    30. 30. DansSymfony2<br />La classeAppCachepeutavoir les headers par défaut<br />Chaque action peut (re)définirles “headers de cache”<br />On peut “wrapper” le framework par un système de cache PHP (pour tester)<br />On peututiliser Varnish ouAkamaiou NGINX comme reverse Proxy (ou Cache Proxy) en avant du serveur Web<br />Mais comment mettre en cache le “welcome User 1” dans le header par exemple?...<br />Cache (4)<br />
    31. 31. ESI: Edge Side Include<br />Le reverse proxy fait un appel si nécessaire<br />Avec Symfony2: un helper:<br />Cache (5)<br />
    32. 32. Framework moderne, flexible, puissant<br />dynamise la communauté PHP<br />Doctine 2<br />Symfony Component<br />Dependency Injection<br />Twig<br />Monolog<br />Silex (à la Sinatra ou nodejs…)<br />http://groups.google.com/group/php-standards/web/psr-0-final-proposal<br />Documentation: bonne, mais manque un jobeet<br />Stabilité: en pre-releasedepuis quelques temps…(j’ai omis le Formframework pour une raison…)<br />(les dernières nouvelles…)<br />En résumé<br />
    33. 33. Et le reste de confoo?<br />
    34. 34. HTML5<br />Trèsprésent, mêmesi on utilise HTML5 pour plus…<br />LibrairieJavascript, SVG, …<br />Nombreusesconférences, de Mozilla, Microsoft…<br />Quoi faire avec les anciens browsers:<br />Polyfillshttps://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills<br />Quelséléments HTML5 sont “production ready”<br />Video http://craftymind.com/factory/html5video/CanvasVideo.html<br />localStorage<br />WebSocket (lien avec Nodejs plus loin ;-))<br />File API<br />SVG, Canvas… <br />Pas prêt<br />EmbedDB<br />Drag & Drop…<br />
    35. 35. Server-Side Javascript<br />Nodejs<br />Javascript v8 de google<br />Trèsrapide<br />v8 en moyenne 8x plus rapidequePHP<br />(de http://shootout.alioth.debian.org/)<br />Non bloquant<br />Similaireà: <br />$(selector).click(function() {…});<br />Mais pour tout: requête DB, routing…<br />Pas encorecomplétement stable (0.4.6) ni “scalable”<br />Gros buzz<br />Express, npm, socket.io<br />
    36. 36. Clean PHP<br />Du créateur de PHPUnit<br />Des principes de base que les développeursonttendanceàoublier<br />KISS – Keep it simple stupid<br />beware of optimizations<br />optimiserseulementsinécessaire, après benchmark<br />DRY – don’t repeat yourself<br />principle of least astonishment<br />Exemple: pas de getter qui change l’état!<br />Separation of concerns<br />Si on n’utilise pas de “ET” pour décrireuneclasse!<br />Active record vs. Data Mapper<br />the boy scout rule<br />Laisser le code plus “propre” qu’avant de l’avoirmodifié<br />Reviews (peer), Automated testing, refactoring, tell don’t ask… <br />
    37. 37. Hidden Features of PHP<br />Spl:SplIterator,SplQueue(RabbitMQ)<br />StatGrab: CPU, RAM, Disk stats, …<br />igbinary (surgithub)<br />Plus rapide et plus efficaceque le serialize<br />Session plus aléatoire:<br />session.entropy_file: / dev/urandomsession.entropy_length = 32<br />
    38. 38. Autres notes<br />“Varnish in action”<br />XHProf: <br />de facebook (opensource)<br />Profiler phpsur le serveur de production<br />NoSQL<br />MongoDB, CouchDB, Cassandra<br />Hiphop (facebook)<br />Jenkins, xdebug (cachegrind, profiling), Alloy framework, Sinatra…<br />
    39. 39. Merci!<br />http://www.evernote.com/pub/saadtazi/confoo<br />Questions?<br />

    ×