SlideShare a Scribd company logo
Symfony 1, mi viejo amigo
Symfony 1, mi viejo amigo
Miviejo amigo
Un pocosobre miEstoytrabajando con webs desde 2001Me encantainvestigar y meterme en problemasera solo un poco!
青玉男ao tama o
ao
Y porquéhablar de 1.4?
PreguntasLas hagoyo!
Quepodemosoptimizar?
Carga de procesoTiempoquepasa el servidorprocesando la web
Proveedor de InternetDesarrolladores BackendDesarrolladores Frontend
Tiempo de Espera
Miexperiencia
La optimizacióndueleVale la pena el esfuerzo?
Quepodemosmejorar
Hechos
+ Hechos
Herramientas
Debug Tool BarTodos la conocemos ya!
sfTimerManager$timer = sfTimerManager::getTimer("test");...var_export( $timer->addTime() );
sfTimerManager
sfTimer$timer = new sfTimer ("test");$timer->startTimer();...var_export( $timer->addTime() );
DoctrineQuepodemosoptimizar
Optimizando Doctrine
Cantidad de ConsultasOptimizando Doctrine
Tiempo de ConsultaOptimizando DoctrineTiempoquenos cuesta buscarinformación en la DB
Tiempo de HidrataciónOptimizando DoctrineQuees?http://www.doctrine-project.org/documentation/manual/1_2/en/data-hydratorsconstHYDRATE_RECORD            = 2;constHYDRATE_ARRAY             = 3;constHYDRATE_NONE              = 4;constHYDRATE_SCALAR            = 5;constHYDRATE_SINGLE_SCALAR     = 6;constHYDRATE_ON_DEMAND         = 7;constHYDRATE_ARRAY_HIERARCHY   = 8;constHYDRATE_RECORD_HIERARCHY  = 9;
Tiempo de HidrataciónOptimizando DoctrineQuées lo mínimoqueestamosbuscando?
Tiempo de HidrataciónOptimizando Doctrine$clist = Doctrine::getTable("Country")->createQuery()->select({fields})->execute({strategy});
Tiempo de HidrataciónOptimizando Doctrine$conn = Doctrine_Manager::connection();$data = $conn->execute("select * from countries")->fetchAll();
Tiempo de HidrataciónOptimizando DoctrinePara quequiero el ORM?$conn= Doctrine_Manager::connection();Para manejarlasconexiones!
Doctrine?Unainteresanteparadoja!
Tiempo de HidrataciónOptimizando DoctrineEjemplo!
Tiempo de HidrataciónOptimizando DoctrineUserTable::getInstance()        ->createQuery()        ->select ("id, name, surname, age")        ->where("is_deleted = ?", false)        ->andWhere("is_closed = ? ", false) ->andWhere(”age > ? ",  50 )->execute( array(), Doctrine_Core::HYDRATE_ARRAY);UserTable::getInstance()        ->createQuery()        ->select ("id, name, surname, age")        ->where("is_deleted = ?", false)        ->andWhere("is_closed = ? ", false)	->andWhere(”age > ? ",  50 )->execute( );Estrategia
Tiempo de HidrataciónOptimizando DoctrineCompatibilidad entre estrategias en la vista<td> <?phpecho$user->get("name") ?></td><td> <?phpecho$user->name ?></td><?php$user= $user->getRawValue() ?><td> <?phpecho$user["name"] ?></td>
T.  Conversión de ConsultaOptimizando Doctrine$q = Doctrine::getTable("Country")->createQuery();$q->getSqlQuery().0.006 segGallery1..n GalleryImagesn..1 Image$q= Doctrine::getTable("Gallery")->createQuery("g")->leftJoin("g.images");$q->getSqlQuery();0.1 seg
Conteo de RegistrosOptimizando Doctrine$clist = Doctrine::getTable("Country”)->findAll()->count();->createQuery()->count();->createQuery()->select("count(id)")->execute( array (), Doctrine::HYDRATE_NONE );$conn->execute("select count(id) as count from countries")->fetchAll();0.2 seg0.0056 seg0.01 seg0.00087 seg
PDOhttp://es2.php.net/manual/en/book.pdo.php
Select, Joins e IndicesOptimizando Doctrine$articles = Doctrine::getTable("Article")->createQuery("a")->leftJoin("a.pages p")->limit(100)->execute();->limit(1000)->execute();->limit(100)->execute( array(), Doctrine::HYDRATE_ARRAY );->limit(1000)->execute( array(), Doctrine::HYDRATE_ARRAY  );2.93 seg30.80 seg0.20 seg1.37 seg
Select, Joins e IndicesOptimizando DoctrineSELECT c.id, c.name , c.resume, c.disclaimer, c.product , c.description, \UNIX_TIMESTAMP(c.valid_start_at) as valid_start, UNIX_TIMESTAMP(c.valid_end_at) as valid_end, UNIX_TIMESTAMP(c.promotion_start_at) as promotion_start, UNIX_TIMESTAMP(c.promotion_end_at) as promotion_end, UNIX_TIMESTAMP(c.publish_at) as publish, \c.tracking_click, c.tracking_save_count, c.visibility_status_id, c.print_coupon, c.mobile_coupon, c.online_coupon, c.company_id,  cp.comercial_name as company_name, c.redemption_price as redemption_price, \CONCAT_WS(',', GROUP_CONCAT(DISTINCT ca.attributes_id SEPARATOR ",") ) as attributes, \CONCAT_WS(',', GROUP_CONCAT(DISTINCT ca.root_id SEPARATOR ",") ) as roots, \CONCAT_WS(',', GROUP_CONCAT(DISTINCT ca.level SEPARATOR ",") ) as levels, \CONCAT_WS(',', GROUP_CONCAT(DISTINCT cs.store_id SEPARATOR ",") ) as stores, \CONCAT_WS(',', GROUP_CONCAT(DISTINCT uc.user_id SEPARATOR ",") ) as users, \CONCAT_WS(',', GROUP_CONCAT(DISTINCT cs.state_id SEPARATOR ","), IF(online_coupon = 1, 0, null) ) as states, \ CONCAT_WS(',', IF( print_coupon = 1, 1,null), IF( mobile_coupon = 1, 2,null), IF( online_coupon = 1, 3,null) ) as types, \CONCAT_WS(',', GROUP_CONCAT(DISTINCT cs.postal_code SEPARATOR ",") ) as postal_codes_ids, \CONCAT_WS(' ', GROUP_CONCAT(DISTINCT cs.city_name SEPARATOR " ") ) as cities, \CONCAT_WS(' ', GROUP_CONCAT(DISTINCT s.road_name SEPARATOR " ") ) as roads, \CONCAT_WS(' ', GROUP_CONCAT(DISTINCT s.comercial_name SEPARATOR " ") ) as names, \CONCAT_WS(' ', GROUP_CONCAT(DISTINCT s.postal_code SEPARATOR " ") ) as postal_codes, \CONCAT_WS(' ', GROUP_CONCAT(DISTINCT sa.name SEPARATOR " ") ) as state_names \FROM ( ( ( (coupons c LEFT JOIN  coupon_attributes ca ON c.id = ca.coupons_id ) LEFT JOIN coupon_stores cs ON c.id = cs.coupon_id) LEFT JOIN sf_guard_user_coupons uc ON c.id = uc.coupon_id  ) LEFT JOIN stores s ON cs.store_id = s.id ) LEFT JOIN states sa ON cs.state_id = sa.id  LEFT JOIN companies cp ON cp.id=c.company_id \WHERE  ( c.administrative_status_id = 1 AND c.publish_at < NOW() AND DATE(c.valid_end_at) + INTERVAL 1439 HOUR_MINUTE > NOW() )  \GROUP BY c.id
Select, Joins e IndicesOptimizando Doctrine✔
Symfony 1, mi viejo amigo
VistasQuepodemosoptimizar
Optimizando Vistas
Inclusión de PartialsOptimizando Vistas
Listados y consultasanidadasOptimizando Vistas<?phpforeach($results as $plan): ?>	<li>	<?php echo $plan->get(“title”) ?> 	(<?php echo $plan->countAssistants()?> )</li><?phpendforeach; ?>Consultasanidadas
La CacheGuardemos en Cache parasalvaralgunos (muchos) milisegundos
La Cache
CómofuncionanLa Cache
CómofuncionanLa Cachela cache de de vistasfactories.ymlview_cache_manager:class: sfViewCacheManager    param:cache_key_use_vary_headers: truecache_key_use_host_name:    trueview_cache:class: sfFileCache    param:automatic_cleaning_factor: 0cache_dir:                 %SF_TEMPLATE_CACHE_DIR%      lifetime:                  86400      prefix:                    %SF_APP_DIR%/template
CómofuncionanLa Cachela cache de de Doctrine$manager->setAttribute(Doctrine_Core::ATTR_QUERY_CACHE, $cacheDriver);$conn->setAttribute(Doctrine_Core::ATTR_QUERY_CACHE, $cacheDriver);$q = Doctrine_Query::create() ->useQueryCache(new Doctrine_Cache_Apc()); $manager->setAttribute(Doctrine_Core::ATTR_RESULT_CACHE, $cacheDriver);$conn->setAttribute(Doctrine_Core::ATTR_RESULT_CACHE, $cacheDriver);$manager->setAttribute(Doctrine_Core::ATTR_RESULT_CACHE_LIFESPAN, 3600);->useResultCache(true);
CómomodificarlaLa Cachela cache de de vistas
CómomodificarlaLa Cachela cache de de vistasclass sfViewCacheManagerpublic function setPageCache($uri)public function getPageCache($uri)
CómomodificarlaLa Cachela cache de de vistasclass xyzCache extendssfCacheabstract public function get ($key, $default = null);abstract public function has ($key);abstract public function set ($key, $data, $lifetime = null);abstract public function remove ($key);abstract public function removePattern($pattern);abstract public function clean ($mode = self::ALL);
DriversLa Cache
OptimizandoSymfonyPodemoshaceralgo?
No mucho!
Quepodemoshacer?OptimizandoSymfonyDesabilitar TODO lo que no se USEHelpersLogsRouting CachePlugins que no usen100%
Una idea!
Front ControllerOptimizandoSymfonyrequire_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php');$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false);sfContext::createInstance($configuration)->dispatch();
Front ControllerOptimizandoSymfonyrequire_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php');$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'dev', true);$manager = new sfDatabaseManager($configuration);$data = Doctrine::getTable(“Article”)->createQuery()->etc();$view = CMSProcess::ProcessData( $data );echo $view;
Gracias!
PreguntasAhora si las hacen Uds!
Miviejo amigojosetonyp@latizana.com@josetonypaotamao@latizana.com

More Related Content

TXT
Vidéo approche en immobilier
PDF
PHP Secure Programming
PDF
Zf2 how arrays will save your project
PDF
Is HTML5 Ready? (workshop)
PPTX
Voyage en monde Android. Trucs et astuces tout au long de la route.
ODP
Best Practice Testing with Lime 2
PDF
Make More Money With Advanced Custom Fields - WordCampYYC 2015
PDF
Make your own wp cli command in 10min
Vidéo approche en immobilier
PHP Secure Programming
Zf2 how arrays will save your project
Is HTML5 Ready? (workshop)
Voyage en monde Android. Trucs et astuces tout au long de la route.
Best Practice Testing with Lime 2
Make More Money With Advanced Custom Fields - WordCampYYC 2015
Make your own wp cli command in 10min

What's hot (16)

PDF
4. Метапрограмиране
PDF
Shortcodes In-Depth
PPTX
SugarCon 2010 - Best Practices for Creating Custom Apps in Sugar
PPTX
What your testtool doesn't tell you
PDF
Yearning jQuery
KEY
Unit testing with zend framework PHPBenelux
PPTX
Security: Odoo Code Hardening
TXT
Sk.php
PDF
WordPress Security: Be a Superhero - WordCamp Raleigh - May 2011
TXT
Html
TXT
PDF
Odoo - CMS performances optimization
PDF
Secure Coding With Wordpress (BarCamp Orlando 2009)
PDF
Itsecteam shell
TXT
Private slideshow
PDF
Speeding up Red Team engagements with carnivorall
4. Метапрограмиране
Shortcodes In-Depth
SugarCon 2010 - Best Practices for Creating Custom Apps in Sugar
What your testtool doesn't tell you
Yearning jQuery
Unit testing with zend framework PHPBenelux
Security: Odoo Code Hardening
Sk.php
WordPress Security: Be a Superhero - WordCamp Raleigh - May 2011
Html
Odoo - CMS performances optimization
Secure Coding With Wordpress (BarCamp Orlando 2009)
Itsecteam shell
Private slideshow
Speeding up Red Team engagements with carnivorall
Ad

Viewers also liked (9)

PDF
Clase 4 routing
PPT
Symfony: Domesticando las Vistas
PPT
Symfony: Domesticando los Formularios
PPT
Symfony2 and AngularJS
ODP
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
PDF
The Buyer's Journey - by Chris Lema
PDF
Classroom Management Tips for Kids and Adolescents
PDF
The Presentation Come-Back Kid
PDF
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
Clase 4 routing
Symfony: Domesticando las Vistas
Symfony: Domesticando los Formularios
Symfony2 and AngularJS
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
The Buyer's Journey - by Chris Lema
Classroom Management Tips for Kids and Adolescents
The Presentation Come-Back Kid
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
Ad

Similar to Symfony 1, mi viejo amigo (20)

PPTX
Using of TDD practices for Magento
PPT
What's New in ZF 1.10
PPT
Advanced and Hidden WordPress APIs
PDF
PDF
Satchmo
PPT
What's new in Rails 2?
PDF
Curso Symfony - Clase 2
PDF
Building Web Interface On Rails
KEY
Plone Interactivity
ODP
State Machines to State of the Art
PPT
Manish
PPTX
5 Reasons To Love CodeIgniter
PDF
Django - Framework web para perfeccionistas com prazos
PPTX
[DSBW Spring 2009] Unit 07: WebApp Design Patterns & Frameworks (3/3)
PPT
Create a web-app with Cgi Appplication
PPT
WordPress Standardized Loop API
PDF
WordPress APIs
PPT
Testing persistence in PHP with DbUnit
PDF
Intro Open Social and Dashboards
PDF
Curso Symfony - Clase 4
Using of TDD practices for Magento
What's New in ZF 1.10
Advanced and Hidden WordPress APIs
Satchmo
What's new in Rails 2?
Curso Symfony - Clase 2
Building Web Interface On Rails
Plone Interactivity
State Machines to State of the Art
Manish
5 Reasons To Love CodeIgniter
Django - Framework web para perfeccionistas com prazos
[DSBW Spring 2009] Unit 07: WebApp Design Patterns & Frameworks (3/3)
Create a web-app with Cgi Appplication
WordPress Standardized Loop API
WordPress APIs
Testing persistence in PHP with DbUnit
Intro Open Social and Dashboards
Curso Symfony - Clase 4

Recently uploaded (20)

PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Empathic Computing: Creating Shared Understanding
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Electronic commerce courselecture one. Pdf
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Machine learning based COVID-19 study performance prediction
PDF
Encapsulation theory and applications.pdf
PPTX
Big Data Technologies - Introduction.pptx
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
Cloud computing and distributed systems.
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
KodekX | Application Modernization Development
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Empathic Computing: Creating Shared Understanding
Per capita expenditure prediction using model stacking based on satellite ima...
Electronic commerce courselecture one. Pdf
Dropbox Q2 2025 Financial Results & Investor Presentation
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Machine learning based COVID-19 study performance prediction
Encapsulation theory and applications.pdf
Big Data Technologies - Introduction.pptx
MIND Revenue Release Quarter 2 2025 Press Release
Spectral efficient network and resource selection model in 5G networks
Mobile App Security Testing_ A Comprehensive Guide.pdf
Building Integrated photovoltaic BIPV_UPV.pdf
Cloud computing and distributed systems.
Chapter 3 Spatial Domain Image Processing.pdf
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
The AUB Centre for AI in Media Proposal.docx
KodekX | Application Modernization Development

Symfony 1, mi viejo amigo

Editor's Notes

  • #6: ----- Meeting Notes (02/07/11 00:31) -----COmo se que es un poco aburrido hablar de Sy1 pues les presento a Aotamao
  • #8: ----- Meeting Notes (02/07/11 00:21) -----Porque trabajamos con estoConocimiento comun de los problemas y posibles soluciones sobre el FWQuiero que sea una session corta
  • #9: Quiero saber queconocimientos hay sobresymofny 1.xCuantassaben de 1.x Cuantas personas No SabeSy 1.xQuien no sabe nada de Symofny 1.x?Entoncesqueaprenda S2 sin problemas.Cuantos con Doctrine 1.2?Cuantoshantenidoproblemasparalanzar la web porque les vamuy lento?
  • #12: ----- Meeting Notes (02/07/11 00:31) -----mejorar el uso de los recursos durante el proceso de la web
  • #13: ----- Meeting Notes (02/07/11 00:34) -----1)2) Rasum Lerdorf3) Creo yo, no se
  • #14: ----- Meeting Notes (02/07/11 00:34) -----conferencia la hago por mi experiencia preview
  • #16: ----- Meeting Notes (02/07/11 00:40) ----- vamos a ver a que nos enfrentamos
  • #18: ----- Meeting Notes (02/07/11 00:40) -----Nos enfrentamos a mejorar estas cosas, son inaceptables sin cache
  • #29: ----- Meeting Notes (02/07/11 01:03) -----Que buscamos en la DBPara que vamos a la DBUtilizamos doctrine para describir esas busquedas con su DQL, mala idea
  • #30: PHP Data ObjectsThe PHP Data Objects (PDO) extension defines a lightweight, consistent interface for accessing databases in PHP.PDO provides a data-access abstraction layer, which means that, regardless of which database you&apos;re using, you use the same functions to issue queries and fetch data.ABSTRACTION !!!
  • #32: Quedarse con esto en la mente, se puederecupearalasconeccionque no es mas queuna extension de PDO y usarseparallegar a la DB
  • #37: Cuidado con los JoinsEstas queries esmejorcachearlassi no se van a podermejorar
  • #39: Quien no sabe nada de Symofny 1.x?Entoncesqueaprenda S2 sin problemas.Cuantostienesquevolver el lunes a trabajar con sy 1.x?Cuantos con Doctrine 1.2?Cuantoshantenidoproblemasparalanzar la web porque les vamuy lento?
  • #45: Cuestion de reducir los includes y revisarlasconsultasanidadas: Dondeaquipresento 2 ejemplos----- Meeting Notes (02/07/11 01:26) -----No PartialNo Lo Otro
  • #46: Partial reconstruye el objetoPHPView Con nuevasvariablesPor favor no lo diganporahi
  • #47: Añadir el join con la tablaEvenAssistantsPonerlímtes a la queryCrear Index para MySQLSeleccionar solo los camposnecesariosContar en otra query y usaruna variable nueva
  • #48: La cache vino a salvarnos la vida, sin ellamuchas app no salen a producción, vamos a verquepodemoshacer con ella
  • #50: Empecemosdesde el principio
  • #52: Esmuchainformacion, solo saber que se puededefinir a nivelconexion y a nivel manager.
  • #64: Quien no sabe nada de Symofny 1.x?Entoncesqueaprenda S2 sin problemas.Cuantostienesquevolver el lunes a trabajar con sy 1.x?Cuantos con Doctrine 1.2?Cuantoshantenidoproblemasparalanzar la web porque les vamuy lento?