SlideShare uma empresa Scribd logo
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 1
Camila 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 JSP
Manoel 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ções
Gabriel Bugano
 
HTML - HyperText Markup Language - 2
HTML - HyperText Markup Language - 2HTML - HyperText Markup Language - 2
HTML - HyperText Markup Language - 2
Israel Messias
 
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
Régis Eduardo Weizenmann Gregol
 
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
Thyago 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 componentes interativos em páginas AMP com amp-bind

PHP FrameWARks - FISL
PHP FrameWARks - FISLPHP FrameWARks - FISL
PHP FrameWARks - FISL
Marcio Albuquerque
 
Web Performance Client Side
Web Performance Client SideWeb Performance Client Side
Web Performance Client Side
Levy Carneiro 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.
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 Bastos
iMasters
 
Angular js
Angular jsAngular js
Angular js
Bruno Catão
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias Web
Elenilson Vieira
 
Programação asp
Programação aspProgramação asp
ASP.NET AJAX
ASP.NET AJAXASP.NET AJAX
ASP.NET AJAX
Nelson Correia
 
Introdução de web
Introdução de webIntrodução de web
Introdução de web
Sedu
 
Java e Cloud Computing
Java e Cloud ComputingJava e Cloud Computing
Java e Cloud Computing
Mario Jorge Pereira
 
Prototype Framework Javascript
Prototype Framework JavascriptPrototype Framework Javascript
Prototype Framework Javascript
Marcio Romu
 
Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5
Marcelo Rodrigues
 
JavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersJavaScript e JQuery para Webdesigners
JavaScript e JQuery para Webdesigners
Harlley 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 phpUnderControl
Diego Tremper
 
Asp tutorial asp
Asp   tutorial aspAsp   tutorial asp
Asp tutorial asp
robinhoct
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
Claudio Miranda
 
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
Wagner Roberto dos Santos
 
Trabalho jQuery
Trabalho jQueryTrabalho jQuery
Trabalho jQuery
grupoucpel
 
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
Diego Tremper
 
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
Manuel Lemos
 

Semelhante a Criando componentes interativos 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
 
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
 
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
 

Último

Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
Danilo Pinotti
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Gabriel de Mattos Faustino
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Faga1939
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 

Último (8)

Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 

Criando componentes interativos 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/