<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>savestate &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/savestate/</link>
	<description>Feed of posts on WordPress.com tagged "savestate"</description>
	<pubDate>Wed, 10 Feb 2010 13:00:00 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[Client-side X Server-side em JSF. Onde salvar o estado?]]></title>
<link>http://pablonobrega.wordpress.com/2009/08/29/client-side-x-server-side-em-jsf-onde-salvar-o-estado/</link>
<pubDate>Sat, 29 Aug 2009 17:48:03 +0000</pubDate>
<dc:creator>Pablo Nóbrega</dc:creator>
<guid>http://pablonobrega.wordpress.com/2009/08/29/client-side-x-server-side-em-jsf-onde-salvar-o-estado/</guid>
<description><![CDATA[Um das decisões mais debatidas em JSF ou Seam e que os desenvolvedores dão pouca importância é onde ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Um das decisões mais debatidas em JSF ou Seam e que os desenvolvedores dão pouca importância é onde salvar a árvore de componentes da view. Há duas opções disponíveis: do lado do cliente (<em>client-side</em>) e do lado do servidor (<em>server-side</em>), cada uma com suas vantagens e desvantagens.</p>
<p>Para entender melhor, vamos ver o ciclo de vida do JSF, entender em que contexto se encontra a criação da árvore de componentes, e porque ela existe:</p>
<p><!--more Leia mais--></p>
<hr /><strong><br />
O Ciclo JSF e a Árvore de Componentes</strong></p>
<div id="attachment_89" class="wp-caption alignnone" style="width: 510px"><a href="http://pablonobrega.wordpress.com/files/2009/08/ciclo_jsf_completo.jpg"><img class="size-full wp-image-89 " title="ciclo_jsf_completo" src="http://pablonobrega.wordpress.com/files/2009/08/ciclo_jsf_completo.jpg" alt="Ciclo do JSF Completo" width="500" height="269" /></a><p class="wp-caption-text">Ciclo do JSF</p></div>
<p>A árvode de componentes do JSF é uma estrutura baseada em XML que identifica os componentes que estão na view. Quando se usa o JSF cada elemento da tela será associado a um espaço na árvore. O estado da árvore é armazenado para quando houver uma requisição do tipo <em>postback</em>*, alterações nos campos do formulário sejam aplicados às propriedades associados a esses campos e quaisquer eventos sejam enfileirados e invocados na sequência.</p>
<p>Na figura acima, observamos que da fase <em>Restore View</em> sai uma seta direto para a fase <em>Render Response</em>, ilustrada pela expressão <em>&#8220;No Query Data&#8221;</em>. Essa situação acontece quando temos uma requisição inicial em JSF (initial request), ou em uma forma mais simples de entender, quando chamamos uma tela pela primeira vez. É nesse ciclo de  apenas 2 fases que a árvore de componentes da view é criada. Uma vez que o response é processado, a árvore é serializada e enviada junto com o response para o cliente ou armazenada na sessão HTTP do usuário sob  uma chave única.</p>
<p><strong>A configuração</strong></p>
<p>Para configurarmos o local onde salvamos a árvore de componentes, utilizamos um contexto de parâmetro chamado<strong> javax.faces.STATE_SAVING_METHOD</strong> no <em>web.xml,</em> conforme o código abaixo mostra:</p>
<pre class="brush: xml;">

&lt;context-param&gt;
&lt;param-name&gt;javax.faces.STATE_SAVING_METHOD&lt;/param-name&gt;
&lt;param-value&gt;client&lt;/param-value&gt;
&lt;/context-param&gt;
</pre>
<p><span style="text-decoration:underline;">Caso não se especifique nada, o local padrão será no servidor.</span></p>
<p><strong>As abordagens</strong></p>
<p><strong>Server-side</strong></p>
<p>Salvando o estado no servidor, a árvore de componentes é armazenada na sessão HTTP do usuário. Um token é enviado junto com o response e armazenado em um campo <em>hidden</em>. Posteriormente esse token  é usado para recuperar a árvore da sessão em um <em>postback</em>*.</p>
<p><strong>Client-side </strong></p>
<p>A árvore é serializa, compactada, codificada e enviada junto com o response para o browser do cliente. O processo é invertido no <em>postback</em>* para que a árvore possa ser recuperada.</p>
<p><strong><br />
Vantagens X Desvantagens</strong></p>
<table style="border-collapse:collapse;" border="1" cellspacing="0" cellpadding="0" width="550">
<tbody>
<tr style="height:15pt;">
<td style="height:15pt;width:71pt;" width="94" height="20"></td>
<td style="width:240pt;text-align:center;" width="228"><strong>Client-Side</strong></td>
<td style="width:240pt;text-align:center;" width="228"><strong>Server-Side</strong></td>
</tr>
<tr style="height:15pt;">
<td style="height:15pt;" height="20">Desvantagens</td>
<td>- Aumenta o tráfego na rede<br />
- Clientes com conexões mais lentas podem perceber um grande <em>lag<br />
</em>- Requisições Ajax tornam o tráfego na rede maior ainda por precisarem reconstruir a árvore <em> </em></td>
<td>- Aumenta o tamanho da sessão HTTP<br />
- Consome mais recursos do servidor<br />
- Depende da sessão do usuário (pode ter impacto na experiência do usuário)</td>
</tr>
<tr style="height:15pt;">
<td style="height:15pt;" height="20">Vantagens-</td>
<td>- Economiza memória do servidor;<br />
- Não é afetada pela sessão do usuário;<br />
- Risco maior para a segurança;<br />
- Aumenta o processamento no servidor e no cliente;</td>
<td>- Reduz largamente o tráfego na rede;<br />
- Diminui o tempo de resposta das requisições do usuário;<br />
- Diminui o consumo de memória no cliente<br />
- Baixo consumo de processamento no servidor;</td>
</tr>
</tbody>
</table>
<p><strong><br />
E então, qual opção utilizar?</strong></p>
<p>No livro Seam in Action, o autor  Dan Allen sugere que se utilize a abordagem salvando no servidor. Ele alega que é muito ruim deixar o usuário esperando alguma resposta do sistema, pois, assim como temos pessoas com boa conexão ligadas à rede, existem aquelas que não possuem uma boa banda. Na minha opinião, faltou ele ressaltar que outros fatores devem ser pesados, como:</p>
<ol>
<li>O sistema é interno e a qualidade da rede é satisfatória?</li>
<li>Quantas usuários simultâneos meu sistema terá?</li>
<li>O servidor tem uma boa configuração?</li>
<li>O sistema possui telas muito complexas, com formulários muito complexos?</li>
</ol>
<p>Isso posto, acredito que algumas situações podem também favorecer a abordagem <em>client-side</em>. Para você que está começando, os itens acima podem lhe dar um bom &#8220;norte&#8221;.</p>
<p><strong>Referências</strong></p>
<ul>
<li>ALLEN, Dan; <strong>Seam in Action</strong>: Manning, 2009. 590 p.</li>
<li>PONTE, Rafael.<strong>STATE_SAVING_METHOD &#8211; server ou client ?</strong>. Disponível em: &#60;http://www.rponte.com.br/2007/10/14/state_saving_method-server-ou-client/&#62; Acesso em: 29 de agosto de 2009.</li>
</ul>
<hr />* Postback: tipo de requisição em JSF que em uma situação normal utiliza todo o ciclo do framework (isso não ocorre quando, por exemplo, há um erro de validação, conversão, o <em>immediate</em> é utilizado, entre outros casos).</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Banner]]></title>
<link>http://gamemoose.wordpress.com/2008/09/26/banner/</link>
<pubDate>Fri, 26 Sep 2008 04:13:45 +0000</pubDate>
<dc:creator>ultramoose</dc:creator>
<guid>http://gamemoose.wordpress.com/2008/09/26/banner/</guid>
<description><![CDATA[Kyle Gallant(http://www.kylegallant.com/) finished the banner for me. We are fussing around a bit to]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Kyle Gallant(<a href="http://www.kylegallant.com/">http://www.kylegallant.com/</a>) finished the banner for me. We are fussing around a bit to recenter it and stuff, but it looks fantastic. Thanks alot kyle.</p>
</div>]]></content:encoded>
</item>

</channel>
</rss>
