• Non ci sono risultati.

UNIVERSITÀ DEGLI STUDI DI MODENA E REGGIO EMILIA Dipartimento di Scienze Fisiche, Informatiche e Matematiche Corso di Laurea in Informatica

N/A
N/A
Protected

Academic year: 2021

Condividi "UNIVERSITÀ DEGLI STUDI DI MODENA E REGGIO EMILIA Dipartimento di Scienze Fisiche, Informatiche e Matematiche Corso di Laurea in Informatica"

Copied!
40
0
0

Testo completo

(1)

UNIVERSITÀ DEGLI STUDI DI MODENA E REGGIO EMILIA

Dipartimento di Scienze Fisiche, Informatiche e Matematiche

Corso di Laurea in Informatica

Relatore: Riccardo Martoglia Candidato: Francesco Nicoli

Anno Accademico 2015/2016

UNIVERSITÀ DEGLI STUDI DI MODENA E REGGIO EMILIA

Dipartimento di Scienze Fisiche, Informatiche e Matematiche

Corso di Laurea in Informatica

Relatore: Riccardo Martoglia Candidato: Francesco Nicoli

Anno Accademico 2015/2016

Progetto e Sviluppo dell’item gallery di mobile.yoox.com, con tecnologia AngularJS

Progetto e Sviluppo dell’item gallery di mobile.yoox.com, con

tecnologia AngularJS

(2)

Introduzione Introduzione

 Il sito web

mobile.yoox.com

 Attività di tirocinio:

re-ingegnerizzazione di mobile.yoox.com tramite web-page rendering a livello di client

 Il sito web

mobile.yoox.com

 Attività di tirocinio:

re-ingegnerizzazione di mobile.yoox.com tramite web-page rendering a livello di client

(3)

Problematiche affrontate e obiettivi Problematiche affrontate e obiettivi

Problematiche affrontate Problematiche affrontate

 Ciclo di vita di una richiesta web per mobile.yoox.com

 Infinite Scrolling & Lazy Loading

 Memorizzazione dello stato di

navigazione: funzionalità ‘segnalibro’ e bottone ‘indietro’ del browser

 Implementazione della soluzione client- side

 Analisi delle performance

 Ciclo di vita di una richiesta web per mobile.yoox.com

 Infinite Scrolling & Lazy Loading

 Memorizzazione dello stato di

navigazione: funzionalità ‘segnalibro’ e bottone ‘indietro’ del browser

 Implementazione della soluzione client- side

 Analisi delle performance

Obiettivi Obiettivi

 Migliorare la velocità di navigazione dell’item gallery

 Migliorare la velocità di navigazione dell’item gallery

(4)

Problematiche affrontate Problematiche affrontate

Ciclo di vita di una richiesta web per mobile.yoox.com

 Infinite Scrolling & Lazy Loading

 Memorizzazione dello stato di navigazione: funzionalità ‘segnalibro’ e bottone ‘indietro’ del browser

Ciclo di vita di una richiesta web per mobile.yoox.com

 Infinite Scrolling & Lazy Loading

 Memorizzazione dello stato di navigazione: funzionalità ‘segnalibro’ e

bottone ‘indietro’ del browser

(5)

Ciclo di vita di una richiesta web per

mobile.yoox.com (soluzione server-side) Ciclo di vita di una richiesta web per

mobile.yoox.com (soluzione server-side)

(6)

Ciclo di vita di una richiesta web per

mobile.yoox.com (soluzione client-side) Ciclo di vita di una richiesta web per

mobile.yoox.com (soluzione client-side)

(7)

Ciclo di vita di una richiesta web per

mobile.yoox.com (soluzione client-side) (2) Ciclo di vita di una richiesta web per

mobile.yoox.com (soluzione client-side) (2)

Il file JSON utilizzato nella soluzione server-side contiene molti dati riservati alla SEO, di nessun valore per il web-page rendering, per questo sono stati eliminati

un peso minore del file JSON che viene inviato al client

Il file JSON utilizzato nella soluzione server-side contiene molti dati riservati alla SEO, di nessun valore per il web-page rendering, per questo sono stati eliminati

un peso minore del file JSON che viene inviato al client

(8)

Problematiche affrontate Problematiche affrontate

 Ciclo di vita di una richiesta web per mobile.yoox.com

Infinite Scrolling & Lazy Loading

 Memorizzazione dello stato di navigazione: funzionalità ‘segnalibro’ e bottone ‘indietro’ del browser

 Ciclo di vita di una richiesta web per mobile.yoox.com

Infinite Scrolling & Lazy Loading

 Memorizzazione dello stato di navigazione: funzionalità ‘segnalibro’ e

bottone ‘indietro’ del browser

(9)

Infinite

Scrolling &

