De desenvolvimento

39 dicas de performance PHP

Uma boa programação faz toda a diferença no resultado de um site, principalmente quando ele possui muitos acessos, que é a intenção de 99% dos sites. Eu não poderia deixar de compartilhar estas dicas que encontrei no blog do Lucas.

  1. Se um método pode ser estático, declare-o estático. O fator de otimização é 4x+
  2. echo é mais rapido que print. Veja
  3. Prefira usar echo com múltiplo parâmetros ao invés de concatenar string
    1. echo “parametro um”, $var , “outro parametro”
  4. Defina o valor máximo do seus loops antes do for e não no for
    #onde:
    1. for($i=0;$i<count($array);$i++)
    2. #use:
    3. $max_for = count($array);
    4. for($i=0;$i<$max_for;$i++)
  5. Sempre dê unset em variáveis que não serão mais usadas, principalemente grandes arrays.
  6. Tente não usar métodos mágicos, como: __get, __set, __autoload
  7. require_once() tem custo elevado, prefira include[_once], como alertado pelo Pablo, o include_once é mais custoso que o include.
  8. Use caminhos completos em includes e requires, o PHP gastara menos tempo resolvendo os caminhos.
  9. Se você deseja descobrir quando o script começou a ser executado, $_SERVER[’REQUEST_TIME’] é melhor que time()
  10. Se você puder, use strncasecmp, strpbrk e stripos no lugar de funcões regex
  11. str_replace é mais rápida que preg_replace, mas strtr é ainda 4x mais rapida que str_replace.
  12. Se uma função, como troca de string , aceitar tanto arrays quanto caracteres unicos e a sua lista de argumentos não for muito longa, considere escrever algumas vezes o mesmo código passando um caracter por vez ao invés de uma linha passando arrays nos argumentos de pesquisa e troca.
  13. É melhor usar switch/case do que multiplos if’s e else.
  14. Usar supressão de erros com @ na frente da função é muito lento.
  15. Ative o mod_deflate do apache( modulo de compressão de resposta).
  16. Feche as conexões ao banco de dados quando você não for mais usa-lo.
  17. $row[’id’] é 7x mais rapido que $row[id]
  18. Mensagens de erros tem custo elevado, desligue-as em produção.
  19. Não use funcões dentro de loops, como:
    1. for ($x=0; $x < count($array); $x)

    A função count() é chamada em cada iteração.

  20. Incrementando uma variavel local é mais rapido.
  21. Incrementando uma variavel global é 2x mais lento que em uma variavel local.
  22. Incrementando uma propriedade ( $this->prop++) é 3x mais lento que em uma variavel local.
  23. Incrementando uma variavel local não definida é de 9x a 10x mais lento do que uma variavel local pré-inicializada.
  24. Declarando uma variável global sem usá-lo em uma função também atrasa as coisas (com aproximadamente a mesma quantidade incrementando como uma variavel local).O PHP provavelmente faz um checagem para ver se existe a nível global
  25. A invocação de métodos parece ser independente do número de métodos definidos em uma classe, em uma classe de teste onde se adicionou 10 metódos não teve mudança de performance.
  26. Métodos em classes derivadas rodam mais rápido do que aqueles definidos na classe base.
  27. Use ‘ ao invés de ” em strings quando não for preciso usar variaveis ou escapes, assim o PHP não necessita procurar e interpretar esses caracteres especiais.
  28. Prefira usar HTML puro se for possivel, scripts PHP são servidos de 2x a 10x mais lentos que equivalentes.
  29. Em cada requisição seus scripts PHP são recompilados, use uma solução de cache, isso pode te dar um ganho de 25 a 100% . Veja
  30. Quando lidando com string e você precisar verificar se a string possui certo tamanho, você entendidamente desejara usar a função strlen().
    Essa função é bastante rapida, já que ela não faz nenhum calculo, apenas retorna o tamanho ja conhecido da string disponivel na estrutura zval(estrutura interna do C usada para guardar variaveis PHP). No entanto como strlen() é uma função ela ainda assim é lenta, porque o PHP precisa fazer varias operações como lowercase e buscas na hashtable, e em seguida executar a dita função.
    Algumas vezes você podera aumentar a velocidade do seu código usando um truque com isset().
    Exemplo: Digamos que voce tem :

    if (strlen($foo) < 5) { echo “Foo is too short”; }
    1. # versus
    2. if (!isset($foo{5})) { echo “Foo is too short”; }

    Usando isset() sera mais rapido que strlen(), porque diferente de strlen(), isset() é um construtor de linguagem e não uma função, isso quer dizer que a sua execução não necessita busca na hashtable nem uso de lowercase. Virtualmente você não sobrecarga no código atual para determinar o tamanho da string.

  31. Quando incrementando ou decrementando o valor de uma variavel, $i++ normalmente é mais lenta que ++$i. Isso é especifico para PHP, ou seja, não se aplica a outras linguagens, não sai por ai modificando seu código java ou C. Isso se da porque $i++ usa 4 opcodes enquanto ++$i precisa de somente 3.
  32. Nem tudo precisa ser OOP, gera muita sobrecarga, cada chamada de método e objeto consome um monte de memória.
  33. Não implemente cada estrutura de dados como uma classe, arrays são utéis também.
  34. Não divida muito os métodos, pense bem cada código que sera reusado.
  35. Você sempre podera dividir o código no futuro, caso necessario.
  36. Faça uso das incontaveis funções pré-definidas.
  37. Se você tem muito tempo consumido por funções em seu código, considere escreva-las como extensões C.
  38. Faça Profile do seu código. Um profiler mostra quanto tempo cada parte do seu código consome. A extensão Xdebug ja contém um profiler.
  39. Excelente artigo sobre otimização PHP de John Lim (inglês)

