Optimizing Angular Applications with Ahead-of-Time (AOT) Compilation
Best practices for utilizing AOT compilation to improve performance and reduce runtime errors in Angular applications.
0 likes
206 views
Rule Content
{
"title": "Optimizing Angular Applications with Ahead-of-Time (AOT) Compilation",
"description": "Best practices for utilizing AOT compilation to improve performance and reduce runtime errors in Angular applications.",
"category": "Angular Cursor Rules",
"rules": [
{
"name": "Enable AOT Compilation",
"description": "Ensure AOT compilation is enabled in your Angular project to enhance performance and detect template errors at build time.",
"implementation": [
{
"type": "file",
"pattern": "angular.json",
"checks": [
{
"type": "json",
"path": "$.projects.*.architect.build.configurations.production.aot",
"expected": true,
"message": "AOT compilation should be enabled in the production build configuration."
}
]
}
]
},
{
"name": "Test with AOT Compilation",
"description": "Regularly test your application with AOT compilation to catch and resolve template binding errors early.",
"implementation": [
{
"type": "command",
"command": "ng serve --aot",
"message": "Run 'ng serve --aot' to test your application with AOT compilation."
}
]
},
{
"name": "Use Pure Component Methods",
"description": "Ensure that methods called from templates are pure and free of side effects to maintain predictable behavior.",
"implementation": [
{
"type": "code",
"language": "typescript",
"pattern": ".*\\.component\\.ts$",
"checks": [
{
"type": "function",
"criteria": "methods called from templates should not modify component state or perform side effects",
"message": "Methods used in templates should be pure and free of side effects."
}
]
}
]
},
{
"name": "Avoid Dynamic HTML Generation",
"description": "Use Angular's structural directives like *ngIf and *ngFor instead of dynamically generating HTML to improve performance and maintainability.",
"implementation": [
{
"type": "code",
"language": "html",
"pattern": ".*\\.component\\.html$",
"checks": [
{
"type": "regex",
"pattern": "<script>|<style>|document\\.write\\(",
"not": true,
"message": "Avoid using <script>, <style>, or document.write() in templates; use Angular's structural directives instead."
}
]
}
]
},
{
"name": "Declare All Template Variables",
"description": "Ensure all properties and methods used in templates are properly declared in the corresponding component to prevent runtime errors.",
"implementation": [
{
"type": "code",
"language": "typescript",
"pattern": ".*\\.component\\.ts$",
"checks": [
{
"type": "variable",
"criteria": "all variables and methods used in the template should be declared in the component class",
"message": "Declare all template variables and methods in the component class."
}
]
}
]
},
{
"name": "Enable Strict Type Checking",
"description": "Enable strict type checking in your Angular project to catch potential errors during development.",
"implementation": [
{
"type": "file",
"pattern": "tsconfig.json",
"checks": [
{
"type": "json",
"path": "$.angularCompilerOptions.strictTemplates",
"expected": true,
"message": "Strict template type checking should be enabled in tsconfig.json."
}
]
}
]
},
{
"name": "Use Lazy Loading for Modules",
"description": "Implement lazy loading for feature modules to reduce initial load time and improve application performance.",
"implementation": [
{
"type": "code",
"language": "typescript",
"pattern": ".*\\.routing\\.module\\.ts$",
"checks": [
{
"type": "regex",
"pattern": "loadChildren: \\(\\) => import\\('.*'\\)\\.then\\(m => m\\..*Module\\)",
"message": "Use lazy loading syntax for feature modules in routing configurations."
}
]
}
]
},
{
"name": "Optimize ngFor with trackBy",
"description": "Use the trackBy function with ngFor to optimize rendering performance by reducing unnecessary DOM manipulations.",
"implementation": [
{
"type": "code",
"language": "html",
"pattern": ".*\\.component\\.html$",
"checks": [
{
"type": "regex",
"pattern": "\\*ngFor=\"let .* of .*; trackBy: .*\"",
"message": "Ensure ngFor directives include a trackBy function to optimize rendering."
}
]
}
]
},
{
"name": "Avoid Unnecessary Imports",
"description": "Only import necessary modules and components to minimize the size of the compiled bundles and improve performance.",
"implementation": [
{
"type": "code",
"language": "typescript",
"pattern": ".*\\.module\\.ts$",
"checks": [
{
"type": "import",
"criteria": "import only the modules and components that are used in the module",
"message": "Remove unnecessary imports to reduce bundle size."
}
]
}
]
},
{
"name": "Sanitize User Inputs",
"description": "Use Angular's built-in sanitization functions to prevent XSS attacks and ensure application security.",
"implementation": [
{
"type": "code",
"language": "typescript",
"pattern": ".*\\.component\\.ts$",
"checks": [
{
"type": "function",
"criteria": "use Angular's DomSanitizer to sanitize user inputs before rendering",
"message": "Sanitize user inputs using Angular's DomSanitizer to prevent XSS attacks."
}
]
}
]
}
]
}