在后端或前端列出一个集合

我对NodeJS很新,我需要一些build议。 我有一个显示用户列表的页面,我使用Mongoose从集合中检索这个列表。 我知道显示这个列表的两种方法:

1)在加载页面之前在后端进行查询,然后将结果发送到视图:

// app.js var users = Users.find({}, function(err, results){ res.render('list', { users: results}); }); 

2)在页面加载之后,以asynchronous方式在前端进行查询。 例如,使用Angular

 // users.js var User = $resource('/getUsers'); User.query(function (results){ $scope.users = results; }); // users.html <ul> <li ng-repeat="user in users"{{ user.name }}></li> </ul> // app.js app.get('getUsers', function(req, res){ Users.find({}, function(req, results){ res.json(results); }) }); 

我希望一切都清楚。 在最佳实践和/或性能方面,最好的做法是什么?

谢谢

从用户体验的angular度来看,首先在服务器上渲染几乎总是比较好的,然后只有在内容更新,在客户端上渲染(或者实际上,向服务器查询更新的HTML内容)时,渲染通常也比渲染在客户端)。 完整的客户端渲染通常会导致页面加载时间更长,在客户端(特别是移动设备上)使用大量CPU资源,并且由于asynchronous请求和页面上的许多部分更新,通常会产生闪烁。

话虽如此,有时客户端渲染是有意义的,例如,当一些内容太长而无法一次加载,最好是显示页面和进度指示器,例如“我们正在加载您的数据…” 。 不过,对于大多数面向内容的网站和门户来说,几乎完整的服务器端渲染是更好的方式。

在这里主张的玩恶魔,我将不得不不同意@Andrew Skylyarevsky。

我认为内容驱动的网站是平均的,更多的是一个前端沉重的应用程序比服务器端的应用程序。 如果为用户提供了一个内容大量定制以满足其需求的页面,并且性能是您的目标,那么您将看到最好的用户体验,即向客户提供加载页面和进行交互所需的最less内容。 所有进一步的数据应该通过asyc调用返回,例如你会在前端重型应用程序中看到的。 如果这是一个服务器端渲染沉重的应用程序,你作为一个用户将期待随后的内容请求导致服务器端页面重新加载。

我同意@Andrew说,前端方法的缺点之一是用户必须等待数据返回并呈现的初始加载时间。 但是,这可以并且应该通过各种技术来缓解。 服务器与前端实现在开发人员方面的工作量和复杂度相当。 但是,如果你正在寻找一个几乎没有用户(高性能)的经验,你需要一个良好的实施和思想通过前端重的应用程序。 有些事情还是应该在后端完成,但大部分技术都在前面。 为用户提供尽可能less的服务,并在后台发起后续请求就是这样一种方法。 调整这种体验并不容易。

我应该注意到,我来自曾经在浏览器前端工作的几个企业级应用程序的背景。 我还将许多服务器端应用程序迁移到前端应用程序,并已经在性能和用户体验方面获得了好处。 所以我是有偏见的 只是一些思想的食物。