1

我目前无法找到一个很好的解决方案来确定如何/何时在服务器端“渲染”(为 html 生成)数据与在客户端通过 ajax 请求渲染数据。

这是一个示例问题。

我的客户端代码在每个页面上都有一个搜索栏,应该在用户点击“提交”之前提供搜索结果预览。这条路线是/ajax/search?query=...

一旦用户点击提交,客户端就会向路由发送请求,/results然后返回结果页面。

我能想到两种选择,而且似乎各有利弊。

我可以在服务器上使用 Jade(或其他模板引擎)渲染所有生成的 html 代码,如下面的调用(在 Node.js 中完成):

app.get('/results', function(request, response) {
   var results = getResultsFrom(request);
   response.render('resultsPage', results);
});

或者我可以发回一个如下所示的空白 html 页面:

HTML

<div class="search_results"></div>
<script id="search_result_template" type="text/handlebars-template">
   <!-- Client side template code -->
</script>

Javascript

    // Type should be of the form '/ajax/search?=...'
    results.url = "/ajax/search"+ $(location).attr('search')
    results.fetch();
    // Render the html generate inside the .search_results div
    resultsView.render();

在客户端渲染可以减少冗余代码(我的 Jade 模板没有做我的 Handlebars 模板已经可以做的事情)并且我可以访问 DOM 之外的数据(它们存在于模型中,通过 Backbone)。

在服务器上进行渲染可以减少对服务器的一次调用,并且用户不必等待原始页面加载以及第二个 ajax 请求完成即可查看结果。

任何关于潜在解决方案的建议将不胜感激。

4

0 回答 0