【问题标题】:jQuery templates on the server side服务器端的 jQuery 模板
【发布时间】:2011-05-11 03:19:04
【问题描述】:

有没有人尝试在服务器端使用jQuery templates(或任何其他基于 JavaScript 的模板)和 env.js 之类的东西?

我正在考虑尝试通过能够在 Web 应用程序的客户端或服务器端呈现相同的模板来获得什么好处,但我希望有人可能已经有一些经验,或者知道现有项目这样做。与一些更传统的模板引擎相比,我特别想知道我可能遇到的任何性能问题。

回顾一下:有没有人在服务器站点上使用过 jquery 模板?如果是这样,是否有任何性能问题或我可能遇到的其他问题?

【问题讨论】:

  • 您的问题到底是什么? (另见Is there a template engine for Node.js?
  • 服务器端更可靠,因为客户端你不了解用户规范,并且可能会大大降低用户端的性能
  • 你可能想看看 @getify 的博客 (blog.getify.com) - 他一直在抱怨客户端和服务器之间模板和验证机制的奇偶性
  • Ball - 回顾一下:有没有人在服务器站点上使用过 jquery 模板?如果是这样,是否有任何性能问题或我可能遇到的其他问题?
  • 刚刚找到这个答案,分别在 PHP 和 .Net 中建议了 2 个 jQuery 模板渲染器...stackoverflow.com/questions/4485419/…

标签: javascript jquery templates serverside-javascript envjs


【解决方案1】:

env.js 是不必要的。

<plug shameless="true">

我正在规范和重新实现 JQuery 模板以允许它们独立于 DOM 使用。有关代码和演示,请参阅 https://github.com/mikesamuel/jquery-jquery-tmpl-proposal。该规范可在http://wiki.jqueryui.com/w/page/37898666/Template 获得,上面写着:

以文本为中心,而不是依赖于 DOM。状态:完成。请参阅第 12 节的实现。 foo${bar} 转换为与 function (data, options) { return "foo" + bar; 非常相似的东西。 } 对 bar 进行模数运算

...

这将允许在服务器端 javascript 环境中使用此模板引擎,例如 node.js 或 java/rhino

我希望得到反馈,可以帮助您入门。

</plug>

【讨论】:

    【解决方案2】:

    我的一位从事分布式遗传编程项目的朋友使用 js 服务器端模板系统来管理在所有用户浏览器中生成的所有网络工作者。他的代码在这里:github。我不知道它会有多大帮助,但我知道它实现起来非常简单并且做了一些了不起的事情。从他发现它的容易程度我会推荐一个js模板系统它。

    【讨论】:

      【解决方案3】:

      编写服务器端代码来处理 jQuery 模板相当简单。

      这是我创建的some very basic vb.net code,它将一个 jquery 模板字符串的结果返回给任何对象的数组。目前它只做数据值的替换

      Public Shared Function RenderTemplate(template As String, list As Array) As String
          Dim myRegexOptions As RegexOptions = RegexOptions.Multiline
          Dim myRegex As New Regex(strRegex, myRegexOptions)
          Dim splits = myRegex.Split(template)
          Dim matches = myRegex.Matches(template)
      
          Dim i As Integer = 0
          Dim swap As Boolean = False
          Dim str As New StringBuilder
          For Each item In list
              swap = False
              For i = 0 To splits.Length - 1
                  If swap Then
                      str.Append(CallByName(item, splits(i), CallType.Get, Nothing))
                  Else
                      str.Append(splits(i))
                  End If
                  swap = Not swap
              Next
          Next
          Return str.ToString
      End Function
      

      所以如果我发送以下...

      Dim strTargetString As String = "<p><a href='${Link}'>${Name}</a></p>"
      Dim data As New Generic.List(Of TestClass)
      data.Add(New TestClass With {.Link = "http://stackoverflow.com", .Name = "First Object"})
      data.Add(New TestClass With {.Link = "http://stackexchange.com", .Name = "Second Object"})
      Return Render(strTargetString, data.ToArray)
      

      它会以字符串形式输出

      <p><a href='http://stackoverflow.com'>First Object</a></p>
      <p><a href='http://stackexchange.com'>Second Object</a></p>
      

      这比在服务器上生成一个假的浏览器对象并运行整个 jQuery 库来替换几个标签要快得多。

      【讨论】:

      • 渲染最简单的案例模板很容易,但是当模板包含对 JavaScript 函数的函数调用时会发生什么(这在现实世界场景中并不少见)?如果不在服务器端实际使用 JavaScript,这将很难。
      猜你喜欢
      • 2014-04-06
      • 2012-02-11
      • 2012-10-27
      • 2012-07-04
      • 1970-01-01
      • 1970-01-01
      • 2011-05-27
      • 1970-01-01
      • 2017-02-04
      相关资源
      最近更新 更多