Conf
JavaScript para Adultos
Guilherme Blanco
JavaScript para Adultos
Guilherme Blanco
Photo by Ray ThomasPhoto by Ray Thomas
Conf
Guilherme Blanco
● Desenvolvedor 10+ anos
● Evangelista OpenSource
● Contribui para...
● Doctrine
● Symfony
● Zend Framework
● PHP
@guilhermeblanco
http://github.com/guilhermeblanco
O que é um navegador web?
Tudo é uma questão de percepção entre
Performance & Accessibilidade
Sem técnica
Graceful Degradation (1994)
Progressive Enhancement (2003)
Renderização no navegador
HTMLHTML
CSSCSS
Inline CSSInline CSS
Inline JSInline JS
Done!Done!
Bloqueia Renderização
Bloqueia Renderização e Downloads
Poucas requisições HTTP
CSS Sprites
Image maps
Combinando JavaScript e CSS
Combinando JS e CSS
● Separação de scripts eficiente
Doloto – Microsoft Research
http://research.microsoft.com/en-us/projects/doloto/
JSLint / Google Closure compiler
Técnicas de carga sob demanda
● XHR eval
● XHR injection
● Script ou IFRAME
● Script DOM element
● Script defer
CSS no topo
Flash Of Unstyled Content (FOUC)
JavaScript na base (bottom)
JavaScript na base
● Tolerância à falha
● CNAME para download paralelo
● Minificar JavaScript
Gzip componentes
Gzip componentes
● HTML, CSS e JavaScript
● Request
● Response
Accept­Encoding: gzip, deflate
Content­Encoding: gzip
Vary: Accept­Encoding,User­Agent
Gzip componentes
● mod_deflate
AddOutputFilterByType DEFLATE 
    text/html text/css 
    application/x­javascript
Chunked responses
Chunked responses
● Mecanismo do HTTP/1.1
● Divide dados de resposta e transmitindo cada chunk
com seu tamanho
● Melhor usado quando a estrutura do site está em
sincronia com esta estratégia
ChunkView
http://tools.w3clubs.com/chunkview/chunkview.php
<html>
<head>
[...]
</head>
<body>
<div id="header">
[...]
</div>
<div id="content">
[...]
</div>
<div id="footer">
[...]
</div>
</body>
</html>
1
2
4
3
HTML Semântico
Acessibilidade
SEO
Tolerância à falha
<a href="#" class="follow" onclick="follow(...);">
Follow
</a>
<form class="follow" action="/user/follow" method="post">
    <input type="submit" />
</form>
[...]
<script type="text/javascript">
    yahoo.util.setFormAjax($(".follow"));
</script>
JavaScript OO
yahoo.util = function () {
var __construct,
setFormAjax,
setLinkAjax;
__construct = function (context) {
// Não faz nada
};
setFormAjax = function ($form) {
// Implementação aqui
};
setLinkAjax = function ($link) {
// Implementação aqui
};
return (function () {
var self = {
setFormAjax: setFormAjax,
setLinkAjax: setLinkAjax
};
__construct(self);
return self;
})();
};
Template Binding
Template Binding
● HTML direto no JS
● Manipulação de DOM no JS
● Clonar um elemento template
Jquery Template
http://api.jquery.com/jQuery.template/
Template Binding
<script id="summaryTpl" type="text/x­jquery­tmpl">
    <li>${Name}</li>
</script>
function renderList() {
// Template será compilado somente uma vez.
$( "#summaryTpl" )
.tmpl( movies )
.appendTo( "#moviesList" );
}
Perguntas?

Javascript para adultos