Fragments é um recurso muito bacana que está disponível no framework Kohana desde a versão 3.0, que permite de forma simples e rápida fazer cache de alguma view ou trecho HTML.
Basicamente você pode usar Fragments quando o tempo de leitura do fragmento for menor do que o tempo de geração do mesmo contéudo. Isso pode ser muito útil naqueles casos onde você tem um menu ou parte do seu layout que pode ser processada uma única vez e sempre ser carregada de um cache em vez de ser processada a view a cada requisição.
Como usar
Vamos usar o exemplo do menu:
// Cache do fragmento por 10 minutos
if (!Fragment::load('viewMenu', Date::MINUTE * 10))
{
// Tudo até a chamada Fragment::save() será gravado como fragmento
echo html::anchor('inicio','Início');
echo html::anchor('kohana','Kohana');
echo html::anchor('plugins','Plugins');
echo html::anchor('contato','Contato');
// Salva o fragmento em cache
Fragment::save();
}
O código já comentado fica bem mais fácil do que explicar :)
Simplificando, funciona da seguinte forma:
- Fragment::load() tenta carregar o fragmento do cache
- Se não encontrar retornará false, e ficará aguardando o trecho a ser guardado neste fragmento até a chamada Fragment::save()
- O padrão de armazenamento de cada fragmento é 30 segundos, mas você pode especificar um timeout na chamada Fragment::load()
- Você pode forçar um fragmento ser excluído usando Fragment::delete() ou usando timeout como zero

Sem inspiração pra uma imagem, postei o código de exemplo :)
Não é interessante usar Fragments para guardar variáveis, objetos ou ainda resultados de banco de dados. Para objetos mais complexos o módulo Cache é muito mais robusto e eficiente.
É simples, é Kohana!
É por isso que eu gosto :)
Marcelo mandando bem como sempre… hehehe
Nnao cheguei a usar esse recurso ainda, mas achei bem interessante, vou dar uma olhada pra projetos futuros.
abraços
Matheus,
Estou trabalhando num projeto que usam vários widgets, e desenvolver eles usando Fragments houve um ganho de performance muito grande. Como é um recurso pouco usado, resolvi compartilhar escrevendo o post, vale a pena.
Um abraço e obrigado pela visita!
Legal essa feature. Já vi ela em outros frameworks e é bem útil
Uma dúvida. Um fragmento pode ser um trecho de HTML simples?
É possível sim.
Mas fazer cache de um HTML direto em disco (Fragments usa cache em disco) não sei se vai retornar muito ganho de performance.
Neste caso acho que o Cache mesmo é mais efetivo, pois tem drivers que permitem guardar em memória RAM (APC, XCache, Memcache).
Abraço :)
Boa Marcelo!
Tbm não conhecia este recurso! mas agora já é mais um a ser testado na minha tasklist.
Kohana neles!!!