我正在构建一个Django Web应用程序,它有很多由ajax请求动态生成的html。现在我使用Django的模板语言来构建html,然后将这个新的HTML作为字符串传递给JSON对象,然后使用jQuery将其注入到页面中。
这种方法效果相当不错,但是现代浏览器中的Javascript速度非常快,并且制作了如此多的javascript模板库,我想知道是否应该推送所有客户端。
所以我的问题是:鉴于我的平均“页面”包含来自它的所有请求必须在其生命周期内编译约300个模板(每个约15个左右的行,具有5个左右的替换)在浏览器中进行模板化是否具有显着的性能优势?
此外,任何人都可以推荐'快速'的Javascript模板库吗?我听说过关于underscore.js,mustache.js和jQuery模板的好消息。
答案 0 :(得分:5)
坚持使用Django模板的(大量)优势是您只需要使用一种模板语言,无论您希望生成哪个页面,它都会保留相同的功能。如果您发现自己遇到了性能问题,那么您应该考虑查看caching template fragments。
答案 1 :(得分:3)
我认为混合客户端和服务器模板架构不好。只要您在一个环境中编写模板。
每次生成页面服务器端时,都会消耗一定的处理时间和一些网络带宽。如果您使用托管服务器,这就是您所支付的费用 用户的浏览器正在等待通常空闲的计算机上空闲以进行响应。
如果您在客户端(HTML + JS)上发送模板,则可以缓存它们,对于会话甚至数天,如果用户不删除它们。
这会减少网络流量以提供相同的功能内容不同时代。由于数据通常小于其等效的呈现HTML。
正如您今天所指出的,Javascript引擎非常快,以及运行它的计算机。每次将渲染工作发送到客户端时,都会为服务器节省一些处理时间并更快地提供数据。
我们处于另一个极端,因为我们在客户端运行所有这些,这就是我们为超快客户端渲染创建PURE的原因。由于这种分散化,我们的应用看起来非常快。
答案 2 :(得分:0)
为什么要将HTML作为JSON传递?只需发送回HTML并使用jQuery的$.html()
函数将其放入<div>
或其他任何内容。
至于Javascript中的模板,有Pure。如果你正在使用jQuery(我推荐它),it already has a template engine。
答案 3 :(得分:0)
可以制作双重用途的模板 - 可以将它们渲染到占位符中以供js替换,同时可以为服务器输出正常渲染它们。只有少数几个模板需要具有双重目的 - 这些片段将由js替换。
我同意Ignacio,最好只保留每个模板的一个副本,这样你就不必为javascript写一个单独的副本了,但是我的方法肯定有改进的余地。如上所述。
理想情况下,您可能希望将模板编译为强大的javascript函数代码以及服务器输出的纯字符串。
Closure templates名为Soy,很好地解决了这个问题,但是(也许还没有)使用python,但是他们确实使用Java和Javascript。希望有一天会有python支持。
但即使发生这种情况,模板化语言也可能会受到更多限制,因为很难使.get_absolute_url()
,过滤器等内容在python和javascript中同时运行 - 所有这些都是自动的。