0 Bewertungen0% fanden dieses Dokument nützlich (0 Abstimmungen)
231 Ansichten16 Seiten
Multi-device and cloud are driving a rapid evolution in application architecture. Mobile devices are becoming important gateways to business data and applications. The great wave of desktop web applications built in the 2000s shared a common thin client architecture.
Multi-device and cloud are driving a rapid evolution in application architecture. Mobile devices are becoming important gateways to business data and applications. The great wave of desktop web applications built in the 2000s shared a common thin client architecture.
Multi-device and cloud are driving a rapid evolution in application architecture. Mobile devices are becoming important gateways to business data and applications. The great wave of desktop web applications built in the 2000s shared a common thin client architecture.
A Taxonomy of Front-End Technologies As An Aid To Decision Making
Summer 2014 Sencha, Inc. 1 1700 Seaport Blvd. Suite 120, Redwood City, CA 94063 1 (800) 2122802 www.sencha.com @sencha Introduction The two biggest drivers of change in business computing today are multi-device computing and cloud. Multi- device and cloud are driving a rapid evolution in application architecture toward more powerful front-ends and more fexible back-ends. Mobile devices are becoming important gateways to business data and applications. And cloud back-ends often implemented as rich API service points are fast becoming the back-end complement to this new wave of applications. In the last fve years, there has been an explosion of innovation in web and native technologies, with rapid releases of libraries, frameworks and tools to help developers create applications for this new world. On the back-end, Node.js, a stripped-down event machine written in JavaScript, has become the foundation for developers adapting their server back-ends to the new multi-device world. On the front-end, there has been a Cambrian explosion of new experimental libraries to help web and native developers create the next generation of user experiences.
The New Architecture Many organizations have spent enormous amounts of time and effort creating development processes and building skills centered on traditional Java application servers. Sometimes, they fnd it hard to believe that these investments are now entering obsolescence. In many peoples minds, the frst question is why do we need to change? Simply put, mobile computing requires a new architecture. The great wave of desktop web applications built in the 2000s shared a common thin client architecture. Heavyweight application servers like Oracle WebLogic served up complete pages to the browser, and all application interaction was performed as page requests and responses. The entire application workload was performed on the server-side: all the data management, all the integration, all the business logic and all the HTML and CSS generation. While there was some page interactivity using JavaScript, it was minor. This was for three good reasons: browsers were primitive page viewers with very slow JavaScript engines, desktop browsers rarely went offine, and it was easier to think about security when everything happened on the server. However, the shift to mobile computing and the rise of HTML5 browsers means that two out of three of these reasons are no longer valid. Mobile apps need to work offine, and browsers (and native mobile OSes) have become vastly more capable. In todays state of the art applications, much of the business logic and data handling that used to take place on the server, now takes place on the mobile device. And mobile application experiences are vastly richer than anything that static page serving could ever accomplish. 2 1700 Seaport Blvd. Suite 120, Redwood City, CA 94063 1 (800) 2122802 www.sencha.com @sencha Figure 1: Page Display Page Generation APIs User Interface Logic & State Integration Interface Management Data Logic & State Integration Data Browser Yesterday Today Native & HTML 5 App Server Cloud Web 1.0 vs. Multi-Device Architectures In todays application architectures, a rich client whether HTML or native talks to a thin cloud back-end. The mobile device talks to RESTful APIs in the cloud, sending and receiving JSON objects. This architecture shift is behind the new generation of applications that are stateful and data-rich, with fast user response. These multi- device applications run both on our new mobile devices, our existing desktop browsers and our new tweener devices like keyboard-enabled tablets and phablets. These applications have fast response to user interaction because they store large amounts of data locally, either in memory or persistently in a local data store. This enables searching, sorting, fltering and grouping data (e.g. database records) without having to make a round-trip to a server to fetch new data. These applications are also far more stateful than Web 1.0 apps. They allow the user to navigate through content and data presented across multiple screens and sub-screens and to engage in multi-step transactions without requiring a new page to be requested from the server. What this means is that these applications are extraordinarily data-rich, allowing the display and manipulation of large data sets in multiple ways either through classic data grids, or more advanced visualizations. Everyone, start your editors! While it can be exhilarating for a developer to simply crack open Eclipse or vi and start coding these applications against this pattern immediately, its extremely valuable to stop and refect on all the implications of this new app model in the context of the applications that your development teams need to plan, architect and deliver. 3 1700 Seaport Blvd. Suite 120, Redwood City, CA 94063 1 (800) 2122802 www.sencha.com @sencha This is particularly true if youre managing more than just yourself. The average business has to create working practices for managing the lifecycle of these applications with tens, if not hundreds of developers working on hundreds to thousands of screens. Those screen experiences can be built on top of hundreds of thousands of lines of code and millions of data records. Its potentially an extremely serious undertaking (some Sencha customers have fve year migration timelines for upgrading their applications to the new architectural pattern). So its a good idea to step back and simply think about all the moving parts that make up our next generation runtime. The Front-End Development Challenge Figure 2: Interface Elements Create appealing themes and styles for interactive elements Present complex data using structured presentation elements like grids and charts Create a standard visual vocabulary across apps and more View System Dynamically lay out screen elements in response to diferent screen sizes and resizes Detect and respond to touch gestures beyond simple taps Swap in local language strings, handle RTL languages and keep everything accessible Animate content and more Logic & Data Update the screen when data changes and vice versa Remember application states to enable undo/redo as well as navigation Search, sort, flter, group and validate data and more Server i/o Handle asynchronous calls to the server-side Parse and convert serialized data Call out to server-side code and more Common Challenges in Front-End Development Most multi-device applications have a set of common challenges that we can (somewhat arbitrarily) divide into four separate categories. 1. Screen design: Creating and arranging the user interface the look and the behavior of your application content including widgets, charts and grids. 2. View management: Structuring and managing the view machinery such as the layout and interactivity of your screen elements, as well as handling user requirements such as foreign language, or right-to-left languages like Arabic. Plus, handle the core problem of multi-device building applications that work on both desktop screens with mouse input and mobile screens with gesture interactions. 3. Data and code management: Updating the screen when the data changes, and updating your data when the user gives you input. 4. Communicating with the back-end and server-side. 4 1700 Seaport Blvd. Suite 120, Redwood City, CA 94063 1 (800) 2122802 www.sencha.com @sencha Cutting across all these challenges is the need for modularity and encapsulation at multiple levels of your code, so multiple developers and development teams can effectively collaborate leveraging each others work without stepping on each others toes. A Front-End Taxonomy Native development technologies have long provided solutions to these problems. Looking at native runtimes like the Cocoa framework for Apple platforms, the Flex framework for Flash development, or Windows Presentation Foundation for Microsoft platforms we see a surprisingly similar set of solutions to the problem of creating rich client applications. Each of these technology platforms offers similar kinds of capabilities in similar chunks. Figure 3: Server i/o Server Method Invocation Server Calls asynch, conversion 2-Way Data Server Notifcations Base Services Rendering, DOM, fonts, parallelism, security, media decode, sensors, printing, network i/o Interface Elements Compound Widgets trees, grids, gauges Basic Widgets buttons, bars, text felds Visualizations charts, infographics Containers panels, cards, modals Themes Styles View System Interactions gestures, drag & drop Layout Manager absolute, fexible Drawing vector, bitmap Theming computed styles Templating iterations, conditionals Visual Efects animations, flters Localization RTL, locale libraries Accessibility focus manager, ARIA Logic & Data Data Binding 1-way, 2-way State Manager history, undo, routes Modularity components, modules Testing IOC, test hooks Data Objects queues, hashtables Data Models & Stores group, sort, validate Persistent Data cache & sync Mulitimedia 3D, audio, video Taxonomy of the Front-End Stack Between the built-in capabilities of the system libraries and their frameworks, native platforms offer you a rich basket of tools to help structure your application, automate common development tasks and make great looking applications. In Figure 3, we show a generic model of the front-end stack. As a model, this is an obvious simplifcation of the way that the real code is structured. For example, a module system isnt strictly a separate piece of code; its the way that all code is organized. Nevertheless, weve found it to be a helpful way to organize front-end functionality and map out the capabilities of various front-end technologies. 5 1700 Seaport Blvd. Suite 120, Redwood City, CA 94063 1 (800) 2122802 www.sencha.com @sencha Interface Elements
Compound Widgets trees, grids, gauges Basic Widgets buttons, bars, text felds Visualizations charts, infographics Containers panels, cards, modals Themes Styles Basic widgets include the essential display elements of an application including text areas, buttons, form elements, progress and loading indicators, menus, etc. Compound widgets include complex display elements that display more than one data value or include multiple sub-controls such as a data grid, a nested list or a multi-level fle display. Visualizations include data-driven graphics elements such as charts, graphs, waterfall charts and other diagrams. Containers act as holders for widgets and content and include scrollable displays like nested panels, card-based displays like carousels and modal containers like alerts or wizards. Styles include font size, shadowing and other visual effects that are properties or attributes of the content or widget set. Themes are collections of style, and graphics assets that give a coherent look and feel to the application. They can be expressed in terms of a theming language or system that is distinct from the style language. View System
Interactions gestures, drag & drop Layout Manager absolute, fexible Drawing vector, bitmap Theming computed styles Templating iterations, conditionals Visual Efects animations, flters Localization RTL, locale libraries Accessibility focus manager, ARIA Templating is a capability that converts placeholders into fnal content through the application of a rules set. Complete templating systems allow simple or complex conditionals and iterations and even full functions. Layout Manager applies a series of layout rules to determine the arrangement of screen elements in x, y and even z space based on window size, device type and resolution. Interactions are a set of capabilities that help convert raw system events (e.g. touchstart) into gestures that an app developer would like to use e.g. a scroll gesture. We also put drag and drop enablement into this category. Visual effects are an umbrella term for property animations and visual transformations such as blurring, recoloring, desaturation, etc. Drawing APIs provide an abstraction above raw drawing primitives. If the platforms primitives are rich enough, they may be unnecessary. Compositing operations like clips, masks, blends, etc. may be considered drawing APIs or could equally be considered visual effects. A theming system provides a way to apply a collection of styles and assets as a whole to an application. It can also provide computed style properties. Localization capabilities allow text strings and application messages to be swapped based on the application locale. Although we show localization as a separate brick, its usually baked into many things across the stack. Thorough localization also implements localized data formats for time, date, etc., as well as localized sorting rules for data and text and adjusts widget layout & composition based on whether the language has right-to-left writing order. 6 1700 Seaport Blvd. Suite 120, Redwood City, CA 94063 1 (800) 2122802 www.sencha.com @sencha Accessibility is another capability that is baked into many items of the stack, and provides facilities such as keyboard navigation, screen reader compatibility and high visual contrast themes for the visually impaired. Data & Logic
Data Binding 1-way, 2-way State Manager history, undo, routes Modularity components, modules Testing IOC, test hooks Data Objects queues, hashtables Data Models & Stores group, sort, validate Persistent Data cache & sync Mulitimedia 3D, audio, video State management facilities help application developers manage state consistency in applications that lend themselves to a state machine model. Undo/redo facilities, navigation stacks, and transactional- style all-or-nothing data commits fall into this category. Data objects such as collections, trees, queues and graphs are often provided to a suffcient level by standard language libraries. But in cases where these are lacking, the front-end stack needs to supply them, or the developer needs to write her own from scratch. Data binding provides easy change synchronization between in-memory data variables and the screen elements that depict that data. It saves the developer from writing explicit change management code. Data models provide in-memory data structures that store the applications working set. Well-featured models provide database-style functionality for sort, search, flter, validate and group. They also can provide help for serialization and deserialization from wire formats. Modularity is an umbrella term for the capabilities of the stack that help individual developers and development teams to structure code and manage dependencies. It doesnt refer to a single piece of identifable code, but it covers capabilities like object namespacing, architectural patterns like MVC, component models and module/package systems. Persistent data are capabilities built on top of the raw fle read-write that help store, cache and sync application assets and data locally. Testing enablement includes capabilities that facilitate automated unit and system testing, such as error logging, event replay and ensuring that all application events can be triggered by external scripts. Multimedia capabilities include the ability to embed and customize system video and audio playback within an application and to control playback, read metadata and control captioning. Server Communication
Server Method Invocation Server Calls asynch, conversion 2-Way Data Server Notifcations Provides applications with server-side communication facilities for request/response, full-duplex, and server push data communication. Typically server communications are provided by system libraries, but in the special case of web technologies, raw socket communication is prohibited by the browser sandbox model and only higher level facilities like XHR and web sockets are provided. This taxonomy doesnt include capabilities that are normally provided by the operating system such as font rendering, threads or sensor APIs, so their browser analogs (web fonts, web workers, geolocation, etc.) are not included in the taxonomy either. 7 1700 Seaport Blvd. Suite 120, Redwood City, CA 94063 1 (800) 2122802 www.sencha.com @sencha Applying the Taxonomy to the Web Platform When we take this taxonomy and apply it to the web platform, the results are quite enlightening. In particular, when we look at the pre-HTML5 web platform, we can see how few capabilities it offered. In pre-HTML5 browsers, if you wanted solutions to practically any problem, you had to build almost everything from the ground up or use non-browser plugins for capabilities like graphics, video and full duplex server communications. Base Services Rendering, DOM, fonts, parallelism, security, media decode, sensors, printing, network i/o Server i/o Server Method Invocation Server Calls asynch, conversion 2-Way Data Server Notifcations Interface Elements Compound Widgets trees, grids, gauges Basic Widgets buttons, bars, text felds Visualizations charts, infographics Containers panels, cards, modals Themes Styles View System Interactions gestures, drag & drop Layout Manager absolute, fexible Drawing vector, bitmap Theming computed styles Templating iterations, conditionals Visual Efects animations, flters Localization RTL, locale libraries Accessibility focus manager, ARIA Logic & Data Data Binding 1-way, 2-way State Manager history, undo, routes Modularity components, modules Testing IOC, test hooks Data Objects queues, hashtables Data Models & Stores group, sort, validate Persistent Data cache & sync Mulitimedia 3D, audio, video The Pre-HTML5 web platform offered a limited set of widgets, some styling and layout capabilities, and request/ response http calls. Thats it. Its amazing to think that the entire frst generation of web applications was built on such a tiny foundation of browser capabilities. With the recent arrival of HTML5 browsers, the platform offers many more capabilities: Canvas, WebGL and SVG have given us 2D and 3D graphics, bitmap and vector HTML5 inputs give us range sliders, color pickers and expanded date/time inputs CSS animations and transitions have given us motion graphics Web sockets provide full-duplex server communication And many more capabilities 8 1700 Seaport Blvd. Suite 120, Redwood City, CA 94063 1 (800) 2122802 www.sencha.com @sencha Figure 4: Base Services Rendering, DOM, fonts, parallelism, security, media decode, sensors, printing, network i/o Server i/o Server Method Invocation XHR2 Web Sockets Notifcations Interface Elements Compound Widgets trees, grids, gauges Range, Color Picker, Date/Time, Progress, Telephone Visualizations charts, infographics Containers panels, cards, modals Themes Gradients, Border Radius View System Drag & Drop Flexbox, Multicolumn SVG, Canvas Theming computed styles Templating iterations, conditionals Animations & Transitions, Filters Localization RTL, locale libraries WAI - ARIA Logic & Data Data Binding 1-way, 2-way History Push State Modularity components, modules Web Timing API Data Objects queues, hashtables Data Models & Stores group, sort, validate Local Storage, Indexed DB, App-cache Video, Audio, WebGL HTML5 Capabilities in our Front-End Taxonomy Although HTML5 has given us many new things, as we can see from Figure 4, the front-end web stack remains incomplete compared to native platforms. We wont go into an exhaustive list of platform gaps in raw HTML5, but here are just a few examples: Layout Management: HTML5 introduced Flexbox, which provides comprehensive one- dimensional layout. However, its implementation is slightly different in older webkit browsers, Internet Explorer 10 and current Chrome and Safari. Gridlayout, a 2D layout manager is still only implemented in Internet Explorer. HTML5 also introduced Multicol, which allows text to be columnated automatically, but only in columns of equal width. Interactions: HTML5 introduced support for recognizing touch events, but this was implemented differently in Internet Explorer (pointerEvents) and other browsers (touch events). In addition, while HTML5 added a drag and drop API, it is based on the Internet Explorer 5 Microsoft drag and drop API which has too many events, plus defaults that always have to be overridden and very noisy event bubbling among other problems. Data Binding: HTML5 did not add support for any kind of data binding (although a very basic form of data binding was introduced in Internet Explorer 4 and later scrapped). While some browsers have added features to fll some of these gaps, these features have not been adopted widely. For example, Chromes web components proposal includes partial support for templates and a basic (if somewhat convoluted) component model. Chrome also, uniquely, has support for fles and directories per application domain. And Adobes Regions proposal for complex cross-element text fow is partially available in Internet Explorer and Safari, but not Chrome. In summary, as of mid 2014, there are signifcant gaps remaining for a development team that wants a complete front-end development stack. And there is little expectation that these gaps will be flled in the near term. 9 1700 Seaport Blvd. Suite 120, Redwood City, CA 94063 1 (800) 2122802 www.sencha.com @sencha JavaScript to the Rescue Fortunately, since JavaScript frst shipped back in 1995, scripts, frameworks, libraries and preprocessors have been developed to augment and expand browser functionality. And with the rise of code sharing sites like GitHub, the explosion of libraries and frameworks has continued apace, not just for JavaScript but now for CSS as well. As of Spring 2014, GitHub had over 1.2 million public JavaScript repositories. The new problem for development teams is not fnding a library to fll a gap, but which library to use. And most important, choosing a front-end strategy that suits their app portfolio, their skill base and their deployment requirements. One of the major decisions for a development team manager is whether or not to self-support: 98% of GitHub repos are never updated after their frst anniversary, which makes self-support a fact of life for teams choosing to use a collage of public resources. Assessing The Landscape We often see blogs or tweets on the subject of whats the best framework or whether a developer should use library x or y. But experienced development teams know that these are misconceived questions. We believe that the right question for development teams to ask in all of these cases is: Given the kinds of app experiences we want to build And the language and skills of our development teams And our apps maintenance lifetime And the browsers we need to support And the size of our development teams And whatever additional requirements we may have... What is the best framework and library for this app portfolio and for this development organization? For certain kinds of application experiences, for example, a pure content application targeting modern browsers written and maintained by a solo developer, the answer may be that no framework is needed at all. On the other hand, for a portfolio of complex and interdependent apps developed by a large and changing team, the answer may be to standardize on a single framework across the organization. With those thoughts in minds, next we take a look at how the most popular frameworks and libraries stack up compared to our front-end taxonomy. With a good map to the framework capabilities, its easier to answer the question of what is the best framework for your teams. 10 1700 Seaport Blvd. Suite 120, Redwood City, CA 94063 1 (800) 2122802 www.sencha.com @sencha A Quick Overview of Framework and Library Stereotypes Below is a selection of the most visible frameworks and libraries with high visibility in the web app development community. Figure 5: Name Description Bootstrap + Plugins CSS framework for responsive web sites Backbone + Underscore Minimalist architectural framework + utility data classes Angular JS HTML-based architecture package for modern browsers Ember + Handlebars Highly structured architecture framework jQuery + jQueryUI Easily learned, unstructured UI libraries Ext JS + Deft.js Highly structured, full stack framework Major Development Frameworks and Libraries Bootstrap is a CSS framework that provides interface elements and some view management capabilities like theming and layout. Its become very popular for websites that primarily display content. Backbone.js is a minimalist MVC package with some data manipulation capabilities provided by Underscore. It provides no interface elements or view management capabilities. AngularJS describes itself as a toolkit for creating frameworks. It provides an MVC structure with a rich HTML-based templating system that allows widgets to be created declaratively using markup. Ember is an opinionated MVC package that provides object and data binding and a full component model. jQuery + jQueryUI is a classic combination that provides interface elements and some view management capabilities, but without any architectural or data handling capabilities Ext JS + Deft JS is a full front-end JavaScript development stack with the Deft JS library providing inversion of control capabilities to enable easier testability. Apart from Ext JS, each of these frameworks or libraries tackles a piece of the development stack front-end. AngularJS, for example, assumes that something else will be providing the interface elements and most other elements of the view system. And Backbone.js assumes that most of the stack will be coming from somewhere else. In fact, when we compare each of these frameworks and libraries to our front-end taxonomy, it becomes far more clear what each provides and what each is missing. Below in fgure 6, for example, we show where Bootstrap provides functionality. 11 1700 Seaport Blvd. Suite 120, Redwood City, CA 94063 1 (800) 2122802 www.sencha.com @sencha Figure 6: Support Key Server i/o Server Method Invocation Server Calls asynch, conversion None / HTML5 Partial Complete Sockets Server Notifcations Interface Elements Compound Widgets trees, grids, gauges Basic Widgets buttons, bars, text felds Visualizations charts, infographics Containers & Windows panels, cards, modals Themes Styles View System Drag & Drop Layout Manager responsive grid SVG, Canvas Theming computed styles Templating iterations, conditionals Visual Efects animations, flters Localization locale support WAI - ARIA Logic & Data Data Binding 1-way, 2-way State Manager Modularity components, modules Web Timing API Data Objects queues, hashtables Data Models & Stores group, sort, validate Local Storage, Indexed DB, App-cache Video, Audio, WebGL Bootstrap Functionality Map When we map out functionality for the other popular frameworks (on the following pages), we see that all of them concentrate mostly on structuring application logic rather than managing the interface. Most of them assume that youll be writing your view management and interface elements yourself. An alternative approach is to assemble the full stack from various libraries. While this provides the most customized solution, there are a number of problems with this strategy. Without a common architecture or coding style, testing and maintaining the stack becomes diffcult. Each library can bring a subtly different interpretation of ostensibly similar functionality. And most important, the development team will face multiple release cycles that are unsynchronized with each other. Not to mention the risk that a vital piece of the stack will be abandoned by its maintainer. With AngularJS applications that want to use d3 for visualization, for example, developers face a completely different data binding approach, lack the ability to share a theme, and have no common object model or class system, making it extremely diffcult to synchronize changes in grids and charts. Its easy to see how such solutions can become franken-frameworks. 12 1700 Seaport Blvd. Suite 120, Redwood City, CA 94063 1 (800) 2122802 www.sencha.com @sencha Figure 7: Support Key Server i/o Server Method Invocation Server Calls asynch, conversion None / HTML5 Partial Complete Sockets Server Notifcations Interface Elements Compound Widgets trees, grids, gauges Basic Widgets buttons, bars, text felds Visualizations charts, infographics Containers & Windows panels, cards, modals Themes Styles View System Drag & Drop Layout Manager responsive grid SVG, Canvas Theming computed styles Templating iterations, conditionals Visual Efects animations, flters Localization locale support WAI - ARIA Logic & Data Data Binding 1-way, 2-way State Manager Modularity components, modules Web Timing API Data Objects queues, hashtables Data Models & Stores group, sort, validate Local Storage, Indexed DB, App-cache Video, Audio, WebGL AngularJS Functionality Map Figure 8: Support Key Server i/o Server Method Invocation Server Calls asynch, conversion None / HTML5 Partial Complete Sockets Server Notifcations Interface Elements Compound Widgets trees, grids, gauges Basic Widgets buttons, bars, text felds Visualizations charts, infographics Containers & Windows panels, cards, modals Themes Styles View System Drag & Drop Layout Manager responsive grid SVG, Canvas Theming computed styles Templating iterations, conditionals Visual Efects animations, flters Localization locale support WAI - ARIA Logic & Data Data Binding 1-way, 2-way State Manager Modularity components, modules Web Timing API Data Objects queues, hashtables Data Models & Stores group, sort, validate Local Storage, Indexed DB, App-cache Video, Audio, WebGL Backbone.js functionality map 13 1700 Seaport Blvd. Suite 120, Redwood City, CA 94063 1 (800) 2122802 www.sencha.com @sencha Figure 9: Support Key Server i/o Server Method Invocation XHR asynch, conversion None / HTML5 Partial Complete Sockets Server Notifcations Interface Elements Compound Widgets trees, grids, gauges Basic Widgets buttons, bars, text felds Visualizations charts, infographics Containers & Windows panels, cards, modals Themes Styles View System Drag & Drop Layout Manager responsive grid SVG, Canvas Theming computed styles Templating iterations, conditionals Visual Efects animations, flters Localization RTL, locale support Accessibility focus manager, ARIA Logic & Data Data Binding 1-way, 2-way State Manager Modularity components, modules Web Timing API Data Objects queues, hashtables Data Models & Stores group, sort, validate Local Storage, Indexed DB, App-cache Video, Audio, WebGL jQuery + jQueryUI Functionality Map Figure 10: Support Key Server i/o Server Method Invocation XHR asynch, conversion None / HTML5 Partial Complete Sockets Server Notifcations Interface Elements Compound Widgets trees, grids, gauges Basic Widgets buttons, bars, text felds Visualizations charts, infographics Containers & Windows panels, cards, modals Themes Styles View System Drag & Drop Layout Manager responsive grid SVG, Canvas Theming computed styles Templating iterations, conditionals Visual Efects animations, flters Localization RTL, locale support Accessibility focus manager, ARIA Logic & Data Data Binding 1-way, 2-way State Manager history, routes Modularity components, modules Testing IOC, test hooks Data Objects queues, hashtables Data Models & Stores group, sort, validate Local Storage, Indexed DB, App-cache Video, Audio, WebGL Ember Functionality Map 14 1700 Seaport Blvd. Suite 120, Redwood City, CA 94063 1 (800) 2122802 www.sencha.com @sencha The Ext JS Stack Compared to the libraries and toolsets weve just seen, Ext JS provides a more complete framework. It offers a very broad selection of basic and compound widgets (over 150), a high level visualization package as well as a lower level drawing API; a rich package of containers and themes, and a well-thought-out view system. It also offers an architectural package for MVVM and MVC, ARIA support, RTL support and more, all with a single coding style. Field-proven in the enterprise and ISV markets over the past fve years, all these capabilities are engineered and tested to work together, professionally maintained and updated in a synchronized fashion, and backed by a customer support team. Figure 11: Support Key Server i/o Server Method Invocation Server Calls asynch, conversion None / HTML5 Partial Complete Sockets extension Server Notifcations Interface Elements Compound Widgets trees, grids, gauges Basic Widgets buttons, bars, text felds Visualizations charts, infographics Containers & Windows panels, cards, modals Themes Styles View System Interactions gestures, drag & drop Layout Manager absolute, fex Drawing vector, bitmap Theming computed styles Templating iterations, conditionals Visual Efects animations, flters Localization RTL, locale support Accessibility focus manager, ARIA Logic & Data Data Binding 1-way, 2-way State Manager history, routes Modularity components, modules Testing IOC, test hooks Data Objects queues, hashtables Data Models & Stores group, sort, validate Persistent Data extension Multimedia 3D, audio, video Figure 11: Ext JS Functionality Map In fact, in the few places where Ext JS lacks functionality, the framework enables your development team to extend it in ways that allow your code and the framework code to work together. For example, if the built-in layouts dont cover your design case, you can write new layouts, and the new layouts will behave exactly as a built-in layout. Also, there are a wide variety of themes, compound widgets and other extensions available from Sencha partners on the Sencha Market website. Whether you use standard components, extend the standard components yourself, or use extensions from Sencha Market, you always get predictable results, and this makes application development, testing, and maintenance much simpler. Its also worth pointing out a few areas where alternatives really dont provide good options. Ext JS offers a great selection of data classes like key-value stores and hashmaps. Ext JS also provides good state management at the data level, allowing transaction-like behavior through the session class. Ext JS not only helps developers to manage application data, but also gives them powerful tools for enabling users to interact with data to make timely business decisions. For example, the Ext JS data grid is a best-in-class compound widget for high 15 1700 Seaport Blvd. Suite 120, Redwood City, CA 94063 1 (800) 2122802 www.sencha.com @sencha performance, sortable, flterable presentation of large datasets in a tabular format. These data management and presentation capabilities are especially important in organizations that build data-centric applications for users, such as highly expressive analytical applications and reliable transaction processing systems. Areas for Growth and Development Its worth noting that no framework currently offers good support for management of audio and video playback or server notifcations, relying instead on the basic HTML5 capabilities in these areas. In addition, although there are a small number of WebGL libraries available for 3D graphics rendering (including PhiloGL from Sencha Labs), mainstream offerings have given little attention to this functionality. One important area not covered in our framework functionality maps is browser support. Many frameworks have an evergreen support model for only the most modern browsers. This clearly makes it easier for open source projects and vendors to build and test their products, but for many organizations, support for only the most recent versions of browsers is entirely inadequate. In contrast, Ext JS supports the broadest range of browsers of any framework, including support back to Internet Explorer 8. The Right Technology Stack Your choice of front-end technology stack depends on the type of applications you want to build and the nature of your organization whether a one-person freelance shop or a Fortune 500 development organization. Although not perfect, we hope that this taxonomy of front-end technologies has shed light on the various building blocks of a front-end development stack, and illuminated where some of the most popular alternatives provide functionality and where they lack. If you found this information useful and would like to discuss your alternatives with Sencha, please contact us. Wed be happy to discuss your choices. Learn More For more information about how Sencha can help you leverage HTML5, visit www.sencha.com. You can also: Talk with other web developers and Sencha experts on our developer forums www.sencha.com/forum Sign up for training sessions on our frameworks and tools to jump-start development www.sencha.com/training