mirror of https://github.com/abpframework/abp.git
Browse Source
Introduces a new community article detailing the availability of server-side rendering (SSR) for ABP Framework Angular applications. The article covers SSR benefits, setup instructions, supported configurations, integration details, and best practices.pull/24191/head
1 changed files with 166 additions and 0 deletions
@ -0,0 +1,166 @@ |
|||
# Announcing Server-Side Rendering (SSR) Support for ABP Framework Angular Applications |
|||
|
|||
We are pleased to announce that **Server-Side Rendering (SSR)** has become available for ABP Framework Angular applications! This highly requested feature brings major gains in performance, SEO, and user experience to your Angular applications based on ABP Framework. |
|||
|
|||
## What is Server-Side Rendering (SSR)? |
|||
|
|||
Server-Side Rendering refers to an approach which renders your Angular application on the server as opposed to the browser. The server creates the complete HTML for a page and sends it to the client, which can then show the page to the user. This poses many advantages over traditional client-side rendering. |
|||
|
|||
## Why SSR Matters for ABP Angular Applications |
|||
|
|||
### Improved Performance |
|||
- **Quicker visualization of the first contentful paint (FCP)**: Because prerendered HTML is sent over from the server, users will see content quicker. |
|||
- **Better perceived performance**: Even on slower devices, the page will be displaying something sooner. |
|||
- **Less JavaScript parsing time**: For example, the initial page load will not require parsing and executing a large bundle of JavaScript. |
|||
|
|||
### Enhanced SEO |
|||
- **Improved indexing by search engines**: Search engine bots are able to crawl and index your content quicker. |
|||
- **Improved rankings in search**: The quicker the content loads and the easier it is to access, the better your SEO score. |
|||
- **Preview when sharing on social channels**: Rich previews with the appropriate meta tags are generated when sharing links on social platforms. |
|||
|
|||
### Better User Experience |
|||
- **Support for low bandwidth**: Users with slower Internet connections will have a better experience |
|||
- **Progressive enhancement**: Users can start accessing the content before JavaScript has loaded |
|||
- **Better accessibility**: Screen readers and other assistive technologies can access the content immediately |
|||
|
|||
## Getting Started with SSR |
|||
|
|||
### Adding SSR to an Existing Project |
|||
|
|||
You can easily add SSR support to your existing ABP Angular application using the Angular CLI with ABP schematics: |
|||
|
|||
```bash |
|||
# Generate SSR configuration for your project |
|||
ng generate @abp/ng.schematics:ssr-add |
|||
|
|||
# Or using the short form |
|||
ng g @abp/ng.schematics:ssr-add |
|||
``` |
|||
|
|||
If you have multiple projects in your workspace, you can specify which project to add SSR to: |
|||
|
|||
```bash |
|||
ng g @abp/ng.schematics:ssr-add --project=my-project |
|||
``` |
|||
|
|||
If you want to skip the automatic installation of dependencies: |
|||
|
|||
```bash |
|||
ng g @abp/ng.schematics:ssr-add --skip-install |
|||
``` |
|||
|
|||
## What Gets Configured |
|||
|
|||
When you add SSR to your ABP Angular project, the schematic automatically: |
|||
|
|||
1. **Installs necessary dependencies**: Adds `@angular/ssr` and related packages |
|||
2. **Creates Server Configuration**: Creates `server.ts` and related files |
|||
3. **Updates Project Structure**: |
|||
- Creates `main.server.ts` to bootstrap the server |
|||
- Adds `app.config.server.ts` for standalone apps (or `app.module.server.ts` for NgModule apps) |
|||
- Configures server routes in `app.routes.server.ts` |
|||
4. **Updates Build Configuration**: updates `angular.json` to include: |
|||
- a `serve-ssr` target for local SSR development |
|||
- a `prerender` target for static site generation |
|||
- Proper output paths for browser and server bundles |
|||
|
|||
## Supported Configurations |
|||
|
|||
The ABP SSR schematic supports both modern and legacy Angular build configurations: |
|||
|
|||
### Application Builder (Suggested) |
|||
- The new `@angular-devkit/build-angular:application` builder |
|||
- Optimized for Angular 17+ apps |
|||
- Enhanced performance and smaller bundle sizes |
|||
|
|||
### Server Builder (Legacy) |
|||
- The original `@angular-devkit/build-angular:server` builder |
|||
- Designed for legacy Angular applications |
|||
- Compatible with legacy applications |
|||
|
|||
### Standalone Components |
|||
- Form-based 'standalone' application architecture |
|||
- Simpler application architecture (no NgModule) |
|||
- More effective tree-shaking and code splitting |
|||
|
|||
### NgModule-based Applications |
|||
- The classic NgModule architecture |
|||
- Supports full backward compatibility |
|||
- Migration enabled over time |
|||
|
|||
## Running Your SSR Application |
|||
|
|||
After adding SSR to your project, you can run your application in SSR mode: |
|||
|
|||
```bash |
|||
# Development mode with SSR |
|||
ng serve |
|||
|
|||
# Or specifically target SSR development server |
|||
npm run serve:ssr |
|||
|
|||
# Build for production |
|||
npm run build:ssr |
|||
|
|||
# Preview production build |
|||
npm run serve:ssr:production |
|||
``` |
|||
|
|||
## Important Considerations |
|||
|
|||
### Browser-Only APIs |
|||
Some browser APIs are not available on the server. Use platform checks to conditionally execute code: |
|||
|
|||
```typescript |
|||
import { isPlatformBrowser } from '@angular/common'; |
|||
import { PLATFORM_ID, inject } from '@angular/core'; |
|||
|
|||
export class MyComponent { |
|||
private platformId = inject(PLATFORM_ID); |
|||
|
|||
ngOnInit() { |
|||
if (isPlatformBrowser(this.platformId)) { |
|||
// Code that uses browser-only APIs |
|||
console.log('Running in browser'); |
|||
localStorage.setItem('key', 'value'); |
|||
} |
|||
} |
|||
} |
|||
``` |
|||
|
|||
### Storage APIs |
|||
`localStorage` and `sessionStorage` are not accessible on the server. Consider using: |
|||
- Cookies for server-accessible data. |
|||
- The state transfer API for hydration. |
|||
- ABP's built-in storage abstractions. |
|||
|
|||
### Third-Party Libraries |
|||
Please ensure that any third-party libraries you use are compatible with SSR. These libraries can require: |
|||
- Dynamic imports for browser-only code. |
|||
- Platform-specific service providers. |
|||
- Custom Angular Universal integration. |
|||
|
|||
## ABP Framework Integration |
|||
|
|||
The SSR implementation is natively integrated with all of the ABP Framework features: |
|||
|
|||
- **Authentication & Authorization**: The OAuth/OpenID Connect flow functions seamlessly with ABP |
|||
- **Multi-tenancy**: Fully supports tenant resolution and switching |
|||
- **Localization**: Server-side rendering respects the locale |
|||
- **Permission Management**: Permission checks work on both server and client |
|||
- **Configuration**: The ABP configuration system is SSR-ready |
|||
## Performance Tips |
|||
|
|||
1. **Utilize State Transfer**: Send data from server to client to eliminate redundant HTTP requests |
|||
2. **Optimize Images**: Proper image loading strategies, such as lazy loading and responsive images. |
|||
3. **Cache API Responses**: At the server, implement proper caching strategies. |
|||
4. **Monitor Bundle Size**: Keep your server bundle optimized |
|||
5. **Use Prerendering**: The prerender target should be used for static content. |
|||
|
|||
## Conclusion |
|||
|
|||
Server-side rendering can be a very effective feature in improving your ABP Angular application's performance, SEO, and user experience. Our new SSR schematic will make it easier than ever to add SSR to your project. |
|||
|
|||
Try it today and let us know what you think! |
|||
|
|||
--- |
|||
Loading…
Reference in new issue