Slide 1

Slide 1 text

WebAssembly & Progressive Web Apps Rethinking modern application development Christian Weyer @christianweyer CTO

Slide 2

Slide 2 text

2 § Founder & CTO at Thinktecture AG § Personal focus on § Mobile & web-based application architectures § Interoperability, cross-device § Pragmatic end-to-end solutions § Cloud-native & serverless architectures § Independent Microsoft Regional Director § Microsoft MVP for ASP.NET (Architecture) ASPInsider, AzureInsider § Google GDE for Web Technologies § [email protected] § ! @christianweyer Christian Weyer Rethinking modern application development WebAssembly & Progressive Web Apps (PWA)

Slide 3

Slide 3 text

3 § Modern Business Applications & the Web § Progressive Web Apps (PWA) pave the way to native § WebAssembly as a native bytecode for the Web § ASP.NET Core Blazor: an experimental project for .NET-based SPAs WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development The Journey

Slide 4

Slide 4 text

4 State of the art Modern Business Applications Rethinking modern application development WebAssembly & Progressive Web Apps (PWA)

Slide 5

Slide 5 text

5 § Native operating systems & platforms get less important for users § Windows, Linux, macOS, Android, iOS: a mixture of everything, anywhere § Desktop is still important, not everything is mobile § Software developers need to care about & target ubiquitous systems § Depending on the actual audience, on the actual use cases § The Web has proven to be a universal platform § Modern browsers are power horses – more or less like an operating system WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development Modern Business Applications

Slide 6

Slide 6 text

6 WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development

Slide 7

Slide 7 text

7 § Single Page Applications (SPAs) are the new smart clients WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development Modern Business Applications & the Web

Slide 8

Slide 8 text

8 WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development Browser & JavaScript Architecture Compiler Parser JIT Web APIs (DOM, IndexedDb, File Storage etc.) Browser JavaScript (.js) HTML (.html) Inline JS JS Runtime

Slide 9

Slide 9 text

WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development “Houston, we have some problems” 9 The Web is too… Web-ish ! The web is centered around a single language "

Slide 10

Slide 10 text

10 More native feeling Progressive Web Apps Rethinking modern application development WebAssembly & Progressive Web Apps (PWA)

Slide 11

Slide 11 text

11 § Web applications should… § Feel & behave like a native app § Be installable, without (classic) app stores § Be able to work completely offline, without any server connections § Receive push notifications, without running § Offer in-app payment options § PWAs are targeted at both, mobile and desktop § Progressive Web Apps are not a technology § Collection of characteristics an application must/should support ➔ “Uber Pattern” § Various technologies are available to progressively enhance an application § Some outstanding standards like Web App Manifest, Service Workers WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development Progressive Web Apps (PWA) – the Web gets more native

Slide 12

Slide 12 text

12 WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development

Slide 13

Slide 13 text

WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development Offline Capability with Service Worker Mobile or Desktop system Remote storage Server HTTPS 13 Browser sandbox Web App HTML/JS Cache storage fetch Service Worker

Slide 14

Slide 14 text

14 WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development https://caniuse.com/#search=Service%20Workers

Slide 15

Slide 15 text

15 WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development https://caniuse.com/#search=Web%20App%20Manifest

Slide 16

Slide 16 text

16 Your native code in the browser WebAssembly Rethinking modern application development WebAssembly & Progressive Web Apps (PWA)

Slide 17

Slide 17 text

17 § Low-level bytecode for the Web – beyond asm.js § Bring any language into the browser § Currently targeted at C/C++ and Rust § Achieve superior performance in certain cases § Because JavaScript ! (but not a replacement for JavaScript!) § Stack machine-based § Not AST, or register- or SSA-based bytecode § See https://github.com/WebAssembly/design/blob/master/Rationale.md § Goals § Fast, efficient, portable ▪ Use existing sandboxing tools § Readable and debuggable ▪ Don’t break the web WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development WebAssembly (WASM) https://twitter.com/getify/status/997098808344547328

Slide 18

Slide 18 text

18 WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development WASM & JS Architecture (simplified) Compiler Parser JIT Web APIs (DOM, IndexedDb, File Storage etc.) Browser JavaScript (.js) HTML (.html) Inline JS JS Runtime WebAssembly (.wasm)

Slide 19

Slide 19 text

19 WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development https://caniuse.com/#search=WebAssembly

Slide 20

Slide 20 text

20 § Re-use existing code by targeting WebAssembly, embedded in larger JavaScript / HTML application § Anything from simple helper libraries, to compute-oriented task offload § Main application frame & logic in WebAssembly, UI in JavaScript / HTML / CSS § Entire code base in WebAssembly WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development WASM-based Applications

