Script de Debug para o Opcache

Resumo:
Introdução

O Opcache é um recurso do PHP para cachear o byte-code do código interpretado de um script PHP. Para ajudar a debugar o uso do Opcache, o PHP oferece a função opcache_get_status. Neste artigo vou compartilhar um script para visualizar o debug do retorno dessa função de forma amigável.

Caches de Aplicação

Resumo:
Introdução

É muito comum (e útil) aplicações complexas armazenarem algumas informações em cache para diversas finalidades. A mais importante é o rápido acesso a uma informação que tem um custo relativamente alto para ser obtido, seja pelo tempo gasto, consumo de recursos computacionais para se realizar a consulta ou pela quantidade de vezes que se acessa a mesma informação.

Neste artigo, vou mostrar o conceito básico para se montar uma estratégia de cache e algumas exemplos de utilização.

Cuidados ao criar um script de Cron

Resumo:
Introdução

Em 2010, escrevi o artigo Tarefas agendadas via Cron + PHP, que ensinava o básico sobre como montar um script de cron e configurá-lo para que fosse executado com certa periodicidade automaticamente. Hoje, quase 6 anos depois, revolvi escrever mais um artigo sobre o assunto, mas desta vez para compartilhar algumas lições valiosíssimas que devem ser levadas em conta ao se preparar um script de cron.

Observação: as dicas apresentadas neste artigo também valem para a construção de serviços (daemons) em PHP.

Minificação de arquivos para Web

Resumo:
Introdução
compressão de arquivos

O ambiente web é repleto de requisições e respostas HTTP contendo arquivos HTML, JS, CSS, imagens, etc. Dependendo da arquitetura da aplicação, cada página pode requerer muitos arquivos de estilos, script ou imagens auxiliares, que acabam consumindo tempo para serem baixados e processados pelo navegador. Portanto, é útil aplicar algumas técnicas para minimizar o tamanho destes arquivos, afinal, arquivos menores podem ser trafegados mais rapidamente. Uma página rápida é sempre bem vista pelos buscadores, como o Google, pois impacta diretamente numa melhor experiência do usuário.

Neste artigo, veremos algumas dicas de como minimizar o tamanho de alguns tipos de arquivos, para tornar as páginas mais rápidas de serem carregadas e, consequentemente, ter maior relevância para buscadores. Os assuntos estão divididos em:

Link prefetching

Resumo:
Introdução
Performance

Link prefetching (ou pré-carregamento de links) é um recurso oferecido por navegadores para que sites possam especificar arquivos que devem ser pré-carregados, de forma que estejam prontamente disponíveis quando solicitados, melhorando a performance e consequentemente a usabilidade do site.

Até o momento, apenas os navegadores baseados na engine Gecko (como é o caso do Firefox) implementam o link prefetching, embora a especificação está sendo proposta como recomendação da W3C.

Neste artigo, veremos como o recurso funciona e como tirar proveito para otimização de sites.

Full text search com Sphinx

Resumo:
Introdução
logo do sphinx search

Full text é um recurso conhecido pelos entusiastas de bancos de dados. Ele permite a realização de queries de busca de registros em campos de texto com mais flexibilidade que uma busca envolvendo os operadores convencionais como o =, <>, LIKE, NOT LIKE, etc. Vários bancos de dados relacionais dão suporte a este recurso, por exemplo, o MySQL, PostgreSQL, Oracle, até o SQLite possui módulos que suportam Full Text.

Porém, também existem bancos de dados especialistas em buscas Full Text. Neste artigo, vou mostrar o Sphinx, que é um banco de dados Open Source, gratuito, muito prático e que tem evoluído rapidamente. Veremos as vantagens/desvantagens e quando é útil utilizar este tipo de banco.

Threads no PHP com pthreads

Resumo:
Introdução
representação de threads de um processo

Thread é um importante recurso de algumas linguagens de programação, que provê melhoria de performance através da execução de blocos de instruções em paralelo. Por outro lado, ela também exige uma forma própria de pensar na solução dos problemas. Neste artigo, veremos rapidamente o que são threads e um tutorial de como e onde elas podem poderão ser usadas com PHP.

PHP 5.5.0 Beta 1

Resumo:
Introdução

Atenção: o PHP 5.5 foi lançado em 20/06/2013. Confira as últimas notícias sobre o Lançamento do PHP 5.5.0.

Nos últimos meses, escrevi sobre as versões Alpha do PHP 5.5, que representa a nova "família" de versões 5.5.X. A princípio, seriam lançadas apenas quatro versões alpha, mas a equipe de desenvolvimento optou por lançar o Alpha 5 e o Alpha 6, com algumas correções e melhorias. Hoje, porém, foi lançada a primeira versão Beta. E, para nossa alegria, foram incorporadas algumas melhorias, além das correções. Lembrando que esta versão ainda não deve ser usada em produção. É apenas uma versão para testes.

Etag - Cache de arquivos no navegador

Resumo:
performance
Introdução

