Let’s build clean and Scalable Angular application
The wait is over and Angular 7 is out, finally time has come to write about some tips to build fast angular application. In this blog i will share my experience with practices that you need to follow when you are starting a new project.
There are three primary things important when you are starting to build an application with Angular.
- Project Architecture
- Application Infrastructure
- Conventions,Formating and Tooling
CONVENTIONS,FORMATTING AND TOOLING
Always place the Angular application outside your backend code
Keep the application in its own repository so that can be deployed/version separately. It will also help in tooling. One key rule is to treat it as a real application.
Use VS Code for best experience
Encourage your team to switch to VS Code which has immense support for development with Angular. It has strong support for extensions used in Angular projects and well-regarded by front end community.
Naming and Syntax Conventions
Always use Singular for Modules and Singular or Plural for components/ services/ directives and pipes
Use Angular style commit messages
Use Codelyzer to do statistical analysis on Angular/Typescript code
Follow consistent structure
If you are using Angular-Cli always follow the same pattern to generate the necessary files so that it will be consistent throughout the application.
Absolute path for ES Modules
Do not use null and assign default values
In the templates always use safe navigation type operator which can help in preventing the following annoying errors “cannot read property “name” of undefined”
Choose Intelligent defaults and be consistent
Build small reusable components
Use trackBy in ngFor Loops
DOM manipulations are always expensive, immutable practices always generate a new collection which will result in bad performance. When your array changes, Angular will be rendering the whole DOM tree, when you use trackBy, it will know which elements has changed and will make changes only to those particular elements.
const vs let
Make use of let and const wherever its appropriate. It will help a lot in identifying issues when a value is reassigned to a constant accidentally with a compile error and it improves the readability of the code.
With Angular version above 5.5 , you can use pipeable operators which are tree-shakable (only the code need to execute will be included when they are imported) and it will be easy to identify unused code in the component files.
Subscribe in template
Clean up subscriptions
When you subscribe in the component to observables, make sure you unsubscribe from them completely with operators like take,takeUntil,Unsubscribe etc
Use appropriate Operators
switchMap: when you want to ignore the previous emissions when there is a new emission
mergeMap: when you want to concurrently handle all the emissions
concatMap: when you want to handle the emissions one after the other as they are emitted
exhaustMap: when you want to cancel all the new emissions while processing a previous emisssion
Stop using any:type everything in the code
Always declare variables or constants with a type other than any. This is the advantage that you have with Typescript when you have good typings in your application which makes refactoring easier and safe and also avoid unintented issues.
Use lint rules as you need
TSLINT has various options built-in already like no-any, no-magic-numbers, no-console, etc that you can configure in your tslint.json to enforce certain rules in your code base
Dont Repeat Yourself
One of the common mistake that i did as a developer was copy paste the same code in all components. Do not repeat or have the same code in different places in the code base. Extract the repeating code and make them as a generic method which could be used in different components.
Avoid Logic in component templates
Place the logic in the component file rather than on the template such as && condition since it cannot be possible to unit test also it is prone to more bugs when changing template code
Lazy load everything
Analyze your bundle
- npm install -g source-map-explorer
Build with source map
- ng build –prod -sm
Inspect your bundle
- source-map-explorer dist/vendor*.js
Use Debug.Service.ts to track errors
It is always good to have a common debug service to assist with the development. This service could replace the calls to console.log. You can use Visual studio extension codelensto track down the calls with console.log.This service can be toggled at run time with local storage value and needs to be switched off with production builds.
Use ES Modules for helper functions
Keep environment values in environment files
Avoid Base classes / Inheritance
Use Obseravable/State Management Patterns
More things to consider on Application
- One of the primary thing that you need to consider before starting a project is the architecture on how to build flexible,simple,fast application. It needs lot of planning and consistency to get the basement correct. Building things is really hard enough. When it comes to building Angular application i would recommend to follow the following Guidelines
- One best place to start with good practices is by following the recommended style guide. You need to take what works for your team and skip what does not work. Also try to learn from others mistakes or any other projects that you’ve already worked with.
- While designing module,s it is really important to know about how to structure your modules and what should go under Feature/Core/Shared Modules.
- Keep a flat file structure as long as possible which means you should not add hierarchy with less than 20 files and you can always move files as the app grows larger.
- Maintain your application version using the package.json which could be embedded in your app.
- Use package management tooling to guarantee reproducible dev environment and builds.
- Set custom host for the application by changing the default url.
- Use proxies if you are integrating with an API.
- Lets look at what you can do while implementing the above architecture in your application
Follow this repository in order to get started
The above are the some of the most important practices that you need to follow when you are starting a new project with Angular. Hope this helps someone out there.