【问题标题】:Aurelia: Isomorphic?Aurelia:同构?
【发布时间】:2015-12-08 10:36:19
【问题描述】:

据我所知,Aurelia 不支持here 提到的服务器端渲染。

但问题是:是否可以通过一些技巧/解决方法来做到这一点?

最明显的想法是使用 Phantom、Nightmare.js 或其他任何东西在服务器上的 Chrome 中简单地呈现该页面并将其提供给客户端,但这很可能会导致严重的生产力问题。

谢谢!

更新

根据 Rob Eisenberg 今天(2016 年 4 月 16 日)在 FDConf 上的回复,服务器端渲染将在 2016 年实现,有一名核心团队成员致力于该功能,此功能有截止日期。

【问题讨论】:

标签: javascript aurelia isomorphic-javascript


【解决方案1】:

您可以监控open issue for Universal/Isomorphic Aurelia。特别是 EisenbergEffect(他是 Aurelia 的创建者 Rob Eisenberg)表示,他们正在逐步努力为 Aurelia 提供通用支持。他的这篇文章提供了大部分细节:

EisenbergEffect 于 8 月 25 日发表评论

我们正试图在下个月内锁定。那不 意味着我们不会在那之后添加任何东西,但我们需要努力 稳定性、性能和可靠的文档,无需 很多新功能会让人分心。

首先,“同构”不是我们想要解决的用例 初始 v1 版本。同样,这并不意味着我们以后不会这样做。 但是,我们也希望为基于浏览器的应用程序提供一个可靠的框架 首先是电话间隙和电子/nwjs 桌面应用程序。那是我们的 最初的目标,我们要确保我们处理这些情况 比任何其他框架或库都要好。

在那之后,我们还有其他一些我们想做的功能,它们是 本身就有价值,但也会让我们更接近 同构。

  1. 启用所有 aurelia 库在服务器上运行。这使一些 新的测试场景,所以如果仅从这个角度来看,它就很有价值。
  2. 一旦代码可以在服务器上运行,我们就可以实现服务器视图 汇编。这不是同构渲染,而是能力 运行 Aurelia 的视图编译器作为构建和捆绑的一部分 过程。这使得更多的工作可以提前完成,作为 你的构建,然后它不需要在浏览器中完成 运行。因此,这将改善所有应用程序的启动时间,并且 减少所有组件的初始渲染时间。它也将使它 可以将编译后的视图存储在浏览器本地缓存中以改进 应用程序连续运行的性能。
  3. 在这两个之后 一切就绪,然后我们可以看看做一个完整的服务器渲染 对于每条路线。这并不是真正意义上的同构,但是 它无需 3rd 方库即可解决 SEO 问题。所以, 很高兴有一个解决方案。
  4. 最后,我们可以“同步”一个 服务器预渲染应用程序,其中运行有状态 Aurelia 应用程序 浏览器,为我们提供 100% 的同构支持。所以,这些是阶段。 前两个对所有开发者都有好处,即使是那些 对同构应用程序不感兴趣。第三阶段今天可以完成 与 3rd 方库,所以这对我们来说是一件好事,对于那些 谁不想要额外的依赖。所有这些都导致 4 哪个 添加最后的片段。

我们已经开始了 1 的一些工作。这可能会影响我们的 第一次发布。我们不会推动它,但它已经在 进步,我们正在寻找问题领域,以便我们能够做到 工作。步骤 2-4 涉及大量工作。真的,我们在谈论 这里有一系列功能,每个功能都相当复杂。所以, 这些可能会在 v1 之后分阶段发布。

我们真的不想做 Angular 2 所做的事情。他们有 极大地复杂化了他们的架构……以至于很少有人 人们将能够理解它并开发应用程序 它变得更加复杂,有许多细微差别。我们真的 不想这样,所以我们专注于我们想要的开发者体验 首先,然后我们会回来看看同构支持(是的,我们 已经有想法如何干净地做到这一点,但想给那些 想法需要一段时间才能成熟)。在所有这些中,我们的目标是模块化。 所以,如果你不关心同构,你不必思考或 担心它。如果这样做,您将安装必要的软件包, 同意系统的“约束”,走自己的路。

所以,对于所有对这个话题感兴趣的人,我只想问你 请耐心等待。对于那些对同构不感兴趣的人, 不用担心,我们不会影响您的开发者体验。 对于那些非常想要它的人,你将不得不等待更长的时间 它将分阶段并以模块化的形式出现,以免破坏 其他人。

【讨论】:

  • 好吧,我已经在 github 上阅读了该主题,实际上我正在寻找一些技巧或解决方法来实现这一目标,如问题中所述;)
【解决方案2】:

暂时

我可以建议的唯一方法:使用 phantomjs 渲染页面 + 使用 redis 来加速该过程。

但是在客户端恢复状态会有很多麻烦。

.......

脏溶液

从服务器加载渲染页面并在客户端以通常的方式渲染新页面,而不是切换 UI。

它不会是真正的同构,而是在首页加载时类似于 https://github.com/rails/turbolinks

.....

我希望 Aurelia 团队很快会为这种情况提供更简单的东西。

【讨论】:

  • 在你的肮脏解决方案中,你如何从服务器加载渲染的 aurelia 页面?
【解决方案3】:

在当前的 Aurelia 中,可以增强现有的 html。 文件说

到目前为止,您已经看到 Aurelia 用根组件替换了 DOM 的一部分。但是,这不是使用 Aurelia 进行渲染的唯一方法。 Aurelia 还可以逐步增强现有的 HTML。

查看增强部分@http://aurelia.io/docs.html#/aurelia/framework/1.0.0-beta.1.0.8/doc/article/app-configuration-and-startup

我期待获得有关此功能的更好文档。 在我看来,在服务器上渲染 html 并注入 aurelia 将与它一起工作,谷歌也会喜欢它。

【讨论】:

    【解决方案4】:

    我刚刚想出的一个技巧是将初始渲染的静态副本放入 index.html 文件中:

    <html>
      <body aurelia-app="main">
        <h1>static copy of the website here</h1>
        <script src="scripts/vendor-bundle.js" data-main="aurelia-bootstrapper"></script>
      </body>
    </html>
    

    这当然是完全手动的,如果初始渲染包含来自数据库的任何内容,则可能需要更新静态副本 每次数据库内容更改时。 (这当然是同构渲染应该解决的问题)

    但是对于我的需要,这是一个简单的网站,其中一些信息很少更新,这个解决方案已经足够好了。至少在我能够实现正确的同构渲染之前就足够了。

    【讨论】:

      猜你喜欢
      • 2016-12-23
      • 1970-01-01
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 2017-05-11
      • 2015-07-18
      • 1970-01-01
      • 2016-03-12
      相关资源
      最近更新 更多