De escritorio a Javascript, nuestra experiencia desde las trincheras

45
De escritorio a Javascript Nuestra experiencia desde las trincheras Roberto Luis Bisbé - @rlbisbe Software Engineer @VS_Anywhere http://vsanywhere.com

description

En VS Anywhere desarrollamos aplicaciones de escritorio, pero a finales del pasado año comenzamos a desarrollar un cliente web para nuestra herramienta colaborativa, y nos dimos cuenta que escribir código para la web es muy distinto al escritorio "tradicional". En esta charla, desde el punto de vista de un desarrollador de escritorio, veremos los retos que hemos tenido que afrontar, desde conseguir que el cliente sea lo más ligero posible o comprobar que todas las peticiones llegan al servidor en el orden correcto hasta diseñar una página para que se comporte como un IDE La idea es comentar nuestra primera “experiencia javascript”, haciendo también un pequeño repaso a la arquitectura, los frameworks y liberías externas que hemos usado

Transcript of De escritorio a Javascript, nuestra experiencia desde las trincheras

Page 1: De escritorio a Javascript, nuestra experiencia desde las trincheras

De escritorio a JavascriptNuestra experiencia desde las

trincherasRoberto Luis Bisbé - @rlbisbe

Software Engineer @VS_Anywhere

http://vsanywhere.com

Page 2: De escritorio a Javascript, nuestra experiencia desde las trincheras

Acerca de

• Ingeniero de Software en VS Anywhere

• Ingeniero en Informática por la UAM

• Desarrollador .NET

• Tengo un blog! rlbisbe.net

Page 3: De escritorio a Javascript, nuestra experiencia desde las trincheras

Objetivo

Page 4: De escritorio a Javascript, nuestra experiencia desde las trincheras

Objetivo

“Convertir una aplicación de escritorio

en una aplicación web”

Page 5: De escritorio a Javascript, nuestra experiencia desde las trincheras

Un poco de contexto: VS Anywhere

• Extensión de Visual Studio para edición concurrente

• Basada en Windows

• Desarrollada 100% en C# (Cliente y servidor)

• Protocolo XMPP de mensajería

Page 6: De escritorio a Javascript, nuestra experiencia desde las trincheras

DemoVeamos de qué estamos hablando

Page 7: De escritorio a Javascript, nuestra experiencia desde las trincheras

Arquitectura

Visual Studio

Editor

Cliente VS Anywhere

Server (Publico / Privado)

…SolutionExplorer

Visual Studio

Editor

Cliente VS Anywhere

SolutionExplorer

Visual Studio

Editor

Cliente VS Anywhere

SolutionExplorer

Page 8: De escritorio a Javascript, nuestra experiencia desde las trincheras

Limitaciones

• API Específica

• Entorno cerrado

• Actualización manual

Tiempo entre versiones

muy largo

Page 9: De escritorio a Javascript, nuestra experiencia desde las trincheras

Idea:Llevar VS Anywhere a la web

¿Por qué?

Page 10: De escritorio a Javascript, nuestra experiencia desde las trincheras

Libertad

Page 11: De escritorio a Javascript, nuestra experiencia desde las trincheras

Compatibilidad

Page 12: De escritorio a Javascript, nuestra experiencia desde las trincheras

Extensibilidad

Page 13: De escritorio a Javascript, nuestra experiencia desde las trincheras

Fase 1: El servidor público

Page 14: De escritorio a Javascript, nuestra experiencia desde las trincheras

Retos

Comunicación Editor

Page 15: De escritorio a Javascript, nuestra experiencia desde las trincheras

Reto 1: Comunicación

Page 16: De escritorio a Javascript, nuestra experiencia desde las trincheras

SignalR

• Tiempo real

• C# + Javascript

• Multiplataforma

Page 17: De escritorio a Javascript, nuestra experiencia desde las trincheras

SignalR (Servidor)

public class ChatHub : Hub

{

public void Send(string name, string message)

{

Clients.All.broadcastMessage(name, message);

}

}

Page 18: De escritorio a Javascript, nuestra experiencia desde las trincheras

SignalR (Cliente)

$(function () {

var chat = $.connection.chatHub;

chat.client.broadcastMessage = function (name, message) {

console.log(name + ":" + message);

};

$.connection.hub.start().done(function () {

chat.server.send("Roberto", "Hola MadridJS");

});

});

Page 19: De escritorio a Javascript, nuestra experiencia desde las trincheras

Demo: SignalR

Page 20: De escritorio a Javascript, nuestra experiencia desde las trincheras

Cómo se comunican: Websockets

Client Server

Request

101 Web Socket Accept

Web Socket Message

Web Socket Message

Page 21: De escritorio a Javascript, nuestra experiencia desde las trincheras

Cómo se comunican : Server Side Events

Client Server

