advertisement

PHP Jedi - Boas Práticas e Alta Performance

60 %
40 %
advertisement
Information about PHP Jedi - Boas Práticas e Alta Performance
Technology

Published on March 7, 2009

Author: felipernb

Source: slideshare.net

Description

Palestra apresentada no II Encontro PHP-PB por mim - Felipe Ribeiro
advertisement

php Jedi Boas práticas e alta performance Felipe Ribeiro http://feliperibeiro.com felipernb@gmail.com

quot;PHP is not about purity in CS principles or architecture; it is about solving the ugly web problem with an admittedly ugly, but extremely functional and convenient solution. If you are looking for purity, you are in the wrong boat. Get out now before you get hit by a wet cat!quot; - Rasmus Lerdorf

Beleza nem sempre é fundamental

Mas um código bem escrito faz toda a diferença!

Boas práticas

Evite o spaghetti

Divida em camadas

• Para separar a aparência da lógica de negócio • Smarty • Savant, TinyButStrong, PHPTAL, XSLT, ...

Siga um padrão de codificação

exemplo, as convenções do Java: • Por • CamelCase • Classescomeçam com maiúscula: FrontController, DatabaseConnection, RestClient • Variáveis (atributos), funções (métodos) começam com minúscula: $user, $this->name, print(), $this->getName()

• Constantes,toda em maiúscula com underline para separar palavras: DATABASE_LOGIN, BASE_DIR

• Existem diversas convenções para PHP • PEAR Coding Standards http://pear.php.net/manual/en/ standards.php • Zend Framework Coding Standard for PHP http://framework.zend.com/manual/en/ coding-standard.html

Use o PEAR

Use o PEAR PHP Extension and Application Repository

• Pacotes escritos por membros ativos da comunidade PHP • Tudotestado por um time exigente de controle de qualidade. • Gerenciamento “a la apt-get”: Ex.: pear install Log pear upgrade PHPUnit pear uninstall Text_CAPTCHA

Não reinvente a roda

• Crie do zero apenas o que é específico da sua aplicação • Reuso de código facilita a manutenção • Códigosde fontes confiáveis como PEAR e Zend Framework são bem testados antes de serem disponibilizados.

Diga não ao Ctrl + C, Ctrl + V

• Se o mesmo código precisa ser usado em mais de um lugar, não copie! • Encapsule numa função/método

Frameworks

• Zend Framework • CakePHP • Symfony • Prado • CodeIgniter

• Ajuda a separar camadas • Padrões de codificação • Reaproveitamento de código • Aprecie com moderação!*

Escolha bons nomes

• Nomes relevantes ajudam no entendimento do código com nomes como: $xpto, $foo, • Variáveis $bar, etc... não dizem nada sobre o que é guardado lá (assim como funções, classes e métodos)

Comente o código

Comente o código Mas comentários não disfarçam códigos mal escritos

quot;Don't comment bad code - rewrite it.quot; Brian W. Kernighan and P. J. Plaugher

Keep It Simple, Stupid!

Keep It Simple, Stupid! Evite qualquer complexidade desnecessária

Utilize padrões para se comunicar

Em alguns lugares do oriente médio, esse gesto...

seria interpretado assim... Então é melhor não inventar!

XML

XML

JSON

JSON

Quebre grandes blocos de código em blocos menores

Quebre grandes blocos de código em blocos menores Classes e métodos muito grandes devem ser refatorados

Não use Windows

“PHP Windows developers are second-class citizens” – Rasmus Lerdorf

• Windows não é a plataforma ideal para desenvolvedores • Não tem um terminal poderoso • Não vem “de fábrica” com compiladores úteis para nós, como o gcc • Nãoreproduz o ambiente de produção mais comum em PHP, o LAMP

• Nãotem um gerenciador de pacotes que permita atualizar e adicionar/remover módulos do PHP de maneira trivial. • Não tem um bom gerenciamento de memória. • Dêuma chance ao Linux ou algum sabor de Unix (FreeBSD, Mac OS X, etc...)

Tratamento de erros

Tratamento de erros Desenvolva no modo E_STRICT

Tratamento de erros Desenvolva no modo Use E_STRICT Exceptions e trate-as

display_errors = off Afinal o usuário não vai depurar o seu código

Não use o operador @ para suprimir erros. Atrapalha o debug e deixa a execução mais lenta

Não confie no usuário

Não confie no usuário filtre toda entrada

e escape toda saída

Use o Twitter para algo útil

Crie um perfil privado para a sua aplicação

Crie um perfil privado para a sua aplicação onde os únicos followers são os desenvolvedores

Utilizando a API, faça com que sua aplicação dê uma “twittada” a cada erro

