‫چگونه پروژه‌های انگیولاری سبکی داشته باشیم – قسمت دوم

دسته‌بندی: آموزش
تاریخ انتشار: ۱۳۹۸ فروردین ۲۰, سه‌شنبه ساعت ۱۲:۵۸۰ رأیبدون امتیاز

همانطور که در مطلب قبل دیدیم، با اضافه کردن style ها  و فایل‌های Javascript ای حجم صفحات خروجی رو به افزایش بودند. اولین راه بهینه سازی، استفاده از feature module است. می‌خواهیم هر زمان که به ماژولی نیاز داریم، آن را import و استفاده کنیم. \ \ در ادامه دو فایل زیر را برای استفاده از ماژول‌های Angula...

همانطور که در مطلب قبل دیدیم، با اضافه کردن style ها و فایل‌های Javascript ای حجم صفحات خروجی رو به افزایش بودند. اولین راه بهینه سازی، استفاده از feature module است. می‌خواهیم هر زمان که به ماژولی نیاز داریم، آن را import و استفاده کنیم.

در ادامه دو فایل زیر را برای استفاده از ماژول‌های Angular Material و Kendo Angular UI در مسیر appmodules تعریف می‌کنیم.
// angular-material-feature.module.ts import from '@angular/core'; // Import angular kendo angular import { MatFormFieldModule, MatInputModule, MatButtonModule, MatButtonToggleModule, MatDialogModule, MatIconModule, MatSelectModule, MatToolbarModule, MatDatepickerModule, DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatTableModule, MatCheckboxModule, MatRadioModule, MatCardModule, fadeInContent, MatListModule, MatProgressBarModule, MatTabsModule } from '@angular/material'; import { MatSidenavModule, MatSlideToggleModule, } from '@angular/material'; import from '@angular/material/menu'; @NgModule({ declarations: [ // KendoGridPaginationComponent ], imports: [ MatSidenavModule, MatSlideToggleModule, MatInputModule, MatFormFieldModule, MatButtonModule, MatButtonToggleModule, MatDialogModule, MatIconModule, MatSelectModule, MatToolbarModule, MatDatepickerModule, MatCheckboxModule, MatRadioModule, MatCardModule, MatMenuModule, MatListModule, MatProgressBarModule, MatTabsModule ], exports: [ MatSidenavModule, MatSlideToggleModule, MatInputModule, MatFormFieldModule, MatButtonModule, MatButtonToggleModule, MatDialogModule, MatIconModule, MatSelectModule, MatToolbarModule, MatDatepickerModule, MatCheckboxModule, MatRadioModule, MatCardModule, MatMenuModule, MatListModule, MatProgressBarModule, MatTabsModule ], providers: [ ] }) export class AngularMaterialFeatureModule { }

و

// kendo-feature.module.ts import from '@angular/core'; // Import kendo angular ui import from '@progress/kendo-angular-buttons'; import from '@progress/kendo-angular-grid'; import from '@progress/kendo-angular-dropdowns'; import from '@progress/kendo-angular-inputs'; import from '@progress/kendo-angular-dateinputs'; import from '@progress/kendo-angular-dialog'; import from '@progress/kendo-angular-l10n'; import from '@progress/kendo-angular-layout'; import from '@progress/kendo-angular-dialog'; import from 'ng-snotify'; @NgModule({ declarations: [ ], imports: [ ButtonsModule, GridModule, ExcelModule, DropDownsModule, InputsModule, DateInputsModule, DialogsModule, LayoutModule, SnotifyModule, ], exports: [ ButtonsModule, GridModule, ExcelModule, DropDownsModule, InputsModule, DateInputsModule, DialogsModule, LayoutModule, ], providers: [ , SnotifyService, // Enable Right-to-Left mode for Kendo UI components , ] }) export class KendoFeatureModule { }
از این پس، هر زمانیکه به ماژولی نیاز داریم، feature module آن را import می‌کنیم.
در ادامه‌ی بهینه سازی، از قابلیت Lazy-Loading استفاده می‌کنیم و فایل ‌های زیر را جهت پیاده سازی lazy-loading تغییر می‌دهیم.
محتویات فایل styles.scss را پاک می‌کنیم.
فایل app.module.ts :
// app.module.ts import from '@angular/platform-browser'; import from '@angular/platform-browser/animations'; import from '@angular/core'; import from '@angular/router'; import from './app-routing.module'; import from './app.component'; @NgModule({ declarations: [ AppComponent ], imports: [ BrowserAnimationsModule, RouterModule, AppRoutingModule, ], providers: [], bootstrap: [AppComponent] }) export class AppModule

و فایل app.component.ts :

