奥雷利亚:同构的吗?

8
据我所知,正如在这里所提到的,Aurelia不支持服务器端渲染。但问题是:是否可以通过一些黑科技/变通方法来实现呢?最显而易见的想法是使用Phantom、Nightmare.js或其他工具,在服务器上用Chrome简单地渲染该页面并将其提供给客户端,但这很可能会导致生产力问题。感谢您的阅读!
更新: 根据Rob Eisenberg 2016年4月16日在FDConf的回应,服务器端渲染将在2016年实现,现在有一个核心团队成员正在负责此功能,并且已经设定了截止日期。

1
好像会在2017年发生;-) http://blog.aurelia.io/2017/01/02/aurelia-2017-resolutions/ - conradj
@conradj 好耶,太棒了! - Alexander Mikhalchenko
4个回答

7

关于Aurelia的Universal/Isomorphic问题,现在有一个开放问题可以供您关注。特别是EisenbergEffect(即Aurelia的创建者Rob Eisenberg)表示他们正在逐步努力提供Aurelia的Universal支持。他发表了一篇文章来详细说明这个问题:

EisenbergEffect 在8月25日评论道:我们计划在接下来的一个月内封锁住一些事情。这并不意味着我们之后不会添加任何内容,但是我们需要努力稳定化、提高性能、优化文档,而不受许多新功能的干扰。

首先,“等同性”不是我们想在v1初版中解决的用例。再次强调,这并不意味着我们以后不会做它。但是我们希望建立一个稳固的框架,能够运行基于浏览器的应用程序,还有像phone gap和electron/nwjs桌面应用程序这样的应用。这是我们最初的目标,我们希望确保处理这些方案比任何其他框架或库更好。

之后,我们有一些其他功能要做,这些功能本身就很有价值,但也将使我们更接近“等同性”。

  1. 使所有aurelia库都能够在服务器上运行。这为一些新的测试场景带来了便利,因此光从这个角度来看,它就是有价值的。
  2. 一旦代码可以在服务器上运行,我们就可以实现服务器视图编译。这并不是等同性渲染,而是作为您的构建和捆绑过程的一部分运行Aurelia的视图编译器的能力。这使得更多的工作可以在构建时完成,而不需要在运行时在浏览器中完成它。因此,这将改善所有应用程序的启动时间,并减少所有组件的初始渲染时间。还可以将编译视图存储在浏览器本地缓存中,以提高应用程序的每次连续运行性能。
  3. 在这两件事情都放置好之后,我们就可以为每个路线做一个完整的服务器呈现了。虽然这不是真正意义上的等同性,但它解决了SEO问题,而无需使用第三方库。所以,这是一个很好的解决方案。
  4. 最后,我们可以将服务器预渲染的应用程序与在浏览器中运行的有状态Aurelia应用程序“同步”,从而为我们提供100%的等同支持。那些就是阶段。前两个对所有开发人员都有益处,即使不对等同性应用程序感兴趣。可以使用第三方库来完成第3阶段,因此对于不想依赖额外包的人来说,这是一个不错的选择。所有这些内容都会导致添加最终功能。

我们已经开始一些1阶段的工作了。可能会在我们的第一个版本中得到实现。我们不会急于求成,但已经在进行中,并且正在寻找问题区域,以便使其正常工作。2-4个步骤涉及大量工作。实际上,我们在这里谈论的是一系列功能,每个功能都相当复杂。因此,在v1之后,这些功能可能会分阶段发布。

我们真的不想做Angular 2所做的事情。他们已经极大地复杂化了他们的架构......到了很少有人能够理解,并且使用它开发应用程序变得更加复杂,具有许多微妙之处。我们真的不想这样,所以我们首先关注我们


好的,我已经在Github阅读了那个主题,实际上我正在寻找一些黑客或变通方法来实现那个问题中所述的东西 ;) - Alexander Mikhalchenko

6

暂时的解决方案

我唯一能提出的建议是:使用phantomjs渲染页面+使用redis加速该过程。

但您将遇到许多麻烦,尤其是在客户端恢复状态时。

.......

不太优雅的解决方案

从服务器加载已渲染的页面,在客户端以通常方式渲染新页面,然后切换用户界面(UI)。

这不是真正的同构(isomorphic),但在第一次页面加载时类似于https://github.com/rails/turbolinks

.....

我希望Aurelia团队很快为此情况提供更简单的解决方案。


在你的不太规范的解决方案中,你是如何从服务器加载渲染后的Aurelia页面的? - Suhas

2
在当前版本的Aurelia中,有可能增强现有的HTML。 文档中说:
"到目前为止,您已经看到Aurelia使用根组件替换DOM的一部分。但是,这不是使用Aurelia进行渲染的唯一方法。Aurelia还可以逐步增强现有的HTML。"
请查看增强部分
我期待着更好的文档介绍此功能。 对我来说,似乎在服务器上呈现HTML并注入Aurelia将对其起作用,并且Google也会喜欢它。

0
我刚想到的一个技巧是将初始渲染的静态副本放入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>

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

但对于我来说,我只需要一个简单网站,其中包含一些很少更新的信息,这个解决方案已经够用了。至少在我能够实现适当的等同渲染之前,它都足够使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接