Performance e Escalabilidade

Performance

Performance a habilidade que uma aplicação tem de atingir um objetivo, como por exemplo responder no menor tempo possível

Escalabilidade

Escalabilidade a habilidade de uma aplicação manter a performance quando a carga de trabalho aumenta.

PHP não é tão rápido...

Porém sua arquitetura share-nothing simplifica a escalabilidade

E PHP dificilmente é o gargalo

A maior parte do tempo é gasto no banco de dados ou com o carregamento do front-end

Sempre dá para espremer e melhorar

Xdebug arrebenta no profiling!

• Instale a extensão Xdebug a opção xdebug.profiler_enable • Habilite caso queira que toda execução gere o log • Ou a opção xdebug.profiler_enable_trigger para que o log só seja gerado quando você passar ?XDEBUG_PROFILE na URL

• Rode o script que você quer analisar • Abra o log gerado pelo Xdebug no KCacheGrind caso use Linux, ou no WebGrind em qualquer outra plataforma.

KCacheGrind

http://code.google.com/p/webgrind/

• xdebug_memory_usage( ) diz quanto de memória o script está usando no momento da chamada • xdebug_peak_memory_usage( ) diz qual o valor máximo de memória que foi usada durante a execução

Testes de carga

Testes de carga ApacheBench (ab) Siege - www.joedog.org

