在Meteor中如何在服务器端渲染模板?

5

Meteor的整个重点在于数据传输 - 不要提供HTML,而是提供数据。 - Swadq
4个回答

6

可以尝试使用这个库。这个包为Meteor添加了对服务端Handlebars的支持。它主要是作为服务端电子邮件HTML的替代方案,直到Meteor发布支持服务端渲染的功能。

> mrt add handlebars-server

1

如果您正在寻找Node.JS框架中的此类功能,我建议使用Derby.JS http://derbyjs.com/


4
但这个问题是关于MeteorJS的! - neftedollar

1

目前还没有内置的方法来实现这一点,但添加服务器端模板渲染是计划中的功能(尽管我还没有在路线图上看到它):

这个版本的spiderable专门针对搜索引擎。Meteor的未来版本也将在初始页面加载时向Web浏览器发送HTML。Meteor模板系统是专门为支持这种用例而设计的。

(http://meteor.com/faq/can-meteor-serve-static-html)

尽管有些人会说这违反了“只在网络上传输数据”的理念,但对于需要良好SEO的网站来说,这是相当必要的,而且当服务器和客户端都有相同的模板语言和框架可用时,这也是非常自然的事情。


1
模板即使代码在客户端HTML中,也是由服务器提供的。它们需要很长时间的原因是Meteor集合在第一次加载时需要下载到客户端。
更新:我知道这不完全是你要求的内容,但延迟的根本原因并不是模板系统。
核心问题是您的浏览器与服务器之间的延迟。您需要将服务器放置在靠近您的位置以消除此延迟/缩短它,就像任何Web服务器一样。
如果您无法获得更接近的服务器,您可以显示“正在加载...”消息,以便用户知道数据将很快可用。
{{#unless CartItems.count}}
    <tr>
        <td colspan="4">Loading...</td>
    </tr>
{{else}}
    {{#each CartItems}} 
        <tr>
           <td>{{Name}}</td>
           <td>${{Price}}</td>
           <td>{{Quantity}}</td>
           <td>${{Total}}</td>
        </tr>
     {{/each}}
{{/unless}}

真的吗?我觉得这应该是服务器基础知识..哈哈:D 在大多数情况下,提供动态页面比更新页面更重要。 - Adam Halasz
你不应该在客户端加载所有数据。它应该按需分页,并且可以通过服务器端发布函数进行限制,以满足给定模板的需要。 - David Wihl
他只有3个数据条目,我认为这是服务器和浏览器之间的延迟问题。@Adam 如果你在本地主机上运行这个程序,你会遇到同样的问题吗? - Tarang
这不是距离的问题,很明显信息是通过 xhr 请求调用的,因为如果我关闭 Javascript 就什么也不显示。是的,我在本地也遇到了同样的问题。 - Adam Halasz
这有点不规则,通常延迟是不可察觉的 <100ms,请上传你的代码好吗? - Tarang

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