Lazy Loading Infinite

Scrolling &

Lazy Loading

o La navigazione dell’item gallery avviene per

scrolling verso il basso o 20 nuovi oggetti vengono

caricati quando si

raggiunge la fine della pagina

o La navigazione dell’item gallery avviene per

scrolling verso il basso o 20 nuovi oggetti vengono

caricati quando si

raggiunge la fine della pagina

(10)

Infinite Scrolling & Lazy Loading (2) Infinite Scrolling & Lazy Loading (2)

CDN

oggetti richiest

a

oggetti

(11)

Infinite Scrolling

& Lazy loading (3): pre-

caricamento

Infinite Scrolling

& Lazy loading (3): pre-

caricamento

Micro-attesa di caricamento per la pagina successiva

Pre-caricamento del file JSON per la pagina

successiva

Micro-attesa di caricamento per la pagina successiva

Pre-caricamento del file JSON per la pagina

successiva

(12)

Infinite Scrolling & Lazy loading (3):

pre-caricamento (2)

Infinite Scrolling & Lazy loading (3):

pre-caricamento (2)

CDN

oggetti di

PAGE=X richiesta

oggetti per

PAGE=X

l’utente si trova su PAGE=X, richiesta per JSON di PAGE=X

(13)

Infinite Scrolling & Lazy loading (3):

pre-caricamento (3)

Infinite Scrolling & Lazy loading (3):

pre-caricamento (3)

CDN

clien t

richiesta oggetti per

PAGE=X+

1

Una

chiamata AJAX

Una fase di attesa

l’utente si trova su PAGE=X, richiesta per JSON di PAGE=X+1

(14)

Infinite Scrolling & Lazy loading (3):

pre-caricamento (4)

Infinite Scrolling & Lazy loading (3):

pre-caricamento (4)

CDN

clien

richiesta oggetti per

PAGE=X+

l’utente si trova su PAGE=X+1, richiesta per JSON di PAGE=X+2

oggetti di PAGE=X +1

(15)

Problematiche affrontate Problematiche affrontate

 Ciclo di vita di una richiesta web per mobile.yoox.com

 Infinite Scrolling & Lazy Loading

Memorizzazione dello stato di navigazione: funzionalità ‘segnalibro’ e bottone ‘indietro’ del browser

 Implementazione della soluzione client-side

 Analisi delle performance

 Ciclo di vita di una richiesta web per mobile.yoox.com

 Infinite Scrolling & Lazy Loading

Memorizzazione dello stato di navigazione: funzionalità ‘segnalibro’ e bottone ‘indietro’ del browser

 Implementazione della soluzione client-side

 Analisi delle performance

(16)

Memorizzazione dello stato di navigazione:

funzionalità ‘segnalibro’ del browser

Memorizzazione dello stato di navigazione:

funzionalità ‘segnalibro’ del browser

Pagina 1 della navigazione

Pagina 10 della navigazione

http://mobile.yoox.com/it/uom o/shoponline/camicie_mc

(17)

Memorizzazione dello stato di navigazione:

funzionalità ‘segnalibro’ del browser

Memorizzazione dello stato di navigazione:

funzionalità ‘segnalibro’ del browser

http://mobile.yoox.com/it/uomo/shoponline/camicie _mc

Pagina 1 della navigazione

Pagina 10 della navigazione

http://mobile.yoox.com/it/uomo/shoponline/camicie_mc#/pag e=10

http://mobile.yoox.com/it/uom o/shoponline/camicie_mc

#/page=10

Pagina 10 della navigazione

Si imposta un parametro

#/page=numpa ge unico per ogni pagina

(18)

Memorizzazione dello stato di navigazione (2): funzionalità bottone ‘indietro’ del

browser

Memorizzazione dello stato di navigazione (2): funzionalità bottone ‘indietro’ del

browser

Pagina 1 della navigazione

(19)

Memorizzazione dello stato di navigazione (2): funzionalità bottone ‘indietro’ del

browser

Memorizzazione dello stato di navigazione (2): funzionalità bottone ‘indietro’ del

browser

Pagina 10 della navigazione

http://mobile.yoox.com/it/uomo/shoponline/camicie_mc

Pagina precedente nella cronologia degli URL visitati: Google

https://www.google.it/

(20)

Memorizzazione dello stato di navigazione (3):

funzionalità ‘segnalibro’ e bottone ‘indietro’ del browser

Memorizzazione dello stato di navigazione (3):

funzionalità ‘segnalibro’ e bottone ‘indietro’ del

browser

(21)

Problematiche affrontate Problematiche affrontate

 Ciclo di vita di una richiesta web per mobile.yoox.com

 Infinite Scrolling & Lazy Loading

 Memorizzazione dello stato di navigazione: funzionalità ‘segnalibro’ e bottone ‘indietro’ del browser