// app.component.ts import from '@angular/core'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'], encapsulation: ViewEncapsulation.None, }) export class AppComponent { title = 'HowToKeepAngularDeploymentSizeSmall'; constructor() { } }

و محتویات فایل app.component.scss را پاک می‌کنیم.

و فایل app.component.html :
// app.component.html
و فایل app-routing.module.ts
// app-routing.module.ts import from '@angular/core'; import from '@angular/router'; const routes: Routes = [ ]; @NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule] }) export class AppRoutingModule
نکته ۱: سعی کنید کامپوننت‌های کمتری را به app.module.ts اضافه کنید.
نکته ۲: stylesheet‌ها را در ماژول‌هایی که به آنها نیاز دارند import کنید.
تا به اینجای کار، ماژول اصلی پروژه را سبک کردیم. حال می‌خواهیم صفحه‌ی اول پروژه را به module ای به نام home، در مسیر appprojectshome مسیردهی کنیم.
home.module.ts :
// home.module.ts import from '@angular/core'; import from '@angular/common'; import from '../../modules/index'; import from './home.routing'; import from './home.component'; import from './pages/index/index.component'; import from './pages/login/login.component'; @NgModule({ declarations: [ HomeComponent, IndexComponent, LoginComponent ], imports: [ CommonModule, HomeRoutingModule, AngularMaterialFeatureModule ], providers:[ ], entryComponents:[ LoginComponent ] }) export class HomeModule
home.routing.ts :
// home.routing.ts import from '@angular/core'; import from '@angular/router'; import from './home.component'; import from './pages/index/index.component'; const routes: Routes = [ { path: "", component: HomeComponent, children: [ { path: "", component: IndexComponent, data: { breadcrumb: " Index " } }, { path: "about", loadChildren: "./pages/aboutus/aboutus.module#AboutusModule" }, { path: "blog", loadChildren: "./pages/blog/blog.module#BlogModule" }, { path: "blog-detail", loadChildren: "./pages/blogdetail/blogdetail.module#BlogdetailModule" }, { path: "pricing", loadChildren: "./pages/pricing/pricing.module#PricingModule" }, { path: "contact", loadChildren: "./pages/contact/contact.module#ContactModule" } ] } ]; @NgModule({ imports: [RouterModule.forChild(routes)], exports: [RouterModule], }) export class HomeRoutingModule { }
و فایل home.component.ts :
// home.component.ts import from '@angular/core'; import from '@angular/material'; import from './pages/login/login.component'; @Component({ selector: 'app-home', templateUrl: './home.component.html', styleUrls: ['./home.component.scss'], encapsulation: ViewEncapsulation.None }) export class HomeComponent implements OnInit { constructor( private dialog: MatDialog) ngOnInit() { } public toggleModal(){ let dialogRef = this.dialog.open(LoginComponent, { }); } }
و فایل home.component.scss :
// home.component.scss @import '../../../assets/home/css/themify-icons.css'; @import '../../../assets/home/css/font-awesome.min.css'; @import '../../../assets/home/css/set1.css'; @import '../../../assets/home/css/bootstrap.min.css'; @import '../../../assets/home/css/style.css'; @import "[email protected]/material/prebuilt-themes/indigo-pink.css";
و فایل home.component.html :
// home.component.html

503 Sylvan Ave, Mountain View
CA 94041, United States

Copyright © ۲۰۱۷ Listed Inc. All rights reserved

Privacy Terms
پروژه را با دستور ng serve –open –prod اجرا کرده و خروجی را بررسی می‌کنیم. حجم خروجی صفحه اول را همراه با قالبی از پیش طراحی شده در تصویر زیر می‌بینیم:

سورس کامل پروژه در HowToKeepAngularDeploymentSizeSmall قرار دارد.

dotnettips

شاید دیگر مطالب
روژانرا هم دوست داشته باشید

مطالب پیشنهادی

آموزش پیکربندی و گسترش Dynamics 365 Customer Engagement
‫چگونه پروژه‌های Angular ی سبکی داشته باشیم – قسمت اول
‫پیاده سازی PWA در Angular
آموزش نکات ویژوال استودیو برای توسعه دهندگان وب
آموزش حرفه ای Node.js
آموزش پوش نوتیفیکیشن در iOS
توسعه میکروسرویس ها روی Azure با جاوا
آموزش جاوااسکریپت برای بلاک چین
شروع جوانی برای داشتن بهترین بازنشتگی
آموزش بکاپ و ریکاوری شیرپوینت ۲۰۱۶
اشتراک‌گذاری

این مطلب برای شما مفید بود؟

بازخورد شما به بهبود کیفیت مطالب کمک می‌کند.

در حال بررسی رأی شما...