Usando mod_deflate

O que é mod_deflate?

O mod_deflate é uma extensão para apache que faz parte do seu pacote de extensões desde a versão 2.0.45, porém por padrão ela vem desativada.

O que o mod_deflate faz?

Com o mod_deflate ativado o servidor apache faz uma compressão dos dados e arquivos para só então enviar a reposta para o navegador que fará a descompressão da informação recebida.

Quais as vantagens de se utilizar o mod_deflate?

Como os dados que são enviados para os navegadores são dados comprimidos e consequentemente menores, a página carrega mais rápido e ocorre uma economia na Bandwidth (largura de banda) tanto para o cliente quanto para o servidor. Em média com a compressão o tamanho da página é reduzido entre 60% e 80%.

Quais as implicações de utilizar o mod_deflate?

A principal implicação de se utilizar o mod_deflate é que mais processamento será necessário por parte do servidor e se o seu servidor já estiver com uma carga pesada talvez não seja interessante ativar essa extensão, a não ser que você julgue que os benefícios superam os custos.

Outra implicação que você precisa estar ciente é que nem tudo precisa ser comprimido, por exemplo imagens e PDF já são tipos de arquivos comprimidos e se forem comprimidos novamente apenas implicará em mais processamento para o seu servidor e para o cliente (navegador) com um ganho quase nulo na redução do tamanho dos arquivos.

SPL no PHP – Interactor parte 1

Introdução

O Standard PHP Library (SPL) é um coleção de funções, classes e interfaces. Algumas dessas coleções estão disponíveis desde a versão 5.1 do PHP porém, infelizmente, nem todos os profissionais conhecem ou adotam no seu dia-a-dia, principalmente quem gosta de trabalhar mais com arrays do que com objetos, esse é justamente o foco maior desse arquivo. O SPL tem como objetivo prover que desenvolvedores usem ao máximo o poder da orientação a objetos no PHP, vamos ver isso dois exemplos de Interactors.

Arrays

Uma diferença notória, e a que escolhi mostrar inicialmente, é o uso de arrays por interactors. Quando se está trabalhando com bastante informações, a leitura de um array pode chegar a demorar, o que em um sistema não é nada agradável, diferente do array que lê todo o dado, o interactor lê apenas a o dado solicitado. Isso nos proporciona um ganho de memória considerável a depender do tamanho dos dados.

Vamos a um exemplo. Eu tenho um array com 1000 posições, e preciso trazer apenas a primeira delas, eu poderia fazer muito bem com diversos desenvolvedores fazer e usar:

echo $meuArray[0];

Ao invés de trazer todo o array, e escrever apenas a primeira posição como feito acima, eu posso trazer direto apenas a primeira posição, os demais dados não estarão ocupado memória até que eu chame-os:

$meuInteractor = new ArrayInteractor($meuArray); //Converte o array para interactor
$meuInteractor->rewind(); //Vai para o inicio do array
echo $meuInteractor->current(); //Retorna a posição atual do array

Esse é apenas um simples exemplo, mas claro, podemos pensar em diversos outras formas de uso a depender de nosso cenário.

Diretórios e arquivos

Podemos também saber de forma simples, sem fugir da orientação a objetos, informações de arquivos ou diretórios como mostrado no código abaixo:

$dir =  new DirectoryIterator(__DIR__); //__DIR__ retorna o diretório que o arquivo está
foreach ( $dir as $file ) {
echo $file ->getFilename() . ‘<br>’; //Retorna o nome do arquivo corrente
}

Já que estamos falando de arquivos, vamos dizer que eu quero pegar apenas os arquivos 2, 3, 4, 5 e 6 diretório atual, ou seja, começando do 2, desejo os próximos 5 arquivos:

$dir =  new DirectoryIterator(__DIR__);
foreach ( new LimitIterator( $path , 2, 5)  as $file ) {
$file ->getFilename() . ‘<br>’ ;
}

Com uso da classe LimitInteractor, podemos filtrar o resultado, lembrando que ele não trás tudo e exibe apenas o solicitado, mas sim, trás apenas o solicitado e com isso temos um economia de memória.

Referência

http://php.net/manual/en/book.spl.php
http://php.net/manual/en/language.constants.predefined.php