Angular 6应用程序在发布到服务器后响应时间过长

Angular 6应用程序在发布到服务器后响应时间过长,angular,angular6,Angular,Angular6,我开发了一个angular应用程序,并在windows server(IIS)中使用(ng build--prod)将其部署到生产构建中。所有图像都已压缩,API响应需要正常时间响应(最大800 ms),但我的应用程序太慢,无法第一次加载;当我在浏览器中点击URL时,几乎需要75秒才能完全加载应用程序。之后,所有部件都能顺利工作。我对以下几点表示怀疑 Angular是否在初始化时加载管线中声明的所有组件 我必须使用延迟加载来克服这个性能问题吗 我的应用程序中的路由文件如下所示 const a

我开发了一个angular应用程序,并在windows server(IIS)中使用(ng build--prod)将其部署到生产构建中。所有图像都已压缩,API响应需要正常时间响应(最大800 ms),但我的应用程序太慢,无法第一次加载;当我在浏览器中点击URL时,几乎需要75秒才能完全加载应用程序。之后,所有部件都能顺利工作。我对以下几点表示怀疑

  • Angular是否在初始化时加载管线中声明的所有组件
  • 我必须使用延迟加载来克服这个性能问题吗
我的应用程序中的路由文件如下所示

const appRoutes:Routes=[
    {path:'',component:HomeComponent},
     ...
     ]

@NgModule({
    imports:[
        RouterModule.forRoot(appRoutes)
    ],
    exports:[ RouterModule ]
})

export class AppRountingModule{

}

任何关于以上的建议都会非常有帮助,因为我从上周就陷入了这个困境。提前谢谢

如果不使用延迟加载,Angular将完全提前加载所有内容。这当然很慢(但75秒的速度太慢,因此可能会提示其他问题)

您需要将组件组织到模块中,并使用延迟加载来加载这些模块。这将仅在首次访问路由时按需加载延迟加载模块中声明的组件,而不会预先加载所有组件

这将减少您的初始应用程序加载时间。首次加载路由时可能会有一些延迟,但如果路由没有因组件过载,则可以

另外,请注意使用服务的新方式:

@Injectable({
  providedIn: 'root'
})
这意味着服务不再需要放在提供者数组中,而是按需加载。这有一个双重的好处,使代码组织更容易,如果您只是使用单例服务,这是非常好的。如果服务仅在单个模块中使用,还可以指定模块而不是“根”

角度载荷是否会在安装时在管线中声明所有组件 初始化

如果使用延迟加载,则不会

我必须使用延迟加载来克服这个性能问题吗

首先,您必须确定这是否是带宽问题。您可以使用开发者工具(例如Chrome开发者工具->网络概览)分析应用程序的加载概览,以查看哪个部分花费的时间太长。有时是你的主机提供商的DNS问题或其他网络问题,或者是你的应用程序中的一个承诺让事情变得更慢