Slide 21

Slide 21 text

21 WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development WASM Simple Sample § Binary (.wasm) & text (.wat) format

Slide 22

Slide 22 text

22 § C/C++ tools & compilers § Binaryen: compiler and toolchain infrastructure library for WebAssembly, written in C++ § LLVM: The modern C/C++ compiler toolchain § Emscripten: LLVM-to-JavaScript-or-WASM compiler § Tools cross-compiling from major languages § Cheerp from C++ § TeaVM from Java § Rust § mono-wasm from C# § Baremetal: WebAssembly Studio § Playing around with WASM in the browser WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development WASM Tooling C / C++ Source code .wasm module HTML doc JS glue code Emscripten +

Slide 23

Slide 23 text

23 WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development emudore, a Commodore 64 emulator – in WASM https://github.com/marioballano/emudore/blob/master/README.md

Slide 24

Slide 24 text

24 § Mono is Microsoft’s strategy for cross-platform client applications § Xamarin is based on Mono, Unity as well § Support for .NET Standard § Mono team is working on tooling to compile Mono/.NET code to WASM § Aka ‘mono-wasm’ § JIT – for fast development cycles, including live reload § AOT – for optimized runtime deployment & execution WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development .NET & WASM C# WebAssembly LLVM bitcode mcs IL Mono AOT compiler LLVM WASM backend

Slide 25

Slide 25 text

25 § After v1 (the MVP), the consortium keeps working on new features § Threads § Garbage Collection § Direct DOM access § Many more things… See https://github.com/WebAssembly/design/blob/master/FutureFeatures.md WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development WASM: Here & to Stay

Slide 26

Slide 26 text

26 An experiment based on WASM ASP.NET Core Blazor Rethinking modern application development WebAssembly & Progressive Web Apps (PWA)

Slide 27

Slide 27 text

27 § Blazor is an experimental Single Page Application (SPA) framework based on .NET § Blazor projects run 100% in the browser § On top of a WASM build of the Mono .NET runtime * § Compiled .NET assemblies are loaded into the browser and JIT compiled * § Uses Razor / .cshtml templates for rendering HTML / CSS § Uses C# for writing application logic WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development Blazor – WASM in action * as of May 22, 2018

Slide 28

Slide 28 text

28 WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development Blazor Architecture* Compiler Parser JIT Web APIs (DOM, IndexedDb, File Storage etc.) Browser blazor.js Blazor page (.html) JS Runtime mono.wasm mono.js mscorlib.dll etc. myapp.dll * as of May 22, 2018

Slide 29

Slide 29 text

29 § It is NOT about running any .NET Code just in the browser § We still have a sandbox § Various .NET Standard APIs will just not work in the browser § It is NOT a way to port Razor / MVC / server-side web applications to an SPA § It is NOT a way to bring XAML / WPF / Xamarin into the browser § You may want to look at the Ooui.WASM open source project for this § It is NOT production-ready § Therefore, it is NOT suitable for real-world applications (yet?) WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development What is Blazor NOT?

Slide 30

Slide 30 text

30 § The Web is still the Web § You need to know HTML, CSS and JavaScript. Period. § Progressive Web Apps § Emerging technologies enable more app-like feeling and behaviors of Web apps – including offline § WebAssembly § Brings any programming language and sandbox-aware framework to the browser § May pave the way to write business applications without large JavaScript parts – some day… maybe § Blazor § Experimental SPA Framework by the ASP.NET Core team, very early stages – do not use in production § Shows possibilities of WebAssembly with .NET WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development Summary The future m ight be bright! ?

Slide 31

Slide 31 text

WebAssembly & Progressive Web Apps Rethinking modern application development Christian Weyer @christianweyer [email protected] Thank you! https://github.com/thinktecture/techorama-2018-wasm-pwa

Slide 32

Slide 32 text

32 § Progressive Web Apps § https://developers.google.com/web/progressive-web-apps/ § Is ServiceWorker ready? § https://jakearchibald.github.io/isserviceworkerready/ § PWAs with Angular § https://angular.io/guide/service-worker-intro § WebAssembly Specification § http://webassembly.github.io/spec/core/index.html § LVVM § https://llvm.org/ § Emscripten § http://kripken.github.io/emscripten-site/ § Mono & WebAssembly § http://www.mono-project.com/news/2018/01/16/mono-static-webassembly-compilation/ § ASP.NET Blazor § https://blazor.net/index.html § Ooui.WASM § http://praeclarum.org/post/171899388348/oouiwasm-net-in-the-browser WebAssembly & Progressive Web Apps (PWA) Rethinking modern application development Resources

Slide 33

Slide 33 text

No content