Comentarios

50 perguntas para o Webmaster

Esse texto eu encontrei no Blog do Juliano Barreto. Como é difícil encontrar textos antigos na Info, ainda que existam os endereços das publicações, reproduzo aqui com o devido crédito.

É um texto muito interessante para quem está por trás de qualquer site. Perguntas muito importantes que devem ser vistas e revistas. Claro que cada site tem suas características próprias, então, ao ler as perguntas adeque-as ao planejamento do site. Caso alguma pergunta esteja dentro do planejamento do que se propõe o site e foi respondida negativamente, não hesite em mudar.

Criar um site do zero não é fácil. Só que corrigir defeitos de um site já publicado pode ser ainda mais difícil. Por isso o especialista em marketing online Carsten Cumbrowski compilou essa lista para o blog Search Engine Journal .Se você está prestes a publicar seu primeiro site ou se já é macaco velho na arte de subir páginas dê uma boa olhada nesse questionário. Aposto que pelo menos uma perguntinha vai te surpreender e fazer você correr para o Dreamweaver.

Acessabilidade

  1. O conteúdo está separado por elementos de navegação?
  2.  O site é compatível com vários browsers diferentes?
  3. Os códigos HTML e CSS estão de acordo com os padrões do W3C?
  4. As descrições das fotos (do alt) estão em todas as imagens relevantes?
  5. A informação essencial do site pode ser lida em modo texto ou apenas em flash e imagens?

Navegação

  1. Os links têm textos que indicam claramente para onde eles levam?
  2. Qual é o número de cliques que leva o visitante para a parte mais remota do site?
  3. Se há uma tela de apresentação em Java/JavaScript/Flash, há uma alternativa em HTML simples?
  4. Quando um item ou um link é clicado, ele responde imediatamente?
  5. Os itens clicáveis da interface mostram visualmente que foram acionados?
  6. A navegação é intuitiva? Os ícones são óbvios ou obscuros? Itens clicáveis e não-clicáveis podem ser diferenciados sem dificuldade?
  7. Como é a legibilidade (tipo da fonte, tamanho, estilo) do site?
  8. Há uma declaração clara e curta dos objetivos do site?
  9. Indique caminhos em todas as páginas, não crie ruas sem-saída.
  10. Há uma mapa do site? Se não, existe uma busca por palavra-chave?

Design

  1. O design do site é estéticamente atraente?
  2. As cores usadas são harmoniosas e logicamente relacionadas?
  3. As cores e o contraste podem atender quem tem deficiências visuais?
  4. O design é apropriado para a audiência do site? Levando em conta que as pessoas devem ler o conteúdo do site sem fazer nenhum ajuste no seu navegador.
  5. As fontes são legíveis em várias resoluções de tela?

Conteúdo

  1. O site tem pouco texto mas não é informativo?
  2. As regras de copywriting e regras de uso estão claras para a sua audiência?
  3. Os blocos de texto estão separados em linhas com menos de 80 caracteres?
  4. O texto pode ser redimensionado via browser ou o CSS restringe alterações?
  5. O contraste entre a cor do texto e o background facilita a leitura?
  6. O texto está separado em pequenos blocos, com trechos destacados, parágrafos e sub-parágrafos e facilidade para cópia, quando necessário?
  7. Existem links para explicar jargões técnicos e indicar mais detalhes sobre os artigos?
  8. Você já criou a página “Sobre esse site” que identifica o autor do conteúdo e dá crédito para outras pessoas que contribuem para a página?
  9. Há testemunhos de usuários do site? Você os publica?
  10. Você atualiza regurlamente o site ou é motivado pela frase: ‘coloque no ar e esqueça’?

Segurança

  1. Há algum falha de segurança óbvia?
  2. Como os formulários reagem ao uso de caracteres especiais?
  3. Os diretórios pessoais estão protegidos com senha .htaccess?
  4. Diretórios como cgi-bin e images estão bloqueados ou protegidos com configurações que limitam as permissões de acesso a eles?
  5. As informações dos clientes estão guardadas online? Se estão, elas estão protegidas contra acessos externos?

Outras considerações técnicas

  1. O site carrega rápido –mesmo para quem tem conexão discada?
  2. Todos os links internos e externo estão funcionando?
  3. Os scripts estão funcionando sem exibir erros?
  4. O site está livre de problemas causados pelo servidor?