Request

Streamed Response

Streamed Response

Page 22: De escritorio a Javascript, nuestra experiencia desde las trincheras

Cómo se comunican: Long Polling

Client Server

Request

Response

Page 23: De escritorio a Javascript, nuestra experiencia desde las trincheras

SignalR en IIS

Visual Studio

Editor

Cliente VS Anywhere

Server

…SolutionExplorer

Visual Studio

Editor

Cliente VS Anywhere

SolutionExplorer

IIS

Cliente VS Anywhere

SignalR Server

SignalR Client(Chrome)

SignalR Client(IE11)

Page 24: De escritorio a Javascript, nuestra experiencia desde las trincheras

Reto 2: El editor

Page 25: De escritorio a Javascript, nuestra experiencia desde las trincheras

¿Qué editor usamos?

Propio

Microsoft Monaco

Ace

CodeMirror

Page 26: De escritorio a Javascript, nuestra experiencia desde las trincheras

Demo: Agregando editor

Page 27: De escritorio a Javascript, nuestra experiencia desde las trincheras

Futuro? Trabajamos sobre interfaz

Workspace

Editor

AceCode

MirrorMonaco …

Page 28: De escritorio a Javascript, nuestra experiencia desde las trincheras

Retos superados¿Y ahora qué?

Page 29: De escritorio a Javascript, nuestra experiencia desde las trincheras

Interfaz de UsuarioPorque necesitamos más de un editor

Page 30: De escritorio a Javascript, nuestra experiencia desde las trincheras

Montando la UI

Tabs

PanelesDropdown

Page 31: De escritorio a Javascript, nuestra experiencia desde las trincheras

Demo: Paneles

Page 32: De escritorio a Javascript, nuestra experiencia desde las trincheras

Rendimiento

• Separar HTML, CSS y Javascript

• Minificación y bundling• Un único fichero

• Primera opción: Al vuelo con ASP.net

• Antes: > 4 MB

• Después: < 600 KB

Page 33: De escritorio a Javascript, nuestra experiencia desde las trincheras

Demo: Bundling & Minification

Page 34: De escritorio a Javascript, nuestra experiencia desde las trincheras

Fase 2: El servidor privado

Page 35: De escritorio a Javascript, nuestra experiencia desde las trincheras

SignalR en una aplicación web

Visual Studio

Editor

Cliente VS Anywhere

Server

…SolutionExplorer

Visual Studio

Editor

Cliente VS Anywhere

SolutionExplorer

IIS

Cliente VS Anywhere

SignalR Server

SignalR Client(Chrome)

SignalR Client(IE11)

Page 36: De escritorio a Javascript, nuestra experiencia desde las trincheras

SignalR Dentro de nuestro server

Visual Studio

Editor

Cliente VS Anywhere

…SolutionExplorer

Visual Studio

Editor

Cliente VS Anywhere

SolutionExplorer

Cliente VS Anywhere

SignalR Server

SignalR Client(Chrome)

SignalR Client(IE11)

Server

Page 37: De escritorio a Javascript, nuestra experiencia desde las trincheras

Proyecto común

IISVS AnywhereServer SignalR Hubs

HTML + CSS + JS

Page 38: De escritorio a Javascript, nuestra experiencia desde las trincheras

Proyecto común

IIS

VS AnywhereServer

HTML + CSS + JS

Web Workspace

SignalR Hubs

Page 39: De escritorio a Javascript, nuestra experiencia desde las trincheras

Probemas de esta aproximación

• SignalR + dll externas + Ofuscación

• Adiós minificación + bundling

Page 40: De escritorio a Javascript, nuestra experiencia desde las trincheras

Ofuscación y ensamblados externos

• Para ofuscación• Atributos [DoNotObfuscate] o [DataContract] a las clases

• Para ensamblados externos:• AppDomain.CurrentDomain.Load(typeof(Namespace.ChatHub).Assembly.FullName);

Page 41: De escritorio a Javascript, nuestra experiencia desde las trincheras

Minificación: Website packager

IISWebsite packager

HTML + CSS + JS

Website Package

HTML + CSS + JS (min)

Se actualizan referencias

VS AnywhereServer

Se incrusta en el server

Ajax Minifier

Page 42: De escritorio a Javascript, nuestra experiencia desde las trincheras

Fase 3: …..

Page 43: De escritorio a Javascript, nuestra experiencia desde las trincheras

Fase 3…

• Más editores

• AngularJS

• API

• Sesiones browser-to-browser

• Code completion

Page 44: De escritorio a Javascript, nuestra experiencia desde las trincheras

¿Preguntas?

Page 45: De escritorio a Javascript, nuestra experiencia desde las trincheras

Graciashttp://vsanywhere.com - http://rlbisbe.net

@vs_anywhere - @rlbisbe