O documento fornece diretrizes sobre boas práticas de programação PHP, como estruturação do código em camadas, uso de padrões de codificação, reuso de componentes, tratamento de erros, desempenho e escalabilidade. Recomenda frameworks, bibliotecas como PEAR e cuidados com nomeação, comentários e complexidade do código.
1. php
Jedi
Boas práticas e
alta performance
Felipe Ribeiro
http://feliperibeiro.com
felipernb@gmail.com
2. 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
10. 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()
11. • Constantes,toda em maiúscula com
underline para separar palavras:
DATABASE_LOGIN, BASE_DIR
12. • 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
14. Use o PEAR
PHP
Extension and
Application
Repository
15. • 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
17. • 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.
24. • 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)
41. • 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
42. • 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...)
67. • 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
68. • 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.
71. • 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
74. 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
75. 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
77. APC
Faz cache do opcode do
PHP. Evitando que seja
recompilado a cada
execução
78. 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
79. 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'));
?>
83. 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'));
?>
84. Smarty
Além de separar lógica
e visualização, faz
caching
85. 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);
?>
87. • 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.
95. 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