我从事过主要是服务器渲染和主要是客户端渲染的应用程序。每种类型都有自己的优点和缺点。但是,您必须在其中一个或另一个之间进行选择的想法是错误的二分法。如果你有资源,你可以将两者结合起来,以获得两全其美的效果。
我看到纯客户端框架的 4 个主要挑战:
搜索引擎优化
因为您使用的是 Node.JS,所以可以通过简单地使用服务器上的客户端框架为 googlebot 和公司输出静态页面来缓解 SEO 问题。最近 Google 为单页应用程序制作了一个不错的 Analytics API,但这比简单地在主模板的末尾添加几行要多一些工作。
缓存
缓存是加速任何 Web 应用程序的非常重要的方法。对于少量数据,将数据缓存在客户端的内存或本地存储中会更快,但存储空间非常有限(目前约为 5MB)。加上缓存失效在 localStorage 中很难做到。
记忆
记忆是我为忽视而付出的沉重代价。在不知不觉中,我不小心制作了一个占用超过 200MB RAM 的应用程序。我也许可以通过优化将它降低到一半,但我怀疑如果我将它全部呈现在服务器上,它会占用超过 20 MB 的空间。
潜伏
延迟也很容易被忽略。例如,Drupal 为每个页面运行大约 50 到 100 个 SQL 查询。当数据库服务器就在应用程序服务器旁边时,您不必担心延迟,所有这些查询都可以在不到几百毫秒的时间内执行。您的客户端应用程序通常需要一百毫秒来发出一个 AJAX 请求。这意味着您需要花费大量时间设计服务器端 API 以尽量减少这些往返,但此时服务器已经拥有生成 HTML 所需的所有数据。如果您不小心,拥有一个与正确 RESTful 接口对话的客户端应用程序可能会变得非常缓慢。
37 Signals 最近在博客中介绍了他们为新版 Basecamp 实施的混合客户端/服务器架构。这种混合方法使用服务器来呈现 HTML,但利用客户端上的 PJAX 之类的东西来摆脱整页刷新。效果真的很快,是我推荐的。