Implementazione della soluzione client-side

 Analisi delle performance

 Ciclo di vita di una richiesta web per mobile.yoox.com

 Infinite Scrolling & Lazy Loading

 Memorizzazione dello stato di navigazione: funzionalità ‘segnalibro’ e bottone ‘indietro’ del browser

Implementazione della soluzione client-side

 Analisi delle performance

(22)

Il template Razor

Il template Razor

(23)

Il template AngularJS Il template AngularJS

o La home di

mobile.yoox.com è

sempre servita dalla CDN o Template Razor +

Template AngularJS o La home di

mobile.yoox.com è

sempre servita dalla CDN o Template Razor +

Template AngularJS

(24)

Problematiche affrontate Problematiche affrontate

 Ciclo di vita di una richiesta web per mobile.yoox.com

 Infinite Scrolling & Lazy Loading

 Memorizzazione dello stato di navigazione: funzionalità ‘segnalibro’ e bottone ‘indietro’ del browser

 Ciclo di vita di una richiesta web per mobile.yoox.com

 Infinite Scrolling & Lazy Loading

 Memorizzazione dello stato di navigazione: funzionalità ‘segnalibro’ e

bottone ‘indietro’ del browser

(25)

Analisi delle performance: ambiente locale Analisi delle performance: ambiente locale

 Performance:

KB di dati in download e tempi di risposta

 Pannello

‘Strumenti per sviluppatori’

di Chrome

 Pulizia della cache prima dei test server-side

e client-side

 Performance:

KB di dati in download e tempi di risposta

 Pannello

‘Strumenti per sviluppatori’

di Chrome

 Pulizia della cache prima dei test server-side

e client-side

(26)

Analisi delle performance (2):

server-side Vs client-side

Analisi delle performance (2):

server-side Vs client-side

Server-side Server-side

 20 pagine web caricate tramite Infinite Scrolling: nessun uso di cache, CDN e compressione dati

 20 pagine web caricate tramite Infinite Scrolling: nessun uso di cache, CDN e compressione dati

Client-side Client-side

 Le stesse 20 pagine web caricate

tramite Infinite Scrolling: nessun uso di cache, CDN e compressione dati

 Le stesse 20 pagine web caricate

tramite Infinite Scrolling: nessun uso di cache, CDN e compressione dati

(27)

Conclusioni e prossimi sviluppi Conclusioni e prossimi sviluppi

Conclusioni Conclusioni

 L’obiettivo di migliorare le performance della soluzione client-side è stato

raggiunto in ambiente locale (–0,4s di caricamento per pagina)

 La soluzione server-side online serve pagine web di peso pari a 3KB; i tempi di risposta variano da 400ms a 700ms

 L’obiettivo di migliorare le performance della soluzione client-side è stato

raggiunto in ambiente locale (–0,4s di caricamento per pagina)

 La soluzione server-side online serve pagine web di peso pari a 3KB; i tempi di risposta variano da 400ms a 700ms

Prossimi sviluppi Prossimi sviluppi

 Testing

 AngularJS 2

 Sviluppo navigazione offline

 Testing

 AngularJS 2

 Sviluppo navigazione offline

(28)

GRAZIE PER

L’ATTENZIONE

(29)

Analisi delle performance: WebPagetest Analisi delle performance: WebPagetest

o Inaffidabile:

tempi di risposta fino a 25

secondi

o La cache del device remoto non viene pulita o Impossibile

testare SPA

(30)

SEO e rendering client-side di pagine web SEO e rendering client-side di pagine web

1. Il crawler dei motori di ricerca vede solo il template

2. Il crawler non può indicizzare le pagine

3. Schema di AJAX crawling: server-side rendering per il crawler, client-side

1. Il crawler dei motori di ricerca vede solo il template

2. Il crawler non può indicizzare le pagine

3. Schema di AJAX crawling: server-side rendering per il crawler, client-side

(31)

I filtri di ricerca

I filtri di

ricerca

(32)

Miglioramenti (2):

espressioni AngularJS

Miglioramenti (2):

espressioni AngularJS

o ng-bind invece di {{ }}

o One-time binding (simbolo ::)

o ng-bind invece di {{ }}

o One-time binding (simbolo ::)

7 (bindings) x 20 (oggetti per pagina) = 140

(33)

Conclusioni: giudizio sul framework AngularJS

Conclusioni: giudizio sul framework AngularJS

 Il framework con la curva di apprendimento più ripida

 Documentazione scritta male

 Two-way data binding attivo di default e quasi mai utilizzato

 AngularJS 2 non retro-compatibile

 Popolarità tra le ricerche Google mal motivata

 Il framework con la curva di apprendimento più ripida

 Documentazione scritta male

 Two-way data binding attivo di default e quasi mai utilizzato

 AngularJS 2 non retro-compatibile

 Popolarità tra le ricerche Google mal motivata

