SlideShare uma empresa Scribd logo
1 de 32
Criando componentes
interativos em páginas AMP
com <amp-bind>
Accelerated Mobile Pages
Possibilita criar páginas que
sejam atraentes, fáceis e
carregadas quase que
instantaneamente para os
usuários.
AMP HTML
É basicamente HTML estendido com propriedades AMP personalizadas
AMP JS
Biblioteca JS que implementa todas as melhores práticas de desempenho
da AMP, gerencia o carregamento de recursos e fornece as tags
personalizada
AMP CACHE
O Google AMP Cache é uma rede de entrega de conteúdo baseada em proxy
para entregar todos os documentos válidos de AMP.
NÃO É PERMITIDO
JSCUSTOMIZADO
➔ <amp-iframe>
➔ Pull request no Github
➔ <amp-bind>
Como criar interações
complexas em páginas
AMP?
<amp-bind>
O <amp-bind> possui três
componentes principais:
➔ State
➔ Expressions
➔ Binding
State
➔ É um objeto JSON mutável
no escopo do documento.
➔ É possível especificar uma
URL CORS.
State
<amp-state id="myState">
<script type="application/json">
{ myText: "Hello AMP" }
</script>
</amp-state>
O estado do <amp-bind>
pode ser inicializado
através do componente
<amp-state>
State
<amp-state id="myState">
<script type="application/json">
{ myText: "Hello AMP" }
</script>
</amp-state>
<span [text]="myState.myText">
Hello World
</span>
Para melhor desempenho e
evitar saltos de conteúdo na
página, o amp-bind não
avalia expressões no
carregamento da página.
AMP.setState
AMP.setState mescla um
objeto no estado do
<amp-bind>.
<amp-state id="myState">
<script type="application/json">
{ "myText": "Hello AMP" }
</script>
</amp-state>
<span [text]="myState.myText">Hello World</span>
<button on="tap:AMP.setState({
myState: { myText: 'Hello Binding' }
})">SetState</button>
AMP.pushState
AMP.pushState é
semelhante a AMP.setState,
exceto que também altera o
histórico do navegador.
<amp-state id="myState">
<script type="application/json">
{ "myText": "Hello world AMP" }
</script>
</amp-state>
<!-- change browser history -->
<button on="tap:AMP.pushState({
myState: { myText: 'Browser History' }
})">SetState</button>
Expressions
Expressions
São expressões semelhantes às
do JavaScript, mas com
algumas diferenças
importantes.
Expressions
➔ Não têm acesso as globais como
document e window
➔ Variáveis undefined e array-index-out-of-
bounds retornam NULL em vez de
undefined ou throw error
// Returns [1, 2, 3]
[3, 2, 1].sort()
// Returns 6.
[1, 2, 3].reduce((x, y) => x + y)
// Object to Array
keys(event.speakers).map(x => event.speakers[x])
String
charAt charCodeAt concat
indexOf lastIndexOf slice
split substr substring
toLowerCase toUpperCase
Number
toExponential toFixed
toPrecision toString
Objects
keys value
Array
concat filter includes
indexOf join lastIndexOf
map reduce slice some sort
splice
Math
abs ceil floor max min
random round
Global
encodeURIComponent
<amp-list id="speakers"
[src]="keys(speakers).map(x => speakers[x])")>
<template type="amp-mustache">
<strong>{{name}}</strong>
<span>{{jobTitle}}</span>
</template>
</amp-list>
Expressões podem ser
reutilizadas definindo um
amp-bind-macro.
<amp-bind-macro id="circle"
arguments="r"
expression="3.14 * r * r" />
Reutilizando Expressions
<amp-bind-macro id="SpeakersBind" arguments="speakers"
expression="keys(speakers).map(x => speakers[x])" />
<amp-list id="speakers" [src]="SpeakersBind(event.speakers)")>
<template type="amp-mustache">
<strong>{{name}}</strong>
<span>{{jobTitle}}</span>
</template>
</amp-list>
Binding
Binding
São atributos [property] que
vinculam a propriedade de
um elemento a uma
expressão.
<input type="checkbox"
[checked]="selecteds._1177"
[disabled]="checkeds == 4">
https://goo.gl/wcxCR
6
<input type="checkbox" [checked]="cards && cards._1177"
[disabled]="checkeds == 4 && !current._1177"
on="change:AMP.setState({
cards: {
_1177: event.checked,
},
checkeds: (event.checked ? checkeds+1 : checkeds-1),
})">
<span [text]="cards._1177 ? 'Remover' : 'Comparar'") Comparar </span>
<button on="tap:AMP.setState({ checkeds: 0, cards: null })") Remover tudo </button>
Debbuging
Adicione esse fragmento de código
na URL para destacar avisos e erros
durante o desenvolvimento.
#development=1
AMP.printState()
https://goo.gl/wy2FJ
T
Murilo Siqueira Ferreira
FrontEnd @ Foregon
@muhroots

Mais conteúdo relacionado

Mais procurados