No primeiro artigo "Expires no Apache - Cache de arquivos no navegador", vimos como configurar o apache para utilizar o mod_expires para sugerir o cache de arquivos estáticos no navegador, com base na data de modificação. No segundo artigo "Expires no PHP - Cache de arquivos no navegador", vimos algo similar, mas aplicado a arquivos gerados dinamicamente.

Neste artigo, veremos um outro mecanismo usado para sugerir o armazenamento de um documento no cache do navegador. Este mecanismo é chamado ETag (Entity Tag).

Framework YAF PHP

Resumo:
Introdução

YAF-PHP (Yet Another Framework) é um framework para desenvolvimento de aplicações Web em PHP, criado em 2011 pelo "Laruence" (um dos membros da equipe de desenvolvimento da linguagem PHP). Porém, ele possui um grande diferencial em relação aos milhares de frameworks disponíveis para PHP: ele é disponibilizado na forma de extensão do PHP. Neste artigo vamos conhecer um pouco deste framework, apontando suas vantagens e desvantagens.

Montando seletores CSS eficiêntes

Resumo:
Introdução

Recentemente, li o artigo How to write efficient css selectors (Como escrever seletores CSS eficiêntes) e aprendi que os seletores descendentes do CSS na verdade são avaliados da direita para a esquerda e não da esquerda para direita, como eu imaginava. Este é um pequeno detalhe, mas que faz toda a diferença na hora de montar seletores CSS de forma eficiênte para que o navegador renderize uma página com alta performance.

Neste artigo, vamos entender melhor como funciona esse processo de aplicação dos estilos pelas folhas de estilo e debater sobre a criação de seletores CSS eficiêntes.

Generators no PHP 5.5

Resumo:
Introdução

Uma das mais importantes novidades do PHP 5.5 foi o suporte aos generators. Esta novidade permite a criação de alguns tipos de iteradores de forma muito mais fácil e intuitiva.

Já comentei sobre iteradores no artigo As interfaces Iterator, ArrayAccess e Countable. Porém, vou apresentar rapidamente o conceito para quem ainda não o conhece.

Derreferenciamento de arrays e strings constantes no PHP

Resumo:
Introdução

No artigo anterior, postei sobre o anúncio do PHP 5.5.0 alpha, citando as novidades da futura versão do PHP. Neste artigo, veremos sobre a melhoria "Derreferenciamento de arrays e strings constantes" (constant array/string dereferencing). Não se assuste com o nome, pois é uma melhoria simples de entender.

Expires no PHP - Cache de arquivos no navegador

Resumo:
performance

Introdução

No artigo Expires no Apache - Cache de arquivos no navegador, vimos como configurar o servidor HTTP (mais especificamente o Apache) para aproveitar o cache do navegador para guardar conteúdo estático, tais como imagens, arquivos CSS ou arquivos JS. Com isso, a performance do seu site será muito melhor (page speed), especialmente se utiliza muito conteúdo estático.

Neste artigo, veremos como fazer com que arquivos dinâmicos gerados com PHP possam usufruir do mesmo mecanismo de cache, mas sem prejudicar o caráter dinâmico da aplicação. Com isso, haverá ainda mais ganhos na performance, trazendo benefícios para o usuário e também para SEO.

Utilizando Sessões em PHP de forma inteligente

Resumo:
macaco pensando
Introdução

Armazenamento de dados em sessão é um mecanismo oferecido pelo PHP que permite que a aplicação armazene/recupere dados específicos por usuário e compartilhados entre diferentes scripts. Este recurso é comumente utilizado para garantir a autenticação do usuário para que ele só precise informar a sua credencial uma única vez (log-in). Porém, este recurso também é importantíssimo para criar aplicações com nível de dinamicidade alto, e que requer o armazenamento constante de dados temporários, como uma cesta de compras, por exemplo. Neste artigo, veremos como utilizar a sessão de forma inteligente e otimizada, além de aprofundar em seu funcionamento.

Otimização de consultas SQL usando LIMIT

Resumo:
performance

É muito comum realizar consultas no Banco de Dados que esperam receber no máximo uma linha de resultado. Por exemplo, durante a autenticação de um usuário (log-in), para recuperar o registro do BD e comparar a senha com aquela informada no formulário.

Nestes casos, pode ser útil incluir a cláusula "LIMIT", implementada por diferentes SGBDs (por exemplo, MySQL e PostgreSQL).

Judy Arrays do PHP

Resumo:
Introdução

Judy Array é uma extensão Pecl (código em C que possui interface para utilização em PHP) que implementa arrays associativos com os benefícios de escalabilidade, alta performance e eficiência no uso de memória.

Otimização de métodos que retornam arrays em PHP

Resumo:
performance

Existem métodos que servem apenas para retornar arrays. Em alguns casos, estes arrays são muito grandes e ocupam muito espaço no próprio arquivo da classe onde o método se encontra. Arquivos muito grandes acarretam em uso de memória para carregá-los. Por este motivo pode ser útil considerar uma estratégia de otimização deste array, para que ele só seja carregado caso necessário (consulta sob demanda).