【问题标题】:Why does the alpha version of Aurelia load slowly?为什么 Aurelia 的 alpha 版本加载缓慢?
【发布时间】:2015-03-31 06:58:03
【问题描述】:

我写了一个最小的测试页面来试用 Aurelia。

http://www.andrewgolightly.com/

GitHub:https://github.com/magician11/ag-landingpage

我上次的测试显示,加载 135 个请求的页面需要 55 秒。

看来我需要先捆绑 jspm_packages 目录,这样 543KB 才能立即下载……而不是分段下载。

所以鉴于我遵循了这个例子:http://aurelia.io/get-started.html

如何捆绑包?我不清楚https://github.com/jspm/jspm-cli/wiki/Production-Workflows

然后我要在我的 index.html 文件中更新什么?而且我仍然需要包含 jspm_packages 文件夹,因为我在头部引用它,对吧?

<link rel="stylesheet" href="jspm_packages/github/twbs/bootstrap@3.3.2/css/bootstrap.min.css">
<link rel="stylesheet" href="jspm_packages/npm/font-awesome@4.3.0/css/font-awesome.min.css">

谢谢。

更新

团队正在努力捆绑..

来自 Rob Eisenberg:“我们还没有完成捆绑支持。我们正在努力。”

【问题讨论】:

  • this repo 中有捆绑,这是使用jspm bundle 完成的,您可以在底部附近的Snap CI log 中看到该命令jspm bundle app/main + app/bundle + core-js lib/app.js --inject
  • 谢谢@Sean 我更新了问题以包含指向 GitHub 上代码的链接。然后我运行了命令jspm bundle src/app --minify,它构建了一个 build.js 文件。但后来卡在如何更新 index.html 文件的底部
  • 如果您在 jspm bundle 上使用 --inject 参数,它会将捆绑配置添加到您的 jspm config.js 文件中,然后 SystemJS 加载器将自动拾取它,而无需您修改任何HTML。
  • 好的,所以我运行了jspm bundle src/app --minify --inject 它确实向 config.js 文件添加了代码。然后在再次运行gulp watch 时,我得到了`可能未处理的拒绝[2] TypeError: Error loading "github:aurelia/bootstrapper@0.9.3" at localhost:9000/jspm_packages/github/aurelia/… Cannot redefine property: name` 然后页面无法加载。
  • 我有一个 repo here,它演示了与骨架应用程序的捆绑,并解释了使其全部工作的步骤。它的基本要点是 jspm 需要知道整个链才能在包中包含正确的文件,如果您的 app.js(或另一个 imported 文件)中没有引用,那么它不会包含正确的文件和一些最终会丢失。然后在完成之后,您可能需要在 package.json 中包含其他依赖项。

标签: aurelia


【解决方案1】:

这个问题是在非常早期发布的,但我们现在确实有一个策略,可以与 jspm 和 system.js 加载器一起使用以进行捆绑。请注意,这并不是说框架很慢,而是由于请求数量众多(并且您可能没有启用 gzip),资产的加载在早期需要一段时间。

我从我的博客文章中复制了这个主题 - http://patrickwalters.net/my-best-practices-for-aurelia-bundling-and-minification/

要求

  1. 了解jspm bundle 命令用于让我们的模块加载器system.js 知道加载包

  2. 了解这仅涵盖 JavaScript 文件(目前)

创建一个新包

  1. 打开您的终端并导航到您的skeleton-navigation 文件夹。
  2. 在文本编辑器中打开 config.js
  3. 运行这个命令 -

    jspm bundle '*' + aurelia-skeleton-navigation/* + aurelia-bootstrapper + aurelia-http-client + aurelia-dependency-injection + aurelia-router dist/app-bundle.js --inject --minify
    

故障

// Create a bundle
jspm bundle 
    // Bundle all of these paths
    // from my config.js 
    '*' +
    aurelia-skeleton-navigation/* +
    aurelia-bootstrapper +
    aurelia-http-client + 
    aurelia-dependency-injection + 
    aurelia-router
    // Create the bundle here
    // with this name
    dist/app-bundle.js
    // These modifiers tell the bundle
    // to both minify and then inject
    // the bundle
    --inject
    --minify

关于捆绑的附加说明

  1. 如果您在生产环境中提供服务,您可能希望像这样在您的 config.js 中设置 baseUrl
  2. 要单独解包和提供文件,请使用jspm unbundle
  3. 由于我们使用了--inject 修饰符,system.js 应该会在我们的包中提取并提供它,而无需更改我们在 index.html 中的脚本路径
  4. 您可以使用捆绑区域中的+ {filename} 添加更多文件

【讨论】:

  • 感谢您写得很好的答案!即使 Aurelia 还没有准备好生产,有一个构建策略可以玩,即使是在早期,真的很有帮助
  • 有没有办法将其设置为使用bundle-sfx 创建单个可分发的脚本文件?
  • 一个新的官方方式是使用Aurelia-CLI:blog.durandal.io/2015/06/23/bundling-an-aurelia-application
【解决方案2】:

2016 年更新

用于捆绑 aurelia 应用程序的官方工具包可以通过 npm 使用 npm install --save-dev aurelia-bundler 安装。

安装后,您可以设置一个 gulp 任务来处理捆绑/取消捆绑过程。任务的基本示例如下所示:

build/tasks/bundle.js

var gulp = require('gulp');
var bundler = require('aurelia-bundler');

var config = {
  bundles: {
    'dist/app-build': {
      includes: [
        '**/*.js'
      ],
      options: {
        minify: true
      }
    }
  }
};
gulp.task('bundle', ['build', 'unbundle'], function() {
  return bundler.bundle(config);
});
gulp.task('unbundle', function() {
  return bundler.unbundle(config);
});

我在这里写了一篇更深入的文章:http://www.foursails.co/blog/aurelia-bundling/

官方文档可以在这里找到:https://github.com/aurelia/bundler

【讨论】:

  • 本文适用于生产捆绑,不适用于开发。我在开发中有很多依赖项,必须等待超过 1 分钟才能看到我的更改。也请分享开发工作流程。
  • 一般来说,你不想捆绑开发。捆绑完全是为了让您的应用程序生产做好准备。
  • 同意.... 捆绑应该由您的 CI 完成,而不是最终开发人员(尽管如果您在提交之前更改依赖项,我建议您运行您的捆绑/取消捆绑目标)。用于生产或演示的捆绑包。不适合开发者
【解决方案3】:

有一个 GitHub 存储库,其中包括用于 Aurelia AMD 目标构建的 r.js 捆绑策略,以及用于在 Visual Studio 中使用带有 TypeScript 的捆绑包的示例项目(包括 aurelia.d.ts TypeScript 类型定义文件) .

使用此策略应该会大大减少您的加载时间,因为它将加载一个文件而不是多个文件。

【讨论】:

  • 更正式的 aurelia 构建策略即将到来,这毫无价值
  • 同意!! :) 这是一个样本和一个实验
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多