(34)

Perché web page rendering client-side Perché web page rendering client-side

Server-side Server-side

 Il contenuto di una pagina web è visibile ai motori di ricerca

 Nessuna ‘pagina bianca’ nell’attesa che il contenuto venga renderizzato

 Non esistono problemi di compatibilità con i browser (vendor e versioni)

 Un server ha capacità computazionale

 Il contenuto di una pagina web è visibile ai motori di ricerca

 Nessuna ‘pagina bianca’ nell’attesa che il contenuto venga renderizzato

 Non esistono problemi di compatibilità con i browser (vendor e versioni)

 Un server ha capacità computazionale

Client-side Client-side

 I server inviano solo i dati e sono più veloci a completare le richieste web dei client

 La pagina può essere divisa in viste che vengono modificate ‘on the fly’ dalla logica JS

 Particolarmente utile per UI dove l’interazione con l’utente modifica

 I server inviano solo i dati e sono più veloci a completare le richieste web dei client

 La pagina può essere divisa in viste che vengono modificate ‘on the fly’ dalla logica JS

 Particolarmente utile per UI dove l’interazione con l’utente modifica

(35)

Il design pattern MVC Il design pattern MVC

 View: HTML + template + CSS + JS + dati

 Model: gestisce i dati e la business logic

 Controller: prende in gestione le richieste provenienti dalla View e le inoltra al Model

View: HTML + template + CSS + JS + dati

Model: gestisce i dati e la business logic

Controller: prende in gestione le richieste provenienti dalla View e le inoltra al Model

(36)

URL & Navigazione URL & Navigazione

Window.onhashchan ge

Server-side Client-side

URL rewriting URL rewriting

(37)

AngularJS, Backbone, Ember AngularJS, Backbone, Ember

AngularJS AngularJS

 Community

 Two-way data binding

 Dirty checking

 Supportato da Google

 Validazione dei form

 Filtri

 Community

 Two-way data binding

 Dirty checking

 Supportato da Google

 Validazione dei form

 Filtri

Ember Ember

 Data layer integrato

 Tempi di

configurazione minimi

 ‘Run Loop’ più

efficiente del Digest Cycle di AngularJS

 Data layer integrato

 Tempi di

configurazione minimi

 ‘Run Loop’ più

efficiente del Digest Cycle di AngularJS

 Dimensioni in KB

 Curva di apprendimento lineare

 Buona documentazione

 Libertà di scelta di

componenti di terze parti

 Performance

Dimensioni in KB

Curva di apprendimento lineare

Buona documentazione

Libertà di scelta di

componenti di terze parti

Performance

Backbone

Backbone

(38)

I vantaggi di un framework JavaScript (client-side)

I vantaggi di un framework JavaScript (client-side)

 Client-side web page rendering

 Codice riusabile, mantenibile, strutturato, testabile

 Modularità e Lazy Loading

 SPA

 Design pattern MVC

 Client-side web page rendering

 Codice riusabile, mantenibile, strutturato, testabile

 Modularità e Lazy Loading

 SPA

 Design pattern MVC

(39)

Il template AngularJS e le Direttive

Il template AngularJS e le Direttive

(40)

Tecnologie per la soluzione server-side Tecnologie per la soluzione server-side

 RESTful Web Service

 JSON

 Razor

 CDN

 RESTful Web Service

 JSON

 Razor

 CDN

Riferimenti

Documenti correlati

I dati da passare alla primitiva sono: un intero a 16 bit che identifica l’indirizzo del nodo destinatario, un intero a 32 bit che indica il valore temporale al quale il

In media, ogni minuto, le telecamere presenti in Smart Model Area producono 250.000 record.. CASO DI

Nello specifico, la prima parte della tesi è dedicata all’analisi dello sviluppo economico cinese dalla nascita della RPC, nel 1949, fino ad oggi, alla descrizione delle

UNIVERSITÀ DEGLI STUDI DI MODENA E REGGIO EMILIA.. Dipartimento di Scienze Fisiche, Informatiche

Sviluppo di sensori amperometrici a base di polifenoli di origine naturale - in collaborazione

Our data were collected among a group of resettled ethnic Czechs from Ukraine who in 1991–1993 became the subject of state-controlled relocation to the Czech Republic as

In relazione a questo obiettivo individua sette punti principali: le disugua- glianze nell’accesso alla salute sia all’interno delle società occidentali che tra il Nord e il Sud

By examining the very applicability of queer (as term and method- ology) within the South African context, and paying particular attention to its relationship to voice, this