Apresentação JAVA 1
Apresentação JAVA 1Apresentação JAVA 1
Apresentação JAVA 1Camila Garcia
 
Introdução ao Desenvolvimento de aplicações WEB com JSP
Introdução ao Desenvolvimento de aplicações WEB com JSPIntrodução ao Desenvolvimento de aplicações WEB com JSP
Introdução ao Desenvolvimento de aplicações WEB com JSPManoel Afonso
 
Aula 02 view state - session - validações
Aula 02   view state - session - validaçõesAula 02   view state - session - validações
Aula 02 view state - session - validaçõesGabriel Bugano
 
HTML - HyperText Markup Language - 2
HTML - HyperText Markup Language - 2HTML - HyperText Markup Language - 2
HTML - HyperText Markup Language - 2Israel Messias
 
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1Thyago Maia
 

Mais procurados (6)

Apresentação JAVA 1
Apresentação JAVA 1Apresentação JAVA 1
Apresentação JAVA 1
 
Introdução ao Desenvolvimento de aplicações WEB com JSP
Introdução ao Desenvolvimento de aplicações WEB com JSPIntrodução ao Desenvolvimento de aplicações WEB com JSP
Introdução ao Desenvolvimento de aplicações WEB com JSP
 
Aula 02 view state - session - validações
Aula 02   view state - session - validaçõesAula 02   view state - session - validações
Aula 02 view state - session - validações
 
HTML - HyperText Markup Language - 2
HTML - HyperText Markup Language - 2HTML - HyperText Markup Language - 2
HTML - HyperText Markup Language - 2
 
Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3
 
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
 

Semelhante a Criando interações complexas em páginas AMP com amp-bind

TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.Rogério Napoleão Jr.
 
Navegadores por de baixo dos panos - Ana Luiza Bastos
Navegadores por de baixo dos panos - Ana Luiza BastosNavegadores por de baixo dos panos - Ana Luiza Bastos
Navegadores por de baixo dos panos - Ana Luiza BastosiMasters
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebElenilson Vieira
 
Introdução de web
Introdução de webIntrodução de web
Introdução de webSedu
 
Prototype Framework Javascript
Prototype Framework JavascriptPrototype Framework Javascript
Prototype Framework JavascriptMarcio Romu
 
Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Marcelo Rodrigues
 
JavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersJavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersHarlley Oliveira
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlDiego Tremper
 
Asp tutorial asp
Asp   tutorial aspAsp   tutorial asp
Asp tutorial asprobinhoct
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupWagner Roberto dos Santos
 
Trabalho jQuery
Trabalho jQueryTrabalho jQuery
Trabalho jQuerygrupoucpel
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlManuel Lemos
 
Integracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControlIntegracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControlDiego Tremper
 

Semelhante a Criando interações complexas em páginas AMP com amp-bind (20)

PHP FrameWARks - FISL
PHP FrameWARks - FISLPHP FrameWARks - FISL
PHP FrameWARks - FISL
 
Web Performance Client Side
Web Performance Client SideWeb Performance Client Side
Web Performance Client Side
 
TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.
 
Navegadores por de baixo dos panos - Ana Luiza Bastos
Navegadores por de baixo dos panos - Ana Luiza BastosNavegadores por de baixo dos panos - Ana Luiza Bastos
Navegadores por de baixo dos panos - Ana Luiza Bastos
 
Angular js
Angular jsAngular js
Angular js
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias Web
 
Programação asp
Programação aspProgramação asp
Programação asp
 
ASP.NET AJAX
ASP.NET AJAXASP.NET AJAX
ASP.NET AJAX
 
Introdução de web
Introdução de webIntrodução de web
Introdução de web
 
Java e Cloud Computing
Java e Cloud ComputingJava e Cloud Computing
Java e Cloud Computing
 
Prototype Framework Javascript
Prototype Framework JavascriptPrototype Framework Javascript
Prototype Framework Javascript
 
Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5
 
JavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersJavaScript e JQuery para Webdesigners
JavaScript e JQuery para Webdesigners
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
 
Asp tutorial asp
Asp   tutorial aspAsp   tutorial asp
Asp tutorial asp
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações Mashup
 
Trabalho jQuery
Trabalho jQueryTrabalho jQuery
Trabalho jQuery
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
 
Integracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControlIntegracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControl
 

Criando interações complexas em páginas AMP com amp-bind

Notas do Editor

  1. “AMP Conf 2017” AMP Bind é basicamente React + Angular - 90% da complexidade
  2. Async, sandbox
  3. Async, sandbox
  4. Async, sandbox
  5. Uma macro não pode ser chamada recursivamente.
  6. Utilizando amp-bind-macro para converter uma lista de objetos em um array de objetos e integrando com amp-list
  7. Quando o estado muda, as expressões são reavaliadas e as propriedades dos elementos ligados são atualizadas com os novos resultados da expressão.
  8. https://github.com/ampproject/amphtml/blob/master/contributing/building-an-amp-extension.md#a-word-on-contributing
  9. https://www.ampstart.com/