用grunt打包的angularjs1.x.x[SPA]项目,首次加载超慢,如何解决?

发布于 2022-09-05 03:21:33 字数 758 浏览 28 评论 0

问题描述

当前项目是angularjs1.x.x开发的一个大型项目,在使用grunt打包后,生成一下文件:

  1. 依赖js合并混淆后vendor.19913f78.js体积为1.7MB,

  2. 项目本身的业务代码合并混淆后app.4476b49e.js体积为1.61MB,

  3. 项目所有的view文件合并在index.html文件体积为1.41MB,

这样导致整个项目在第一次打开的时候,客户端向服务器请求这几个文件时间超长,如何解决?

图片

clipboard.png

clipboard.png

求助

请问大家在开发大型项目的时候都是怎么处理呢?现在的想法是用模块化的思想整理一下项目,使项目可以按需加载,比如使用require.js,但是require.js使用后,如何打包项目?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

满栀 2022-09-12 03:21:33

这种情况的话,一般都是利用lazyload的思想按需加载,减小主体包的体积。

ng 1.x的话有一个这个库是做这方面的,点这里,大体的作用是它可以让你的应用可以先以声明的形式占位,之后会在真正用到的时候下载资源并加载,官网文档说的很清楚了。

另外这个东西配合路由也可以很好的工作,比如ui-router路由配置中的resolve字段,可以把ocLazyload的加载逻辑封装成一个promise,然后写到当前路由页面所需要的资源加载逻辑写到resolve函数中,当页面跳转到该资源时,会自动加载资源。

比如

// route.conf.js
.state('admin_workflow', {
      abstract: true,
      url: '/admin_workflow',
      template: require('../../base/views/content.html'),
      data: {
        isAdminView: true
      },
      resolve: {
        deps: ['$q', '$ocLazyLoad', ($q, $ocLazyLoad) => {
          return module.load($q, $ocLazyLoad)
        }]
      }
    })
 // module.load 方法
export function load ($q, $ocLazyLoad) {
  return $q(res => {
    require.ensure([], (require) => {
      const ctrls = require('./controllers').default
      const dires = require('./directives').default
      const filters = require('./filters').default

      $ocLazyLoad.load([{ name: ctrls }, { name: dires }, {name: filters}])

      res('admin workflow deps loaded')
    }, 'admin.workflow')
  })
}

我这边项目使用的是webpack,所以会有require之类的语法,用别的模块化库打包大同小异。

夏见 2022-09-12 03:21:33

遇到同样的问题,请问lz解决了吗?或者有什么方案吗

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文