在后端或前端列出集合



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

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

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

2( 在页面加载后,以异步方式在前端进行查询。示例,使用角度

// 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);
    })
});

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

感谢

从用户体验的角度来看,首先在服务器上渲染,然后只有当内容更新时,才在客户端上渲染(或者,实际上,查询服务器以获取更新的HTML内容——通常也比在客户端上呈现好(。完整的客户端呈现通常会导致页面加载时间更长,在客户端上使用大量CPU资源,尤其是在移动设备上,并且由于异步请求和页面上的许多部分更新,通常会出现一些闪烁。

话虽如此,在某些情况下,客户端呈现是有意义的,例如,某些内容太长,无法一次加载,最好显示页面和进度指示器,例如"我们正在加载您的数据…"。然而,对于大多数面向内容的网站和门户网站来说,几乎完全的服务器端呈现是更好的方法。

为了在这里扮演魔鬼代言人,我不得不不同意@Andrew Skylyarevsky的观点。

我认为内容驱动的网站平均来说更像是一个前端应用程序,而不是服务器端应用程序。如果为用户提供的页面内容经过了大量定制,以满足他们的需求,并且性能是您的目标,那么您将从为客户提供加载页面和交互所需的最低限度的内容中看到最佳的用户体验。所有进一步的数据都应该通过asyc调用返回,就像你在前端繁重的应用程序中看到的那样。如果它是一个服务器端渲染的重型应用程序,作为用户,您会期望后续的内容请求会导致服务器端页面重新加载。

我同意@Andrew的观点,即前端方法的缺点之一是初始加载时间,用户必须等待数据返回并呈现。然而,这可以而且应该通过各种技术来减轻。服务器与前端实现所花费的精力和复杂性与开发人员大致相同。但是,如果您正在为用户(性能型(寻找一种近乎无缝的体验,您需要一个经过良好实施和深思熟虑的前端重应用程序。有些事情仍然应该在后端完成,但大多数技术都发生在前端。为用户提供尽可能少的服务,并在后台启动后续请求就是这样一种方法。要调整这种体验并不容易。

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

最新更新