Macintosh:~ felipe$ ab -c 10 -t 30 -b -k 'http://shoprizer.localhost/' This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking shoprizer.localhost (be patient) Finished 4379 requests Server Software: Apache/2.0.59 Server Hostname: shoprizer.localhost Server Port: 80 Document Path: / Document Length: 22320 bytes Concurrency Level: 10 Time taken for tests: 30.010 seconds Complete requests: 4379 Failed requests: 0 Write errors: 0 Total transferred: 99436344 bytes HTML transferred: 97806240 bytes Requests per second: 145.92 [#/sec] (mean) Time per request: 68.532 [ms] (mean) Time per request: 6.853 [ms] (mean, across all concurrent requests) Transfer rate: 3235.74 [Kbytes/sec] received

Macintosh:~ felipe$ siege -b -t30s 'http://shoprizer.localhost/' ** SIEGE 2.67 ** Preparing 10 concurrent users for battle. The server is now under siege... Lifting the server siege... done. Transactions: 4909 hits Availability: 100.00 % Elapsed time: 29.84 secs Data transferred: 104.49 MB Response time: 0.06 secs Transaction rate: 164.51 trans/sec Throughput: 3.50 MB/sec Concurrency: 9.93 Successful transactions: 4909 Failed transactions: 0 Longest transaction: 2.28 Shortest transaction: 0.00

Caching

APC Faz cache do opcode do PHP. Evitando que seja recompilado a cada execução

APC Faz cache do opcode do PHP. Evitando que seja recompilado a cada execução Também permite fazer cache de informações em memória

APC <?php $valor = 'Informação que quero armazenar'; //Armazena o valor no cache em memória do APC apc_store('id_da_informacao', $valor); // O valor pode ser recuperado em diferentes scripts através do apc_fetch var_dump(apc_fetch('id_da_informacao')); ?>

Memcached

Memcached É necessária a execução de um daemon

Memcached É necessária a execução de um daemon Ideal para objetos pequenos

Memcached <?php $memcache = new Memcache(); //Conecta no servidor memcached $memcache->connect('localhost', 11211); $valor = 'Informação que quero armazenar'; //Envia via socket a informação para o memcached $memcache->set('id_da_informacao', $valor); //Recupera a informação var_dump($memcache->get('id_da_informacao')); ?>

Smarty Além de separar lógica e visualização, faz caching

Smarty <?php require 'smarty/Smarty.class.php'; $id = (int) $_GET['id']; $smarty = new Smarty(); $smarty->caching = 1; if(!$smarty->is_cached('noticia.tpl',$id)) { //Carrega do banco de dados } $smarty->display('noticia.tpl',$id); ?>

Frameworks (de novo? Já vi esse slide!)

• Frameworks ajudam em aplicações com funcionalidades comuns. • Ascamadas genéricas de um framework acabam gerando overhead. • Na necessidade de alta performance, você vai precisar abrir mão de certos “luxos” para ter mais flexibilidade e fazer o tunning.

Armazenamento em MySQL

Armazenamento em MySQL Performance é com MyISAM Integridade é com InnoDB

Front-end

Front-end Firebug + YSlow!

<?php $card = array( 'nome' => 'Felipe Ribeiro', 'site' => 'http://feliperibeiro.com', 'e-mail' => 'felipernb@gmail.com', 'fone' => '(83) 9979-3161' ); var_dump($card); ?>

• YSlow:http://developer.yahoo.com/yslow • Siege:http://www.joedog.org/JoeDog/Siege • Xdebug Profiling: http://xdebug.org/docs/ profiler • Filter: http://php.net/filter

Simple is Hard • Rasmus Lerdorf - http://talks.php.net/show/lca09 Building Scalable Web Sites • Cal Henderson - O’Reilly Media, Inc. 2006 Desenvolvendo aplicações Web escaláveis • Elton Minetto - http://www.eltonminetto.net/docs/ app_web_escalaveis.pdf Scalable PHP • Cal Henderson - http://www.slideshare.net/iamcal/scalable-php- presentation

http://www.flickr.com/photos/jeniee/123356305 http://flickr.com/photos/chriskueh/2277679121 http://www.flickr.com/photos/awfulsara/59884516/ http://www.flickr.com/photos/zach_manchester/2302683790/ http://flickr.com/photos/toofarnorth/2691097127 http://flickr.com/photos/suttonhoo22/247107220 http://flickr.com/photos/conskeptical/191048988 http://flickr.com/photos/kazk/198640938 http://flickr.com/photos/jakecaptive/49915119 http://www.myfreewallpapers.net/music/wallpapers/kiss-fire.jpg http://flickr.com/photos/chrisjones/12827874/ http://flickr.com/photos/jorel314/2950338887 http://flickr.com/photos/jmarty/1804061993 http://flickr.com/photos/cw_ye/2952033606 http://flickr.com/photos/vgm8383/2191223539 http://flickr.com/photos/petecarr/475437514 http://flickr.com/photos/capsicina/361735510 http://flickr.com/photos/schlomo/3304431482/ http://flickr.com/photos/seandreilinger/133250112/ http://flickr.com/photos/mesolimbo/2543327787 http://flickr.com/photos/hamed/155343130/ http://flickr.com/photos/deniscollette/1817034358 http://flickr.com/photos/robertjosiah/2690194447/ http://flickr.com/photos/blahflowers/1571042854/ http://flickr.com/photos/dey/2203203306/ http://flickr.com/photos/thomashawk/24089964 http://flickr.com/photos/jasohill/118616905/ http://flickr.com/photos/tunnelarmr/2435107204 http://flickr.com/photos/oberazzi/318947873 http://flickr.com/photos/polegario/230055697/ http://flickr.com/photos/cwm/300412682/

Add a comment

Related presentations

Presentación que realice en el Evento Nacional de Gobierno Abierto, realizado los ...

In this presentation we will describe our experience developing with a highly dyna...

Presentation to the LITA Forum 7th November 2014 Albuquerque, NM

Un recorrido por los cambios que nos generará el wearabletech en el futuro

Um paralelo entre as novidades & mercado em Wearable Computing e Tecnologias Assis...

Microsoft finally joins the smartwatch and fitness tracker game by introducing the...

Related pages

SOLUÇÕES DE DESEMPENHO E ALTA PERFORMANCE DAS EQUIPES DE ...

Evidenciar a importância e a forma de implementação da metodologia completa para soluções de desempenho e alta performance de equipe de construção ...
Read more

Boas práticas de fabricação – Wikipédia, a ...

Proteger produtos contra contaminação através de boas práticas de higiene diárias. ... (conformidade e performance).
Read more

CURSO DE LUBRIFICANTES E LUBRIFICAÇÃO DE ALTA PERFORMANCE

• Lubrificantes Sintéticos de Alta Performance • Lubrificação Centralizada ... • Conceitos gerais de boas práticas. • Conclusão. INFORMAÇÕES:
Read more

Boas praticas de desenvolvimento utilizando o MySQL ...

Boas praticas de desenvolvimento utilizando o MySQL . Banco de Dados, MySQL, PHP, sql. ... Atua em projetos de alta performance e escalabilidade, ...
Read more

Nossos Cursos

• Lubrificantes Sintéticos de Alta Performance • Lubrificação Centralizada ... • Conceitos gerais de boas práticas. • Conclusão. INFORMAÇÕES:
Read more

Boas Práticas no Sector Público :: APEX : Cursos

Ao Prémio Boas Práticas no Sector Público pode concorrer qualquer entidade ... Programa de Alta Direcção ... Programa de Performance e Controlo ...
Read more

Desenvolvimento Web com PHP - Curso, Suporte e Consultoria ...

Desenvolvimento Web com PHP, ... 24x7x365 para ambientes PHP e WEB de alta criticidade e alta performance; ... segurança e aderência às boas práticas;
Read more