This is an automated email from the ASF dual-hosted git repository. joshtynjala pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/royale-docs.git
commit 98bfbb164da94946f76493b2abe871cab102f218 Author: Josh Tynjala <[email protected]> AuthorDate: Thu Aug 21 15:31:17 2025 -0700 general formatting --- component-sets/jewel.md | 2 +- create-an-application.md | 2 +- .../optimizations/compiler-configuration-settings.md | 2 +- create-an-application/optimizations/minification.md | 2 +- features/as3.md | 6 ++++-- features/as3/actionscript-vs-typescript.md | 12 ++++++------ features/as3/classes-and-functions.md | 2 +- features/as3/interfaces.md | 2 +- features/as3/language-basics.md | 7 ++++--- features/as3/xml.md | 6 +++--- features/modules.md | 2 +- libraries/compiled-code-libraries.md | 2 +- libraries/crux/dependency-injection.md | 2 +- welcome/what-is-royale.md | 10 +++++----- welcome/why-royale.md | 10 +++++----- 15 files changed, 36 insertions(+), 33 deletions(-) diff --git a/component-sets/jewel.md b/component-sets/jewel.md index 1d90736..2cdfa20 100644 --- a/component-sets/jewel.md +++ b/component-sets/jewel.md @@ -48,7 +48,7 @@ Jewel works on the following browser and device versions: Thanks to [Browserstack](https://www.browserstack.com){:target='_blank'} we created the list of minimum browser versions (*) where Apache Royale Jewel works consistently -## Generated Javascript Output +## Generated JavaScript Output For the browsers, Apache Royale generates [ECMAScript version 5 (ES5)](https://en.wikipedia.org/wiki/ECMAScript) standard JavaScript to ensure applications are compatible with a wide range of available browsers, including Microssoft Internet Explorer 11 (IE11). diff --git a/create-an-application.md b/create-an-application.md index e8de64a..2dcda54 100644 --- a/create-an-application.md +++ b/create-an-application.md @@ -32,7 +32,7 @@ This document is divided into several sections: [Application Tutorial](create-an-application/application-tutorial) is a step-by-step example of building an application. -[Migrate an Existing App](migrate-an-existing-app) provides strategies and techniques when migrating existing Flex apps to Royale, and how to switch to Royale if you already have a Javascript application. +[Migrate an Existing App](migrate-an-existing-app) provides strategies and techniques when migrating existing Flex apps to Royale, and how to switch to Royale if you already have a JavaScript application. [Security](create-an-application/security) provides more information about making sure hackers can't use your app to be malicous and about dealing with common security restrictions when your app wants to access external resources. diff --git a/create-an-application/optimizations/compiler-configuration-settings.md b/create-an-application/optimizations/compiler-configuration-settings.md index 8c00fff..d785a08 100644 --- a/create-an-application/optimizations/compiler-configuration-settings.md +++ b/create-an-application/optimizations/compiler-configuration-settings.md @@ -40,7 +40,7 @@ You can provide these settings\ on the command line or via royale-config.xml, or ## Definitions: -**AVM:** Actionscript Virtual Machine. You can also broadly interpret this to mean 'SWF at runtime', the 'flash player' or 'Adobe AIR runtime'. +**AVM:** ActionScript Virtual Machine. You can also broadly interpret this to mean 'SWF at runtime', the 'flash player' or 'Adobe AIR runtime'. ## Default initializers {#default-initializers} diff --git a/create-an-application/optimizations/minification.md b/create-an-application/optimizations/minification.md index 01629d2..84532e3 100644 --- a/create-an-application/optimizations/minification.md +++ b/create-an-application/optimizations/minification.md @@ -16,7 +16,7 @@ layout: docpage title: Minification -description: Options and considerations for minimized Javascript output +description: Options and considerations for minimized JavaScript output permalink: /create-an-application/optimizations/minification --- # Minification diff --git a/features/as3.md b/features/as3.md index ae5d711..1f4aca4 100644 --- a/features/as3.md +++ b/features/as3.md @@ -55,8 +55,10 @@ package org.apache.royale This document is divided into several sections: -[Metadata](features/as3/metadata) describe the Metadata decorations that can be used for variables and functions. -[Code Conventions](features/as3/code-conventions) explains the typical ways Royale developers name files, classes, function, variables and more. +- [Classes and functions](features/as3/classes-and-functions) explains how to define classes for representing objects and how to define methods on those classes. +- [Packages](features/as3/packages) explains how to organize code into packages using the `package` syntax. +- [Metadata](features/as3/metadata) describes the metadata decorations that can be used for variables and functions. +- [Code Conventions](features/as3/code-conventions) explains the typical ways Royale developers name files, classes, function, variables and more. ## New ActionScript language features in Royale diff --git a/features/as3/actionscript-vs-typescript.md b/features/as3/actionscript-vs-typescript.md index e583665..bb41878 100644 --- a/features/as3/actionscript-vs-typescript.md +++ b/features/as3/actionscript-vs-typescript.md @@ -27,21 +27,21 @@ Differences between ActionScript and Typescript *Warning: This document is a work-in-progress/undergoing review.* ## ActionScript has a different goal than Typescript -Typescript [states their goals](https://github.com/Microsoft/TypeScript/wiki/TypeScript-Design-Goals) as providing compile type type safety and conforming to the Javascript spec supporting all features. Typescript does not provide runtime type safety or any tools beyond compile time types. +Typescript [states their goals](https://github.com/Microsoft/TypeScript/wiki/TypeScript-Design-Goals) as providing compile type type safety and conforming to the JavaScript spec supporting all features. Typescript does not provide runtime type safety or any tools beyond compile time types. Royale's goals are different. It provides a complete development environment. That includes the ActionScript language, debugging tools, a complete UI framework and both debug and deployment compiling. -While Royale give very high priority to performance, our philosophy is that besides compile time type safety, runtime type safety is important too. By providing certain runtime guarantees, a certain class of Javascript bugs disappear. (More details to follow...) +While Royale give very high priority to performance, our philosophy is that besides compile time type safety, runtime type safety is important too. By providing certain runtime guarantees, a certain class of JavaScript bugs disappear. (More details to follow...) ## Testing equality -In Javascript, strict equality is recommended (i.e. `===`) instead of "normal" equality (i.e. `==`). That's because Javascript automatically does a type coercion before comparing equality and can cause unexpected results. +In JavaScript, strict equality is recommended (i.e. `===`) instead of "normal" equality (i.e. `==`). That's because JavaScript automatically does a type coercion before comparing equality and can cause unexpected results. Royale generally does not have these problems and bugs caused by using `==` are extremely rare. That's because types are enforced at _runtime_ time and uncertain values are automatically coerced when assigning the values. Normal equality has advantages and can be used for automatically evaluating certain types (such as `XML`). Therefore the general recommendation in ActionScript and Royale is to use `==` instead of `===`. The exception to this rule is if you are using untyped variables (i.e. `*`) and need to test for `undefined` to the exclusion of `null`. In that case you need `foo.baz === undefined`. ## Strings and Numbers -Strings and numbers in Javascript can either be literal primitives (i.e. `foo`, `3.14`) or classes (i.e. `new String("foo")`, `new Number(3.14)`). These are two distinct types in Javascript and in turn in Typescript. In Typescript, you would declare the former using `string` and `number`, while the latter would be `String` and `Number`. Trying to mix the two in Typescript will cause warnings. +Strings and numbers in JavaScript can either be literal primitives (i.e. `foo`, `3.14`) or classes (i.e. `new String("foo")`, `new Number(3.14)`). These are two distinct types in JavaScript and in turn in Typescript. In Typescript, you would declare the former using `string` and `number`, while the latter would be `String` and `Number`. Trying to mix the two in Typescript will cause warnings. ActionScript does not differentiate between the two types. Both types use the Uppercase notation, so you have `String` and `Number`, but no `string` or `number` `'foo' is String` and `new String("foo") is String` both resolve to true in ActionScript. If you try to use strict equality on the two (i.e. `===`), it will fail, but if you use the standard ActionScript practices, you don't need to worry about whether strings and numbers are literals or not. @@ -50,9 +50,9 @@ Typed arrays is an important piece in declaring types. ActionScript does not cur ## XML -Dealing with XML in Javascript is difficult at best. Many people try to bash XML in defence of Javascript's poor XML support. That's not very helpful if you have a legitimate use for XML. +Dealing with XML in JavaScript is difficult at best. Many people try to bash XML in defence of JavaScript's poor XML support. That's not very helpful if you have a legitimate use for XML. -In 2004 and 2005, [Ecma published ECMA-357](https://www.ecma-international.org/publications-and-standards/standards/ecma-357/) which was a spec for handling XML in Javascript. The spec was called E4X (Ecmascript for XML). This was adopted by Firefox and ActionScript. Unfortunately it was not adopted by Chrome, so it never became a Javascript standard. Royale supports the full E4X spec and XML is treated as a first class citizen in Royale. This makes dealing with XML **much** easier. Read [...] +In 2004 and 2005, [Ecma published ECMA-357](https://www.ecma-international.org/publications-and-standards/standards/ecma-357/) which was a spec for handling XML in JavaScript. The spec was called E4X (Ecmascript for XML). This was adopted by Firefox and ActionScript. Unfortunately it was not adopted by Chrome, so it never became a JavaScript standard. Royale supports the full E4X spec and XML is treated as a first class citizen in Royale. This makes dealing with XML **much** easier. Read [...] Royale also has a lightweight [JXON](https://royale.apache.org/asdoc/#!org.apache.royale.utils/JXON) class which can be useful for simple reading of XML if you don't need all the functionality of E4X. diff --git a/features/as3/classes-and-functions.md b/features/as3/classes-and-functions.md index beedf93..477dca0 100644 --- a/features/as3/classes-and-functions.md +++ b/features/as3/classes-and-functions.md @@ -61,7 +61,7 @@ Using `this` is usually optional in ActionScript. If there is no local variable Similarly, static accessors and methods can be referenced without using the class name, so `baz()` will be resolved to `Foo.baz()` automatically. If you are using a public static method (or accessor) outside the class that you will need to explicitly call `Foo.baz()`. ## Using `this` inside functions -A common problem in Javascript is that `this` is lost within functions. ActionScript does not have this issue. You can freely use `this` inside instance methods. If the function is used as a callback, the compiler will automatically wrap the function to resolve `this` at runtime. +A common problem in JavaScript is that `this` is lost within functions. ActionScript does not have this issue. You can freely use `this` inside instance methods. If the function is used as a callback, the compiler will automatically wrap the function to resolve `this` at runtime. In Royale, it's generally not recommended to use `this` inside non-instance methods and functions. In fact that compiler will warn you by default if you do. Generally, the only case where it's necessary to use `this` inside a function in Royale is if you need `Object.defineProperty` for some reason, and even that should be very rare. The `org.apache.royale.utils.object` package has a number of utility functions for helping to define properties without using `this`. Namely: `defineGetter` [...] diff --git a/features/as3/interfaces.md b/features/as3/interfaces.md index ea400b0..d8df8b7 100644 --- a/features/as3/interfaces.md +++ b/features/as3/interfaces.md @@ -32,7 +32,7 @@ Interfaces *do not* have to declare anything. You can declare an interface type ## What can you declare in interfaces? Interfaces do not define *scope*. You don't declare something public. Also, interfaces are only for *methods*. You cannot declare variables in an interface. You *can* (and should) declare getter and/or setters in interfaces, but those must be implemented in your classes as getter and setter functions and not vars. -Interfaces *must* be implemented as classes. You cannot declare an interface for a plain Javascript object like you can in [Typescript](https://www.typescriptlang.org/docs/handbook/2/objects.html). +Interfaces *must* be implemented as classes. You cannot declare an interface for a plain JavaScript object like you can in [Typescript](https://www.typescriptlang.org/docs/handbook/2/objects.html). (Almost) never reference classes in an interface. If the interface needs to accept or return a type, use an interface. Pretty much the only exception to this rule is for native types such as `String`, `Number`, `int`, `XML`, etc. diff --git a/features/as3/language-basics.md b/features/as3/language-basics.md index ee7d3b9..29b0b00 100644 --- a/features/as3/language-basics.md +++ b/features/as3/language-basics.md @@ -24,9 +24,10 @@ permalink: /features/as3/language-basics Language basics in ActionScript 3 -ActionScript is a superset of the ecma 4 spec. That gives it the same roots as Javascript and code will look very similar. The biggest difference is the optionally typed quality of ActionScript, and classes. Ecma 6 added classes to Javascript as well, but Javascript classes are less structured that ActionScript classes. +ActionScript is a superset of the ECMAScript edition 4 specification. That gives it the same roots as JavaScript and code will look very similar. The biggest difference is the optionally typed quality of ActionScript, and classes. Ecma 6 added classes to JavaScript as well, but JavaScript classes are less structured that ActionScript classes. + +Because ActionScript was forked from the ECMAScript specification at version 4, there are features that JavaScript has which are missing from ActionScript and vice versa. Below is an overview of the main ActionScript features. -Because ActionScript was forked from the ecma spec at version 4, there are features that Javascript has which are missing from ActionScript and vice versa. Below is an overview of the main ActionScript features. ## Scope There are four levels of access scope in ActionScript: @@ -45,7 +46,7 @@ There are three basic accessor types in ActionScript 2. var 3. const -ActionScript does not support arrow functions or `let`. The use of the three accessor types are similar to Javascript. +ActionScript does not support arrow functions or `let`. The use of the three accessor types are similar to JavaScript. ## Instance and Class Accessors By default any accessors of a class are instance accessors. For class-level methods, vars and const, you need to add the `static` modifier. For more details [read about static accessors in classes](features/as3/classes-and-functions#static-accessors). diff --git a/features/as3/xml.md b/features/as3/xml.md index 2170bf9..a161dfb 100644 --- a/features/as3/xml.md +++ b/features/as3/xml.md @@ -28,9 +28,9 @@ XML in ActionScript 3 ActionScript has support for XML as a native type. ## Some history -In 2004 and 2005, [Ecma published ECMA-357](https://www.ecma-international.org/publications-and-standards/standards/ecma-357/) which was a spec for handling XML in Javascript. The spec was called E4X (Ecmascript for XML). This was adopted by Firefox (SpiderMonkey) and ActionScript. Unfortunately [it was not adopted by Chrome](https://bugs.chromium.org/p/v8/issues/detail?id=235), so it never became a Javascript standard. +In 2004 and 2005, [Ecma published ECMA-357](https://www.ecma-international.org/publications-and-standards/standards/ecma-357/) which was a spec for handling XML in JavaScript. The spec was called E4X (Ecmascript for XML). This was adopted by Firefox (SpiderMonkey) and ActionScript. Unfortunately [it was not adopted by Chrome](https://bugs.chromium.org/p/v8/issues/detail?id=235), so it never became a JavaScript standard. -Today, E4X lives on in ActionScript, Adobe's ExtendScript and [Rhino Javascript](http://mozilla.github.io/rhino/). +Today, E4X lives on in ActionScript, Adobe's ExtendScript and [Rhino JavaScript](http://mozilla.github.io/rhino/). ## Types The XML spec defines 4 additonal types @@ -53,7 +53,7 @@ E4X also allows filtering. Let's say you want to get only children who's name is Because XML and E4X is not supported natively by the browser, some E4X code needs to be rewritten by the compiler. For this to work, the compiler needs to know that an object is XML. For this reason it's very important to be consistent about declaring XML types in Royale. Particular care should be taken if you have an array of XML objects to either use `Vector`, declare a local variable (i.e. `var item:XML = arr[i]`) or use function access instead of E4X syntax. To further clarify: `myUn [...] ## Optimization -We have done a lot of work to make XML and E4X as performant as possible. It's being used in production of applications with a lot of XML data without issues. However the E4X spec can sometimes lend itself to code which creates a lot of extra work for the Javascript engine. +We have done a lot of work to make XML and E4X as performant as possible. It's being used in production of applications with a lot of XML data without issues. However the E4X spec can sometimes lend itself to code which creates a lot of extra work for the JavaScript engine. It's also possible to end up in situations where large amounts of XML are stored in memory. If there's a reference to a single XML node anywhere, the entire tree cannot be garbage collected. diff --git a/features/modules.md b/features/modules.md index d9ea53e..3d7d38d 100644 --- a/features/modules.md +++ b/features/modules.md @@ -47,7 +47,7 @@ There is an example for [Basic](component-sets/basic) UI Set [here](https://gith Proper use of modules can help maintain _"separation of concerns"_ which helps keep you from writing _"spaghetti code"_. If only the code in one module changes, only that module needs to be recompiled. And if that code isn't needed to show the first screen, then the application might start up faster if that module is loaded only when it is needed. ## Why not modules? {#why-not-modules} -In Flash, modules was very important. That's because application size and compilation time grew very rapidly. Flash applications were slow to load and modules were a good tool to help with that. The aggressive use of [PAYG](features/payg) in Royale along with browser features for loading Javascript made Royale applications much smaller and load times generally nearly instant. In many or most use cases of modules for Flex applications in Flash, Royale renders them unnecessary. +In Flash, modules was very important. That's because application size and compilation time grew very rapidly. Flash applications were slow to load and modules were a good tool to help with that. The aggressive use of [PAYG](features/payg) in Royale along with browser features for loading JavaScript made Royale applications much smaller and load times generally nearly instant. In many or most use cases of modules for Flex applications in Flash, Royale renders them unnecessary. Using modules can make development more difficult and in many cases cause your application to actually load _**slower**_. Before using modules, consider the following points: diff --git a/libraries/compiled-code-libraries.md b/libraries/compiled-code-libraries.md index 7b5f12d..389d633 100644 --- a/libraries/compiled-code-libraries.md +++ b/libraries/compiled-code-libraries.md @@ -257,7 +257,7 @@ Note the important pieces in the config: ``` ## Building the library -Your asconfig.json file should look like this the file below. You can use any standard compiler options you need and you can also include `SWF` in the targets section, but if you are only targeting Javascript, it's not necessary. +Your asconfig.json file should look like this the file below. You can use any standard compiler options you need and you can also include `SWF` in the targets section, but if you are only targeting JavaScript, it's not necessary. ``` { diff --git a/libraries/crux/dependency-injection.md b/libraries/crux/dependency-injection.md index 28a5818..d52fd96 100644 --- a/libraries/crux/dependency-injection.md +++ b/libraries/crux/dependency-injection.md @@ -49,7 +49,7 @@ Due to restrictions imposed by runtimes, Crux cannot inject into `private`, `pro By default, injections in view components happen during the `ADDED_TO_STAGE` event. <!--This behavior can be modified by changing the Crux configuration.--> It is important to understand that this means that injections occur after the <!--CREATION_COMPLETE-->`initComplete` event. If you need to trigger logic during creation that depends on injections, use a `[PostConstruct]` method. -> Note: `ADDED_TO_STAGE` is a SWF event. In __Javascript__ you need to add a [bead](features/strands-and-beads) to your Application beads called `JSStageEvents` to simulated stage events like `ADDED_TO_STAGE` or 'REMOVED_FROM_STAGE` +> Note: `ADDED_TO_STAGE` is a SWF event. In __JavaScript__ you need to add a [bead](features/strands-and-beads) to your Application beads called `JSStageEvents` to simulated stage events like `ADDED_TO_STAGE` or 'REMOVED_FROM_STAGE` ## Inject by type {#inject-by-type} diff --git a/welcome/what-is-royale.md b/welcome/what-is-royale.md index ade8680..360b96c 100644 --- a/welcome/what-is-royale.md +++ b/welcome/what-is-royale.md @@ -16,20 +16,20 @@ layout: docpage title: What is Royale -description: How Royale fits into the Javascript ecosystem +description: How Royale fits into the JavaScript ecosystem permalink: /welcome/what-is-royale --- # What is Royale? -How Royale fits into the Javascript ecosystem +How Royale fits into the JavaScript ecosystem When evaluating a framework or project, the first question you might ask is how is it the same or different as "x". How does this relate to other options? This document attempts to answer those questions. ## It's a language -At the heart of [Apache Royale](https://royale.apache.org/), it's a language. Royale is the current shepherd of the ActionScript programming language. The most obvious language you would compare ActionScript to would be Typescript. The general goals of both are similar -- to add type protection for an ECMA language. There are differences between the approach taken by Typescript and ActionScript [which are discussed on a dedicated page](features/as3/actionscript-vs-typescript). +At the heart of [Apache Royale](https://royale.apache.org/), it's a language. Royale is the current shepherd of the ActionScript programming language. The most obvious language you would compare ActionScript to would be Typescript. The general goals of both are similar -- to add type protection for an ECMAScript language. There are differences between the approach taken by Typescript and ActionScript [which are discussed on a dedicated page](features/as3/actionscript-vs-typescript). ## It's a compiler -Royale compiles ActionScript for multiple run-times. The ActionScript compiler is an important piece of Royale. Currently, the targets are for Flash (mostly AIR applications today) and Javascript applications. However the architecture was designed to be platform agnostic and other native platforms can be targeted in the future. +Royale compiles ActionScript for multiple run-times. The ActionScript compiler is an important piece of Royale. Currently, the targets are for Flash (mostly AIR applications today) and JavaScript applications. However the architecture was designed to be platform agnostic and other native platforms can be targeted in the future. ## It's a bundler You might compare Royale to Webpack, ES Build or Parcel. Royale compiles your app both for debugging and into a single JS file for deployment. @@ -45,7 +45,7 @@ Royale tries to offset this by making a lot of functionality built in, so there' Libraries can be included in Royale projects. These are included as SWC files. The SWC files need to be compiled using Royale, but much open source ActionScript code can be compiled with little or no work for Royale. ## It's a framework -You might compare Royale to React, Angular or Vue. Royale gives you the building blocks to create complex Javascript applications using both declarative and imperative code. Royale differs from most frameworks in that it's very un-opinionated about **how** you build your apps. How you control state is up to you. Royale is also laser focused on performance. Read about [PAYG](features/payg) and [Beads](features/strands-and-beads) to learn more about the solutions we take to common problems. +You might compare Royale to React, Angular or Vue. Royale gives you the building blocks to create complex JavaScript applications using both declarative and imperative code. Royale differs from most frameworks in that it's very un-opinionated about **how** you build your apps. How you control state is up to you. Royale is also laser focused on performance. Read about [PAYG](features/payg) and [Beads](features/strands-and-beads) to learn more about the solutions we take to common problems. Royale tries to be as close to "vanilla" code as possible while giving you the tools you need when and where you need them. diff --git a/welcome/why-royale.md b/welcome/why-royale.md index 7e2d293..392fa0b 100644 --- a/welcome/why-royale.md +++ b/welcome/why-royale.md @@ -34,16 +34,16 @@ Flex has run huge enterprise applications and Royale sits on that experience. Or ## Safe Royale is backed by Apache and offers the peace of mind knowing that Apache processes govern Royale's releases. -## Javascript. Fixed! -Javascript is great, but it has a lot of weird parts. ActionScript and Royale fixes the problematic parts of Javascript: +## JavaScript. Fixed! +JavaScript is great, but it has a lot of weird parts. ActionScript and Royale fixes the problematic parts of JavaScript: - Unexpected type conversions are a thing of the past. Royale offers runtime type safety you will not find anywhere else. - You don't need to be concerned with scope of "this". Functions are automatically bound to the correct scope and behave predictably. - Inspectable types at runtime. Do you need to check for classes and interfaces at runtime? With Royale you can! - Runtime type casting. Do you want your code to fail early if an unexpected type is used? With Royale you can. - No more Number problems. Royale has true ints and uints. By declaring your types, you can be sure that your variables will not be converted to floating point numbers at runtime. -- Improved loops. Don't like writing loops in Javascript? Find it hard to remember the difference between `for in` and `for of`? Royale has a more intuitive loop syntax: `for each(item in array)`. While this is similar to `for of`, the `for each` syntax in ActionScript supports all Javascript run-times including Internet Explorer. -- Native XML support. Royale applications support the full ECMA E4X spec not generally supported by modern browsers today. +- Improved loops. Don't like writing loops in JavaScript? Find it hard to remember the difference between `for in` and `for of`? Royale has a more intuitive loop syntax: `for each(item in array)`. While this is similar to `for of`, the `for each` syntax in ActionScript supports all JavaScript run-times including Internet Explorer. +- Native XML support. Royale applications support the full E4X (ECMAScript for XML) spec not generally supported by modern browsers today. ## Unopinionated If you are using a framework, chances are you have been fighting to get the framework to do what you want. You searched Stack Overflow, only to be told, "You're doing it wrong. You need to use Framework "x" exactly like so!" @@ -59,7 +59,7 @@ In Royale, we don't tell you how to build your applications. In short, Royale gives you the tools you need and gives you some examples of what they can do, but doesn't tell you how you have to use them. ## Fast! -Most frameworks try to get as close to vanilla JavaScript as they can. In Royale we try to be _faster_ than vanilla JavaScript. In most cases Royale will _beat_ the best performance you can squeeze out of native HTML and Javascript. That's because Royale only uses the DOM when necessary and we never do any kind of DOM syncing or traversal. +Most frameworks try to get as close to vanilla JavaScript as they can. In Royale we try to be _faster_ than vanilla JavaScript. In most cases Royale will _beat_ the best performance you can squeeze out of native HTML and JavaScript. That's because Royale only uses the DOM when necessary and we never do any kind of DOM syncing or traversal. ## Zero configuration necessary Out of the box, Royale will build both debug and release builds of your application. You don't need any external tools to package "tree shake" or what-have-you.