Outra considerações sobre marketing

  1. O site está otimizado para os mecanismos de busca (ênfase no texto essencial, tags, etc.)?
  2. A página inicial convida o usuário a ir mais fundo no site?
  3. O site tem elementos que encorajam visitas futuras ou a indicação para outros visitantes?
  4. O Robots.txt está configurado?
  5. Há um mapa do site?
  6. Todas as páginas podem ser acessadas por meio de um link simples de HTML?
  7. Quanto texto sobra na página depois de remover todas as imagens, applets e Flash?
  8. As páginas podem ser acessadas apenas por uma URL ou tem vários links disponíveis, com conteúdo duplicado?

Coisas legais e legitimação

  1. Você oferece informações como um número de telefone e um endereço real? Ou pelo menos um e-mail que não seja webmaster@algumacoisa.com?
  2. A página tem uma declaração de Termos de Uso para evitar que possíveis reclamações sobre o controle de material com direitos autorais protegidos recaiam sobre o site?
  3. Há uma definição sobre a privacidade dos usuários que informam seus e-mails e outras informações pessoais?

Comentarios

Página de contato em ASP.Net

Em ASP.Net, utilize o seguinte código:

Dim Msg As New System.Web.Mail.MailMessage
Msg.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.seudominio"
Msg.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
Msg.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
Msg.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
Msg.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = "suaconta@seudominio"
Msg.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "senha"
Msg.To = "contadodestinataria@dominio"
Msg.From = "suaconta@seudominio"
Msg.Subject = "Assunto"
Msg.Body = "Mensagem"
System.Web.Mail.SmtpMail.SmtpServer = "mail.seudominio"
System.Web.Mail.SmtpMail.Send(Msg)

Pegue o código-fonte em http://noticias.aspecto.net/aspnet/contato.aspnet.txt.

Relacionados:

Comentarios

Qual é a diferença entre o tipo de dados CHAR e o tipo de dados VARCHAR? E o NCHAR e o NVARCHAR?

Uma dúvida comum no desenvolvimento com SQL Server é acerca dos campos String. Encontrei um excelente artigo falando sobre isso: Qual é a diferença entre o tipo de dados CHAR e o tipo de dados VARCHAR? E o NCHAR e o NVARCHAR?.

Primeiro vou explicar a diferença entre o CHAR e o VARCHAR:

* CHAR: Este tipo de dados sofre a ação da collation escolhida para o banco de dados em que foi criado (ou uma collation que pode ter sido especificada na criação da tabela) e armazena a mesma quantidade de caracteres que foram especificados na sua criação, preenchendo com espaços em branco casa haja necessidade. Por exemplo:

CREATE TABLE TB_STRING
(
CAMPO1 CHAR(10)
)

Se fizermos o seguinte INSERT:

INSERT TB_STRING('A')

O campo vai armazenar o valor ‘A’ e também vai armazenar mais nove espaços em branco depois. Por causa desta característica o tipo de dados CHAR é chamado de tipo de dados com tamanho fixo.

* VARCHAR: Este tipo de dados também sobre a ação da collation para o banco de dados em que foi criado (ou uma collation que pode ter sido especificada na criação da tabela) e armazena SOMENTE a quantidade de caracteres que foram especificados na sua criação . Por exemplo:

CREATE TABLE TB_STRING1
(
CAMPO1 VARCHAR(10)
)

Se fizermos o seguinte insert:

INSERT TB_STRING1('A')

O campo vai armazenar o valor ‘A’ SOMENTE, sem colocar espaços em branco depois. Por causa desta característica o tipo de dados VARCHAR é chamado de tipo de dados com tamanho variável.

Uma outra pergunta que sempre me fazem é: quando devo utilizar o CHAR ao invés do VARCHAR uma vez que o CHAR ocupa mais espaço ? A resposta é simples: o tipo CHAR deve ser utilizado quando sabemos de antemão que todos os dados inseridos em determinada coluna não são variáveis como, por exemplo, uma coluna que armazena um código de peça que sempre precisa ter 5 dígitos. Outro fator a ser considerado são as pesquisas feitas utilizando o operador =.

Já o VARCHAR deve ser utilizado quando não sabemos o que vamos armazenar. Um exemplo pode ser o nome do cliente ou razão social que sempre acaba variando.

Quanto ao desempenho é provável que os tipo de dados VARCHAR apresentem uma pequena diferença em relação ao tipo de dados CHAR, principalmente em operações que leiam muitos registros como a criação de índice. Porém esta diferença só é perceptível quando a quantidade de dados é grande e estamos fazendo uma medição correta.

Já os tipos de dados NCHAR e NVARCHAR são análogos aos tipos de dados CHAR e VARCHAR, respectivamente, porém com uma pequena diferença: os tipos de dados NCHAR e NVARCHAR não sofrem ação da collation e sempre gastam dois bytes para armazenar cada caractere.

Comentarios

Proteção para o xoops

Leia no artigo Protector - Segurança no seu XOOPS dicas de como aplicar medidas de segurança para o uso do XOOPS.

Comentarios

« Anteriores