Successfully reported this slideshow.

Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014

603 views

Published on

Developing large apps is difficult. Ensuring that code is consistent, well structured, tested and has an architecture that encourages enhancement and maintainability is essential. When it comes to building large server-focused apps the solutions to this problem have been tried and tested. But, how do you achieve this when building HTML5 single page apps?

BladeRunnerJS is an open source developer toolkit and lightweight front-end framework that has helped Caplin Systems ensure that a 200k LoC JavaScript codebase hasn’t become a tangled mess of unstable spaghetti code. This codebase is packaged and delivered to customers as an SDK. Additionally customers receive a getting started application of around 50k LoC for them to build upon, and they’re expected not to turn that into a tangled … you get the idea.

In this talk you’ll learn the main concepts to apply when building a front-end app that scales and how BladeRunnerJS can support the development process.

Published in: Technology
  • Be the first to comment

Using BladeRunnerJS to Build Front-End Apps that Scale - Fluent 2014

  1. 1. Using ! to build Front-end JavaScript Apps that Scale ! ! Fluent 2014
  2. 2. Phil @leggetter phil@leggetter.co.uk Caplin Systems ! ! ! @BladeRunnerJS
  3. 3. • Toolkit written in Java: Modular + Extensible • Our version of: • Yeoman + Grunt + Broccoli + Browserify + App Architecture + Micro-libraries • New concepts: Blades + Workbenches • Not a replacement for Angular, Ember, Web Components…
  4. 4. Overview • What is a Large Scale front-end App? • What are the signs of scaling? • What are the solutions? (with demos)
  5. 5. What is a large-scale JavaScript app?
  6. 6. –Addy Osmani, Patterns For Large-Scale JavaScript Application Architecture In my view, large-scale JavaScript apps are non-trivial applications requiring significant developer effort to maintain, where most heavy lifting of data manipulation and display falls to the browser.
  7. 7. Large Codebase More functionality === More code
  8. 8. Caplin Trader • SDK: • ~1,000 JavaScript files • ~131,000 LoC • ~131 lines per file • ~650 test files • ~95,000 test LoC • Typical Apps: • ~425 JavaScript files • ~50,000 LoC • ~117 lines per file • ~200 test files • ~21,000 test LoC
  9. 9. Complexity
  10. 10. Gmail & Caplin Trader • Large Single Page Apps (SPAs) • Complex functionality • Complex interactions • User • Technology • Leave open all day
  11. 11. Contributors The Human Factor
  12. 12. Who contributes to an app? • Front-end devs • Back-end devs • Designers • QA • Infrastructure and release engineers • Technical authors
  13. 13. So, how do you ensure an application is maintainable? 1. structure a massive codebase (js, css, html, i18n, images, config etc.) 2. an architecture for complex functionality and interaction (UI and other components) 3. make sure that all contributors can work in harmony 4. development must be a productive experience 5. ensure all these compliment each other
  14. 14. Signs of scaling
  15. 15. Dev Setup takes forever
  16. 16. My App isn’t working! • Other contributors breaking functionality • Code accessed and modified from elsewhere • Dependency Analysis and out of order file concatenation
  17. 17. Finding assets is hard
  18. 18. What does this code do? • Inconsistent coding style • Inconsistent code structure • Side effects through unexpected overrides
  19. 19. Long App Reloads
  20. 20. Have the tests finished yet? • Having to run all the tests • UI-based tests: Slow & unreliable • Continuous Integration…taking 8 hours! Stopwatch designed by Irit Barzily from the thenounproject.com
  21. 21. Scaling Solution
  22. 22. • Streamlined developer workflow • Consistency • Focus on building a single feature (in isolation) • Scalable loosely-coupled application architecture • Quality at its core (maintainability) BRJS Goals
  23. 23. Developer Workflow Focus on Features
  24. 24. Building a single feature in isolation
  25. 25. Blades
  26. 26. Workbenches
  27. 27. Blade Demo
  28. 28. • Streamlined developer workflow • Consistency • Focus on building a single feature (in isolation) • Scalable loosely-coupled application architecture • Quality at its core (maintainability) Goals
  29. 29. Application Architecture
  30. 30. Requires an Architecture that… • Allows complex interactions • Support developing a feature in isolation • Allows components to be changed without side effects • Is to maintain: Fix / Update / Extend
  31. 31. Blades (again)
  32. 32. MVVM
  33. 33. Services
  34. 34. What is a service? • Use services to access shared resources • Persistence Service • RESTful Service • Realtime Service • Services registered and accessed via a ServiceRegistry • Dynamic Service Locator1 1 http://martinfowler.com/articles/injection.html#ADynamicServiceLocator
  35. 35. Why use services? • Blades should not directly communicate • Functionality encapsulated behind an interface • Loose-coupled communication • Dependencies can be injected for different scenarios: • Workbench / Test / App
  36. 36. Services Demo
  37. 37. • Streamlined developer workflow • Consistency • Focus on building a single feature (in isolation) • Scalable loosely-coupled application architecture • Quality at its core (maintainability) Goals
  38. 38. Quality
  39. 39. Winning! • Streamlined dev workflow: focus on features • e.g. Blades & Workbenches • Consistency: Asset structure, Coding style & structure, Architecture • Loose coupling: MVVM, Services & Interfaces • Facilitates testing • Can easily swap out implementations • MVVM: Avoid testing the DOM
  40. 40. Test Demo ! ./brjs test <path_to_run_tests>
  41. 41. Biggest Win • Testing features in isolation • Change view model and assert against mocked Service • Inject mock service, make calls and assert View Model
  42. 42. Need Proof? Our full suite Caplin Trader testing time went from >8 Hours < 30 minutes Much less for a single feature
  43. 43. • Streamlined developer workflow • Consistency • Focus on building a single feature (in isolation) • Scalable loosely-coupled application architecture • Quality at its core (maintainability) Goals
  44. 44. Summary • BladeRunnerJS toolkit: Streamline developer workflow + focus on features • Blades: Build features in isolation (grouping assets together) • Services: loose coupled communication e.g. EventHub • Quality: Test units (classes), features (ViewModel < - > Service) & keep DOM testing to a minimum.
  45. 45. BRJS at Fluent • BladeRunnerJS is a new open source solution • bladerunnerjs.org • v0.4 released last week • @leggetter & @patrickmyles are at Fluent today & tomorrow • BoF session tomorrow - table #7
  46. 46. Phil @leggetter phil@leggetter.co.uk Caplin Systems ! ! ! @BladeRunnerJS bladerunnerjs.org

×