Debugging di applicazioni web Backbone con Backbone Debugger

31
HTML5 Frontend Development Debugging di applicazioni web Backbone con Backbone Debugger

description

Slides of the talk Manuel Dell'Elce gave at the HTML5 Frontend Development @L'Aquila (Italy). 13th November 2013. Speaker: Manuel Dell'Elce Abstract: L'utilizzo di Backbone.js per lo sviluppo di applicazioni web aumenta sempre più ad ogni livello, ma chiunque l'abbia usato almeno una volta sa quanto può essere frustrante e time-consuming risolvere bug tramite il classico metodo log & breakpoint. Nel talk viene introdotto un approccio alternativo al problema, presentando l'estensione Chrome "Backbone Debugger" per un debugging a livello di applicazione.

Transcript of Debugging di applicazioni web Backbone con Backbone Debugger

Page 1: Debugging di applicazioni web Backbone con Backbone Debugger

HTML5 Frontend Development

Debugging di applicazioni web Backbone con Backbone Debugger

Page 2: Debugging di applicazioni web Backbone con Backbone Debugger

Manuel Dell’Elce

@Maluen0

https://github.com/Maluen/

Page 3: Debugging di applicazioni web Backbone con Backbone Debugger

INTRODUZIONE

Backbone Debugger

Page 4: Debugging di applicazioni web Backbone con Backbone Debugger

Perchè il web è così popolare?

Page 5: Debugging di applicazioni web Backbone con Backbone Debugger

Scambio di informazioni multimediali Comunicazione e collaborazione

Page 6: Debugging di applicazioni web Backbone con Backbone Debugger

Scambio di informazioni multimediali

Accesso alle informazioni

Page 7: Debugging di applicazioni web Backbone con Backbone Debugger

Scambio di informazioni multimediali

Testo

Page 8: Debugging di applicazioni web Backbone con Backbone Debugger

Scambio di informazioni multimediali

Immagini

Page 9: Debugging di applicazioni web Backbone con Backbone Debugger

Scambio di informazioni multimediali

Audio

Page 10: Debugging di applicazioni web Backbone con Backbone Debugger

Scambio di informazioni multimediali

Video

Page 11: Debugging di applicazioni web Backbone con Backbone Debugger

Dove porta tutto ciò?

Page 12: Debugging di applicazioni web Backbone con Backbone Debugger

Le applicazioni web HTML5

Page 13: Debugging di applicazioni web Backbone con Backbone Debugger

Framework e librerie

VS

Framework

+ Svluppo out of the box

- Learning curve maggiore

- Flessibilità

Librerie

+ Flessibilità

+ Learning curve minore

- Molte decisioni da

prendere

- Sviluppo di funzionalità

«base>

Page 14: Debugging di applicazioni web Backbone con Backbone Debugger

14

Backbone App

Views Models Collections Routers

URL Change

Usato a livello di produzione da attori quali

DOM Magagement

Page 15: Debugging di applicazioni web Backbone con Backbone Debugger

Problema

I debugger dei browser sono orientati a livello del

codice eseguito e non dell’applicazione Backbone

rappresentata:

15

Page 16: Debugging di applicazioni web Backbone con Backbone Debugger

Una possibile soluzione:

«Backbone Debugger»

16

Page 17: Debugging di applicazioni web Backbone con Backbone Debugger

Installazione e codice sorgente

• Codice sorgente e sviluppo (GitHub):

http://bit.ly/1ePQ1DV

http://www.github.com/Maluen/Backbone-Debugger/

• Installazione (Chrome Web Store):

Page 18: Debugging di applicazioni web Backbone con Backbone Debugger

DEMO!

Backbone Debugger

Page 19: Debugging di applicazioni web Backbone con Backbone Debugger

REALIZZAZIONE

Backbone Debugger

Page 20: Debugging di applicazioni web Backbone con Backbone Debugger

L’estensione Chrome

Page 21: Debugging di applicazioni web Backbone con Backbone Debugger

Pagina ispezionata

App: l’applicazione Backbone eseguita.

Backbone Agent: raccoglie informazioni sull’App.

Javascript window object: il contesto globale utilizzato da entrambi.

Page 22: Debugging di applicazioni web Backbone con Backbone Debugger

Backbone Agent

Page 23: Debugging di applicazioni web Backbone con Backbone Debugger

DevTools

// custom panel

chrome.devtools.panels.create("Backbone Debugger", "img/panel.png",

"panel.html");

// custom sidebar pane in the elements panel

chrome.devtools.panels.elements.createSidebarPane("Backbone Debugger",

function(sidebar) {

chrome.devtools.panels.elements.onSelectionChanged.addListener(function() {

sidebar.setHeight("35px");

sidebar.setPage("elementsSidebar.html");

});

});

Page 24: Debugging di applicazioni web Backbone con Backbone Debugger

Pannello dei DevTools

Page 25: Debugging di applicazioni web Backbone con Backbone Debugger

Pannello dei DevTools (2)

Page 26: Debugging di applicazioni web Backbone con Backbone Debugger

Elements sidebar Eseguito ogni volta che si seleziona un elemento html

Page 27: Debugging di applicazioni web Backbone con Backbone Debugger

Content Script

// Receives messages from the inspected page and redirects

// them to the background, building up the first step towards

// the communication between the backbone agent and the panel.

window.addEventListener("message", function(event) { // We only accept messages from ourselves if (event.source != window) return;

var message = event.data; chrome.extension.sendMessage(message); }, false);

// Sends a message to the background when the DOM of the

// inspected page is ready (typically used by the panel

// to check if the backbone agent is on the page).

window.addEventListener('DOMContentLoaded', function() { chrome.extension.sendMessage({ target: 'page', name: 'ready' }); }, false);

Page 28: Debugging di applicazioni web Backbone con Backbone Debugger

Background

// Hash <panel tab id, panel commmunication port>

var panelPorts = {};

// Panel registration

chrome.extension.onConnect.addListener(function(port) {

if (port.name !== "devtoolspanel") return;

port.onMessage.addListener(function(message) {

if (message.name == "identification") {

var tabId = message.data;

panelPorts[tabId] = port;

}

});

});

// Receives messages from the content scripts and

// redirects them to the respective panels, completing

// the communication between the backbone agent and the panel.

chrome.extension.onMessage.addListener(function(message, sender, sendResponse) {

if (sender.tab) {

var port = panelPorts[sender.tab.id];

if (port) {

port.postMessage(message);

}

}

});

Registra le porte di comunicazione aperte dai pannelli, ridirezionando su di essa i messaggi ricevuti dai Content Script:

Page 29: Debugging di applicazioni web Backbone con Backbone Debugger

Background (2)

chrome.tabs.onUpdated.addListener(function(updatedTabId, changeInfo) {

if (changeInfo.status == "loading") {

var port = panelPorts[updatedTabId];

if (port) {

port.postMessage({

target: 'page',

name: 'updated'

});

}

}

});

Utilizza le porte di comunicazione registrate per avvisare i pannelli degli aggiornamenti delle rispettive pagine ispezionate:

Page 30: Debugging di applicazioni web Backbone con Backbone Debugger

30

Architettura

Page 31: Debugging di applicazioni web Backbone con Backbone Debugger

Sviluppi futuri

• Modalità alternative di visualizzazione

• Una nuova scheda con tutte le azioni dell’applicazione

• Filtrare e raggruppare i risultati visualizzati

• Personalizzazione dell’interfaccia tramite file di

configurazione globali o specifici per la singola applicazione

Oppure... Github -> New issue!