1 / 59

Stories from B uilding the Windows Mail A pp

Stories from B uilding the Windows Mail A pp. Jeremy Epling Principal Program Manager Lead, Windows Mail App 3-104. //build/. Powerful on all devices Leverage Windows and existing code Nailing performance. //build/. Powerful on all devices Leverage Windows and existing code

damali
Download Presentation

Stories from B uilding the Windows Mail A pp

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Stories from Building the Windows Mail App • Jeremy Epling • Principal Program Manager Lead, Windows Mail App • 3-104

  2. //build/ • Powerful on all devices • Leverage Windows and existing code • Nailing performance

  3. //build/ • Powerful on all devices • Leverage Windows and existing code • Nailing performance

  4. Powerful on all devices All-in-one Laptop 2-in-1 Tablet

  5. Demo: Mail

  6. Optimize for all types of input • Touch • Easy thumb access • Reduce posture changes • Mouse • Show actions on hover • Reduce mouse distance • Keyboard • Fewer tabs for key scenarios • Shortcuts for everything

  7. Optimize for all sizes • Work great from 7in to 30in, portrait and landscape • Use Hub, ListView, and CSS Media Queries to adjust orientation and size • Design the scenarios when you launch other apps • Use protocol handlers to specify launch size

  8. //build/ • Powerful on all devices • Leverage Windows and existing code • Nailing performance

  9. HTMLor XAML? • Do you have an existing investment in either? • Where is the expertise of your team? • Are your scenarios better enabled in one platform?

  10. HTML or XAML? • Do you have an existing investment in either? • Where is the expertise of your team? • Are your scenarios better enabled in one platform?

  11. HTML or XAML? • Do you have an existing investment in either? • Where is the expertise of your team? • Are your scenarios better enabled in one platform? • Almost all email is sent and received as HTML • Accurate email rendering and editing

  12. HTML or XAML? • Do you have an existing investment in either? • Where is the expertise of your team? • Are your scenarios better enabled in one platform? • Almost all email is sent and received as HTML • Accurate email rendering and editing • Leverage the latest and greatest in HTML standards • Huge community of frameworks

  13. Picking the right controls

  14. Custom

  15. Search Box

  16. ListView

  17. Item Container & Repeater

  18. iFrame

  19. iFrame

  20. App bar

  21. Flyout

  22. Settings Flyout

  23. New UI built in HTML • Use Windows controls • Custom controls for your unique experiences • Leverage web tools like LESS and JSHint

  24. Picking the right platform

  25. C#, CX, or C++? • Do you have an existing investment in either?

  26. C#, CX, or C++? • Do you have an existing investment in either? • Desktop and Windows Phone

  27. C#, CX, or C++? • Do you have an existing investment in either? • Desktop and Windows Phone • Where is the expertise of your team?

  28. C#, CX, or C++? • Do you have an existing investment in either? • Desktop and Windows Phone • Where is the expertise of your team? • C++ and COM

  29. C#, CX, or C++? • Do you have an existing investment in either? • Desktop and Windows Phone • Where is the expertise of your team? • C++ and COM • Are your scenarios better enabled in one platform?

  30. C#, CX, or C++? • Do you have an existing investment in either? • Desktop and Windows Phone • Where is the expertise of your team? • C++ and COM • Are your scenarios better enabled in one platform? • Fast background sync for great battery life

  31. Mail app architecture Mail UI (View) • Diagram example • WWA • Platform Mail UI (View model) Mail Object Cache (WinRT) Process Mail Object Model (WinRT) Media Foundation Mail Data Store (JET DB) Search (.EML files on disk) Sync host Exchange Active Sync (EAS) IMAP WNS

  32. Leverage Windows and existing code • Use Windows controls • Leverage existing code as WinRT components • Store enables rapid release of updates

  33. //build/ • Powerful on all devices • Leverage Windows and existing code • Nailing performance

  34. Build in performance from the beginning • Define the scenarios performance up front • Analyze often and on ARM devices • Use Visual Studio and Windows Performance Analyzer

  35. Faster Performance

  36. Faster Performance 36% savings

  37. Scheduling work

  38. Scheduler • WinJS.Utilities.Scheduler • Enables a responsive experience • Allows you to pre-build UI you’ll need later

  39. Scheduler in Windows Mail App

  40. Scheduler in Windows Mail App

  41. Scheduling Today ? Task App Code Task setImmediate(); Task Task WinJS Code Task setImmediate(); Task Task System Code Task setImmediate(); Task

  42. Scheduling Today ? Task App Code Task Task Task WinJS Code Task Task Task System Code Task Task

  43. Scheduling with WinJS Scheduler Task App Code Task schedule(func, pri); Task Task WinJS Code Task schedule(func, pri); Task Task System Code Task schedule(func, pri); Task

  44. Scheduling with WinJS Scheduler Task App Code Task Task Task WinJS Code Task Task Task System Code Task Task

  45. Using WinJS Scheduler • setImmediate(foo); • varS = WinJS.Utilities.Scheduler; • S.schedule(foo, S.Priority.normal); • or • S.schedule(foo, S.Priority.high); • or • S.schedule(foo, S.Priority.idle);

  46. Web workers • Great for computation and data access • Can’t access the UI thread • Consider building large custom controls as a string

  47. Demo: Calendar

  48. default.js • varworker = new Worker(“worker.js”); • varcontentElement = document.getElementByID(“mainContent”); • worker.onmessage= function(e) { • contentElement.innerHTML = e.data; • };

More Related