<?xml version="1.0" encoding="UTF-8"?>
<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/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Klaus Paiva &#187; Ajax</title>
	<atom:link href="http://blog.klaus.pro.br/tags/ajax/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.klaus.pro.br</link>
	<description>Idéias e desventuras de Klaus Paiva</description>
	<lastBuildDate>Thu, 05 Aug 2010 22:55:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>O progresso dos novos navegadores</title>
		<link>http://blog.klaus.pro.br/2009/ler/o-progresso-dos-novos-navegadores/index.html</link>
		<comments>http://blog.klaus.pro.br/2009/ler/o-progresso-dos-novos-navegadores/index.html#comments</comments>
		<pubDate>Mon, 02 Mar 2009 22:54:58 +0000</pubDate>
		<dc:creator>Klaus Paiva</dc:creator>
				<category><![CDATA[Textos]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Desempenho]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Navegadores]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Vídeos]]></category>

		<guid isPermaLink="false">http://blog.klaus.pro.br/?p=219</guid>
		<description><![CDATA[Este texto é baseado (uma nota mental pública e estruturada, digamos) na apresentação &#8220;Performance Improvements in Browsers&#8221; feita por &#8220;John Resig&#8220;, que é ninguém menos que o pai da famosa biblioteca jQuery. Abaixo está o vídeo com a apresentação feita (aproximadamente 1h) e na sequência algumas notas e comentários sobre os temas apresentados. Abas separadas [...]]]></description>
			<content:encoded><![CDATA[<p>Este texto é baseado (uma nota mental pública e estruturada, digamos) na apresentação &#8220;<a href="http://ejohn.org/blog/talk-performance-improvements-in-browsers/"><em>Performance Improvements in Browsers</em></a>&#8221; feita por &#8220;<a href="http://ejohn.org/">John Resig</a>&#8220;, que é ninguém menos que o pai da famosa biblioteca <a href="http://jquery.com/">jQuery</a>.</p>
<p>Abaixo está o <a href="http://www.youtube.com/watch?v=13-3VMzfU3Y">vídeo com a apresentação</a> feita (aproximadamente 1h) e na sequência algumas <strong>notas e comentários sobre os temas apresentados</strong>.</p>
<div class="videos"><object width="425" height="344" data="http://www.youtube.com/v/13-3VMzfU3Y&amp;hl=pt-br&amp;fs=1" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/13-3VMzfU3Y&amp;hl=pt-br&amp;fs=1" /><param name="allowfullscreen" value="true" /></object></div>
<h3 class="subtitles">Abas separadas por processos</h3>
<p>Este é um fato que certamente você deve conhecer. Você está lá navegando tranquilamente com uma <strong>dezena (ou mais =) de abas abertas</strong>&#8230; Daí que você resolve acessar um site com um Javascript mal escrito, com uma animação em que o <a href="http://www.adobe.com/products/flashplayer/">Flash Player</a> se revolta e lá foi, o navegador inteiro congela e não resta outra opção senão matar o processo. Claro que a maioria dos navegadores traz opções para <strong>restaurar a seção anterior</strong> mas não deixa de ser bastante incômodo.</p>
<p>A separação das abas por processos permitiria <strong>matar (encerrar) apenas a aba problemática</strong>, mantendo as outras abas isoladas. Isso por si só já seria uma grande vantagem da separação por abas mas ainda há uma segunda vantagem também bastante interessante! =)</p>
<p>Com a separação em diversos processos o sistema operacional pode <strong>gerenciar melhor o processamento</strong>, alocando mais recursos para as partes onde é realmente necessário, sem congelar as outras partes do navegador.</p>
<p>Vale notar que essa divisão em processos distintos causa um aumento do consumo do memória sim mas, como a quantidade de memória disponível nos PCs atuais (mesmo para os &#8220;PCs de prateleira&#8221;) está deixando de ser um gargalo para o desempenho dos computadores, é de se esperar que os programas passem a fazer alocações maiores de memória. Mais ou menos como o princípio da <strong>lei da oferta e da demanda</strong>.</p>
<h3 class="subtitles">Linearização das instruções de funções</h3>
<p>O termo em inglês acho que permite um entendimento melhor: &#8220;<strong>&#8216;<a href="http://en.wikipedia.org/wiki/Inline_function">function inlining</a></strong>&#8220;. Essa é uma característica que, por exemplo, C++ possui. Usando essa propriedade o compilador pode trocar a chamada de uma função pelo corpo da função, fazendo com que a execução das instruções ocorra <strong>sem o <em>overhead</em> de chamar uma função</strong>.</p>
<p>Além disso, pelo código exibido nos <em>slides</em> parece que, diferentemente do C++, você não precisa dar uma dica para o compilador na hora de escrever a função indicando que a função é candidata ao &#8220;<em>inlining</em>&#8220;.</p>
<h3 class="subtitles">Rede</h3>
<p>Aqui vale destacar o <strong>aumento do número de <em>downloads</em> simultâneos para um mesmo domínio</strong>. Com o IE 7 ainda temos o limite de dois downloads mas, felizmente o IE 8 (beta) já tratá um <strong>limite três vezes maior</strong>, de <a href="http://www.microsoft.com/windows/internet-explorer/beta/readiness/developers-new.aspx#ajax">seis <em>downloads</em> simultâneos para o mesmo domínio</a>. A última versão dos demais navegadores já possui um valor de seis ou sete <em>downloads</em>.</p>
<p>Outro recurso bem legal, e este é uma boa ideia da Microsoft, é o <strong>atributo &#8220;defer&#8221; para a <em>tag</em> &lt;script&gt;</strong>. Esse atributo indica para o navegador que ele pode continuar a <strong>renderizar a página sem esperar o arquivo Javascript</strong> referenciado carregar. O atributo já funcionava no IE e vai funcionar nas novas versões do Firefox e Opera.</p>
<h3 class="subtitles">window.postMessage</h3>
<p>O método <strong>window.postMessage</strong> me chamou a atenção. Com ele será possível a <strong>comunicação entre páginas de domínios distintos</strong> de forma bem simples. O princípio é o seguinte: a página remetente da mensagem irá tentar enviar a mensagem para, por exemplo, um <em>iframe</em> destinatário. Este <em>iframe</em> irá verificar se o remetente é alguém que ele conhece para então aceitar a mensagem e executar alguma ação.</p>
<p>A página que receberá as mensagens pode &#8220;ouvir&#8221; os <strong>eventos de mensagens</strong> usando o tradicional método <a href="https://developer.mozilla.org/En/DOM/Element.addEventListener">addEventListener</a>. Verificando a propriedade <em>origin</em>, a página receptora pode <strong>descobrir pelo domínio se a mensagem está vindo de um destinatário conhecido ou não</strong>.</p>
<h3 class="subtitles">Ajax entre domínios diferentes</h3>
<p>Aquele sonho de fazer requisições Ajax entre os N domínios da sua aplicação está prestes a se realizar. <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Adicionando um cabeçalho (<em>header</em>) na resposta da requisição Ajax é possível especificar uma origem (além do próprio domínio) de onde aquela requisição pode ser atendida com segurança. O nome deste cabeçalho é &#8220;<strong>Access-Control-Allow-Origin</strong>&#8221; e está <a href="https://developer.mozilla.org/En/HTTP_Access_Control">melhor descrito nesta página</a>.</p>
<h3 class="subtitles">document.querySelectorAll</h3>
<p>Se você já usou a jQuery sabe como <strong>é prático encontrar os elementos da página usando a sintaxe de CSS</strong>. Melhor ainda se encontrar esses elementos usando a sintaxe de CSS seja possível de ser <strong>feito usando um método nativo do navegador</strong>. É isso que o método <a href="https://developer.mozilla.org/En/DOM/Document.querySelectorAll">document.querySelectorAll</a> permitirá. O melhor de tudo é que as próximas versões do IE, Firefox, Opera e Safari já trarão este método disponível.</p>
<h3 class="subtitles">Visual e CSS</h3>
<p>Adoradas por 10 em cada 10 <em>webdesigners</em>, as <strong>bordas redondas vieram pra ficar</strong>. =) Apesar de os navegadores trazerem implementações com nomes diferentes, todas as implementações funcionam bem. Ou seja, juntando essas propriedades: -moz-border-radius, -webkit-border-radius, -khtml-border-radius e <a href="http://www.w3.org/TR/css3-background/#the-border-radius">border-radius</a> as bordas redondas saem com facilidade.</p>
<p><strong>Sombras também estarão disponíveis</strong>. Nesta página há vários <a href="http://maettig.com/code/css/text-shadow.html">exemplos de uso da propriedade text-shadow</a>.</p>
<p>Outro recurso que certamente vai ser muito usado (e provavelmente muito mal usado também <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) é a possibilidade de se usar <strong><a href="http://ejohn.org/apps/fontface/blok.html">fontes personalizadas na página</a></strong>. Por fontes personalizadas entenda fontes que não estão instaladas na sua máquina. Coisa que já era possível de se fazer no Flash, agora também com CSS.</p>
<p>Além disso, há uma série de <a href="http://www.the-art-of-web.com/css/css-animation/">animações</a> que estarão disponíveis, por enquanto, para Firefox e Safari.</p>
<h3 class="subtitles">Desenho</h3>
<p>O objeto Canvas permite a renderização de elementos numa superfície 2D usando retas, curvas, arcos e/ou círculos. No <a href="https://developer.mozilla.org/">MDC</a> tem um <a href="https://developer.mozilla.org/En/Canvas_tutorial">tutorial bem bacana sobre Canvas</a>. Até me arrisquei a fazer uma &#8220;arte&#8221;: =)</p>
<pre class="javascript"><code><span class="co1">// &lt;canvas id="draw-area" width="150" height="150"&gt;&lt;/canvas&gt; no HTML</span>
<span class="kw2">var</span> canvas = document.<span class="me1">getElementById</span><span class="br0">(</span> <span class="st0">"draw-area"</span> <span class="br0">)</span>;
<span class="kw1">if</span><span class="br0">(</span> !canvas.<span class="me1">getContext</span> <span class="br0">)</span>
<span class="br0">{</span>
  <span class="kw1">return</span>;
<span class="br0">}</span>
<span class="kw2">var</span> context = canvas.<span class="me1">getContext</span><span class="br0">(</span> <span class="st0">"2d"</span> <span class="br0">)</span>;

context.<span class="me1">beginPath</span><span class="br0">(</span><span class="br0">)</span>;
<span class="kw2">var</span> side = <span class="nu0">150</span>;
<span class="kw2">var</span> offset = <span class="nu0">-4</span>;
<span class="kw2">var</span> i = <span class="nu0">0</span>;
<span class="kw1">while</span><span class="br0">(</span> <span class="kw2">true</span> <span class="br0">)</span>
<span class="br0">{</span>
  <span class="kw1">if</span><span class="br0">(</span> i % <span class="nu0">4</span> == <span class="nu0">0</span> <span class="br0">)</span>
  <span class="br0">{</span>
    <span class="kw2">var</span> x = offset + <span class="nu0">4</span>;
    context.<span class="me1">lineTo</span><span class="br0">(</span> x, offset <span class="br0">)</span>;
    offset = x;
    <span class="kw1">if</span><span class="br0">(</span> offset + <span class="nu0">4</span> &gt; <span class="nu0">78</span> <span class="br0">)</span> <span class="co1">// hard-coded mesmo ;P</span>
    <span class="br0">{</span>
      <span class="kw1">break</span>;
    <span class="br0">}</span>
  <span class="br0">}</span>
  <span class="kw1">else</span> <span class="kw1">if</span><span class="br0">(</span> i % <span class="nu0">4</span> == <span class="nu0">1</span> <span class="br0">)</span>
  <span class="br0">{</span>
    context.<span class="me1">lineTo</span><span class="br0">(</span> offset, side - offset <span class="br0">)</span>;
  <span class="br0">}</span>
  <span class="kw1">else</span> <span class="kw1">if</span><span class="br0">(</span> i % <span class="nu0">4</span> == <span class="nu0">2</span> <span class="br0">)</span>
  <span class="br0">{</span>
    context.<span class="me1">lineTo</span><span class="br0">(</span> side - offset, side - offset <span class="br0">)</span>;
  <span class="br0">}</span>
  <span class="kw1">else</span> <span class="kw1">if</span><span class="br0">(</span> i % <span class="nu0">4</span> == <span class="nu0">3</span> <span class="br0">)</span>
  <span class="br0">{</span>
    context.<span class="me1">lineTo</span><span class="br0">(</span> side - offset, offset <span class="br0">)</span>;
  <span class="br0">}</span>
  i++;
<span class="br0">}</span>
<span class="co1">//context.closePath();</span>
context.<span class="me1">stroke</span><span class="br0">(</span><span class="br0">)</span>;</code></pre>
<p>Outro detalhe importante é que o Canvas permitirá também a <strong>inserção de vídeos dentro dele</strong>.</p>
<h3 class="subtitles">JSON nativo</h3>
<p>Atualmente, ao receber uma <em>string</em> em <a href="https://developer.mozilla.org/En/JSON">JSON</a> você precisa usar um <a href="https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Functions/Eval#section_6">eval</a> para recuperar o objeto original. <strong>O eval é conhecidamente lento</strong>, até pelo fato de ser um método genérico, mas era a melhor saída para se ter acesso às informações contidas na <em>string</em> JSON mas, isso vai mudar!</p>
<p>Agora teremos métodos nativos para codificação e decodificação no formato JSON. A única dúvida que me restou é sobre o nome dos métodos. Nos slides os métodos se chamam <strong>encode e decode</strong>, já na <a href="https://developer.mozilla.org/En/Using_JSON_in_Firefox">página do MDC</a> e no <a href="http://wiki.ecmascript.org/doku.php?id=es3.1:json_support">wiki do ECMAScript</a> os métodos se chamam <strong>parse e stringify</strong>, respectivamente.</p>
<h3 class="subtitles">E por fim&#8230;</h3>
<p>&#8230; fico na torcida pra que as novas versões desses navegadores tenham uma rápida adoção por parte dos usuários. <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.klaus.pro.br/2009/ler/o-progresso-dos-novos-navegadores/index.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Último dia da oficina de Javascript e Ajax</title>
		<link>http://blog.klaus.pro.br/2008/ler/ultimo-dia-da-oficina-de-javascript-e-ajax/index.html</link>
		<comments>http://blog.klaus.pro.br/2008/ler/ultimo-dia-da-oficina-de-javascript-e-ajax/index.html#comments</comments>
		<pubDate>Thu, 17 Jul 2008 18:47:55 +0000</pubDate>
		<dc:creator>Klaus Paiva</dc:creator>
				<category><![CDATA[Textos]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Cursos]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[LAMP]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Senac]]></category>
		<category><![CDATA[Vida Social]]></category>

		<guid isPermaLink="false">http://blog.klaus.pro.br/?p=89</guid>
		<description><![CDATA[A oficina de Ajax que começou no dia 1 deste mês acabou hoje, dia 17. Nestes vários dias de curso/oficina deu pra abordar vários temas, desde os fundamentais para o bom entendimento da linguagem até o uso prático e produtivo do Javascript. Durante esse período mostrei desde a sintaxe base da linguagem, passando por manipulação [...]]]></description>
			<content:encoded><![CDATA[<p>A <a href="http://blog.klaus.pro.br/2008/ler/apresentacao-para-a-oficina-sobre-javascript-e-ajax/index.html">oficina de Ajax</a> que começou no dia 1 deste mês acabou hoje, dia 17. Nestes vários dias de curso/oficina deu pra abordar vários temas, desde os fundamentais para o bom entendimento da linguagem até o uso prático e produtivo do Javascript.</p>
<p>Durante esse período mostrei desde a sintaxe base da linguagem, passando por manipulação de <a href="http://www.w3.org/Style/CSS/">CSS</a> e <a href="http://developer.mozilla.org/en/docs/Category:Gecko_DOM_Reference">DOM</a>, eventos e <em>listeners</em>, até chegar no tão falado Ajax. E no último dia ainda deu tempo de apresentar a ótima biblioteca <a href="http://jquery.com/">jQuery</a> sob o tópico <strong>produtividade</strong>.</p>
<p>Ah, tirei uma foto com o pessoal que participou da oficina:</p>
<dl class="images">
<dt> <a class="thickbox" title="Na foto estão os alunos da oficina e eu, quase no centro, de camisa azul." href="http://blog.klaus.pro.br/wp-content/uploads/2008/07/oficina-de-javascript-ajax-ultimo-dia.jpg"><img src="http://blog.klaus.pro.br/wp-content/uploads/2008/07/oficina-de-javascript-ajax-ultimo-dia-thumb.jpg" alt="" /> </a></dt>
<dd>Na foto estão os alunos da oficina e eu, quase no centro, de camisa azul.</dd>
</dl>
<p>Espero que todos possam ter aprendido pelo menos algo de novo e interessante. Aproveito para agradecer a presença de todos, que se esforçaram pra acordar cedo mesmo durante as férias letivas. Bom, agora deixa eu mostrar a foto para minha mãe&#8230; =)</p>
<p>Gostei de ministrar essas oficinas, e já estou até pensando qual pode ser o tema da oficina de verão, no final do ano? <a href="http://en.wikipedia.org/wiki/LAMP_(software_bundle)">LAMP</a>? <a href="http://rubyonrails.com/">Ruby on Rails</a>? Só o tempo dirá&#8230; <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.klaus.pro.br/2008/ler/ultimo-dia-da-oficina-de-javascript-e-ajax/index.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Apresentação para a oficina sobre Javascript e Ajax</title>
		<link>http://blog.klaus.pro.br/2008/ler/apresentacao-para-a-oficina-sobre-javascript-e-ajax/index.html</link>
		<comments>http://blog.klaus.pro.br/2008/ler/apresentacao-para-a-oficina-sobre-javascript-e-ajax/index.html#comments</comments>
		<pubDate>Mon, 30 Jun 2008 13:55:23 +0000</pubDate>
		<dc:creator>Klaus Paiva</dc:creator>
				<category><![CDATA[Textos]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Apresentações]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[OpenOffice]]></category>
		<category><![CDATA[Senac]]></category>
		<category><![CDATA[Slides]]></category>

		<guid isPermaLink="false">http://blog.klaus.pro.br/?p=82</guid>
		<description><![CDATA[Conforme eu havia dito anteriormente, amanhã começa a oficina sobre Javascript e Ajax lá no Senac. Já montei a apresentação de slides com o conteúdo introdutório sobre a linguagem. Você pode ver (ou baixar) a apresentação a seguir: &#124; Ver apresentação no SlideShare A apresentação está sob a licença Creative Commons Attribution 3.0. Fiz a [...]]]></description>
			<content:encoded><![CDATA[<p>Conforme eu havia dito anteriormente, amanhã começa a <a href="http://blog.klaus.pro.br/2008/ler/oficina-de-inverno-no-senac-e-final-de-semestre/index.html">oficina sobre Javascript e Ajax lá no Senac</a>. Já montei a apresentação de <em>slides</em> com o conteúdo introdutório sobre a linguagem. Você pode ver (ou baixar) a apresentação a seguir:</p>
<div class="videos"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=apresentacaojs-1214832450942060-9" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slideshare.net/swf/ssplayer2.swf?doc=apresentacaojs-1214832450942060-9" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"><a href="http://www.slideshare.net/?src=embed"><img style="border:0px none;margin-bottom:-5px" src="http://static.slideshare.net/swf/logo_embd.png" alt="SlideShare" /></a> | <a title="Veja Introdução ao Javascript no SlideShare" href="http://www.slideshare.net/klauspaiva/introduo-ao-javascript?src=embed">Ver apresentação no SlideShare</a></div>
</div>
<p>A apresentação está sob a licença <a href="http://creativecommons.org/licenses/by/3.0/deed.pt">Creative Commons Attribution 3.0</a>.</p>
<p>Fiz a apresentação usando o Impress, do <a href="http://www.openoffice.org/">OpenOffice</a>. E enquanto eu fazia a apresentação, encontrei informações sobre como adicionar <strong>transições de slides 3D</strong> à apresentação nesse <a href="http://www.oooninja.com/2008/02/eye-candy-3d-opengl-transitions-impress.html">blog</a>. Se você usa Ubuntu é só instalar o pacote <strong>openoffice.org-ogltrans</strong>. Durante o <em>preview</em> da transição, o OpenOffice se mostrou um tanto instável mas na apresentação normal em tela cheia, tudo certo.</p>
<p>Fica aí a dica para suas apresentações e falando em apresentação, sugestões ou críticas serão bem recebidas. =)</p>
<p><strong><em>Nota</em>:</strong> Há assuntos que eu preferi não adicionar aos <em>slides</em> ou colocar explicações detalhadas, por exemplo: Ajax e eventos, respectivamente. Ambos são assuntos que eu acho mais produtivo explicar usando lousa e caneta, do que montar uma dezena de <em>slides</em> lotados de informações.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.klaus.pro.br/2008/ler/apresentacao-para-a-oficina-sobre-javascript-e-ajax/index.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Porto Alegre é Web 2.0</title>
		<link>http://blog.klaus.pro.br/2008/ler/porto-alegre-e-web2/index.html</link>
		<comments>http://blog.klaus.pro.br/2008/ler/porto-alegre-e-web2/index.html#comments</comments>
		<pubDate>Tue, 22 Apr 2008 23:33:49 +0000</pubDate>
		<dc:creator>Klaus Paiva</dc:creator>
				<category><![CDATA[Textos]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Comédia]]></category>
		<category><![CDATA[fisl9.0]]></category>
		<category><![CDATA[Porto Alegre]]></category>

		<guid isPermaLink="false">http://blog.klaus.pro.br/?p=63</guid>
		<description><![CDATA[Enquanto eu não arrumo tempo hábil pra escrever mais sobre as palestras do fisl, um texto rápido com uma foto engraçada que tirei lá em Porto Alegre. Uso de Ajax em Porto Alegre Isso que é modernidade hein!?]]></description>
			<content:encoded><![CDATA[<p>Enquanto eu não arrumo tempo hábil pra escrever mais sobre as palestras do fisl, um texto rápido com uma foto engraçada que tirei lá em Porto Alegre.</p>
<dl class="images">
<dt><a href="http://blog.klaus.pro.br/wp-content/uploads/2008/04/rs-ajax.jpg"><img src="http://blog.klaus.pro.br/wp-content/uploads/2008/04/rs-ajax-thumb.jpg" alt="" /></a></dt>
<dd>Uso de Ajax em Porto Alegre</dd>
</dl>
<p>Isso que é modernidade hein!? <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.klaus.pro.br/2008/ler/porto-alegre-e-web2/index.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Comet? Reverse Ajax? Ajax 2.0? Como assim?</title>
		<link>http://blog.klaus.pro.br/2007/ler/comet-reverse-ajax-como-assim/index.html</link>
		<comments>http://blog.klaus.pro.br/2007/ler/comet-reverse-ajax-como-assim/index.html#comments</comments>
		<pubDate>Wed, 31 Oct 2007 19:45:56 +0000</pubDate>
		<dc:creator>Klaus Paiva</dc:creator>
				<category><![CDATA[Textos]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Comet]]></category>
		<category><![CDATA[Gmail]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://wp.blog.klaus.pro.br/2007/ler/comet-reverse-ajax-como-assim/index.html</guid>
		<description><![CDATA[Hoje, um colega aqui do trabalho me indicou um post que fala sobre as otimizações de Javascript do Gmail. Porém, o que eu achei mais interessante foi seguir alguns dos links e encontrar o nome para uma técnica que eu já conhecia, mas que agora vi documentada e explicada. Trata-se do Comet ou Reverse Ajax. [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje, um colega aqui do trabalho me indicou um <em>post</em> que fala sobre as <a href="http://blogoscoped.com/archive/2007-10-31-n76.html">otimizações de Javascript</a> do <a href="http://mail.google.com/">Gmail</a>.</p>
<p>Porém, o que eu achei mais interessante foi seguir alguns dos <em>links</em> e encontrar o nome para uma técnica que eu já conhecia, mas que agora vi documentada e explicada. Trata-se do <a href="http://en.wikipedia.org/wiki/Comet_%28programming%29"><strong>Comet</strong></a> ou <strong>Reverse Ajax</strong>.</p>
<h3 class="subtitles">Um novo nome para o Ajax comum?</h3>
<p>O segundo nome, <strong>Reverse Ajax</strong>, pode facilitar o entendimento da técnica. Primeiro, vamos lembrar resumidamente como funciona um <em>Ajax</em> tradicional.</p>
<p>No <em>Ajax</em> comum, o cliente (o navegador) dispara uma requisição e o servidor responde em seguida, daí o cliente processa essa resposta e exibe da forma adequada ao usuário.</p>
<p>Um exemplo prático: imagine que no seu <em>webmail</em> favorito exista um endereço que retorna quando há mensagens novas na sua caixa de entrada.</p>
<p>Se você fizer essa requisição a cada meio segundo, seu servidor irá receber muitas requisições apenas para dizer: &#8220;hey, não tem nada de novo!&#8221;.</p>
<p>Seria interessante que o servidor pudesse responder a requisição somente quando houvesse alguma mensagem nova. É aí que o <em>Comet</em> (ou <em>Reverse Ajax</em>) entra. <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<h3 class="subtitles">Comet e o poder de resposta do servidor</h3>
<p>Tudo bem, muito bacana que o servidor possa responder quando houver algo novo mas&#8230; Como fazer implementar isso de verdade?</p>
<p>Este artigo demonstra <a href="http://www.zeitoun.net/index.php?2007/06/22/46-how-to-implement-comet-with-php">duas formas de se implementar o <strong>Comet</strong> com PHP</a>. Como PHP é uma linguagem bem conhecida, fica fácil entender os exemplos. Vou comentar aqui apenas o segundo exemplo, feito usando o objeto tradicional de <em>Ajax</em>: <em>XMLHttpRequest</em>.</p>
<p>Se você analisar o segundo exemplo, verá que a técnica basicamente consiste em manter a conexão ativa até uma resposta ser gerada (ou até um limite máximo de tempo, claro).</p>
<p>Isso pode ser feito, na maioria das linguagens, através de um método <a href="http://br2.php.net/sleep"><em>sleep</em></a> ou similar.</p>
<h3 class="subtitles">Resumindo</h3>
<p>Como você pode ver, implementar <strong>Comet</strong> não é algo novo, mas com certeza é uma técnica bastante interessante e possui aplicações valiosas. Se você já usou em algum lugar, deixe seu comentário com a sua experiência! <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<dl class="references">
<dt>Referências</dt>
<dd> <a href="http://en.wikipedia.org/wiki/Comet_%28programming%29">Comet</a> ou <strong>Reverse Ajax</strong> </dd>
<dd> <a href="http://blogoscoped.com/archive/2007-10-31-n76.html">Otimizações de Javascript no Gmail</a> </dd>
<dd> <a href="http://mail.google.com/">Gmail</a> </dd>
<dd> <a href="http://www.zeitoun.net/index.php?2007/06/22/46-how-to-implement-comet-with-php">Implementando Comet com PHP</a> </dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://blog.klaus.pro.br/2007/ler/comet-reverse-ajax-como-assim/index.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
