【问题标题】:Server-side and client-side JavaScript服务器端和客户端 JavaScript
【发布时间】:2025-12-12 14:55:02
【问题描述】:

我很难为即将进入开发阶段的应用选择使用哪些框架。我是前端的,我的朋友在做后端。

假设我正在开发一个简单的待办事项列表应用程序。我为待办事项列表上的每个项目都有一个模板。理想情况下,我希望服务器端 JavaScript 和客户端 JavaScript 一样使用这个模板。

所以在页面加载时,如果数据库中已经有 5 个待办事项,则 HTML 将在服务器上编译。如果我随后将新的待办事项添加到列表中,客户端 JS 将使用相同的模板编译 HTML。

我听说过很多关于 Node.js、Backbone.js 等的议论。对于这类事情有多少选择,真是令人难以抗拒。谁能给我一起使用这些技术的例子吗?

【问题讨论】:

    标签: javascript node.js frameworks


    【解决方案1】:

    Node.js 是服务器端的 JavaScript,而 Backbone.js 用于优雅地构建前端内容,使用集合、模型和视图。

    两者都有自己的角色。为了更好地比较前端框架,您可以查看 Addy Osmany 的 TODO 列表,其中有很多:https://github.com/addyosmani/todomvc

    Backbone 网上也有一些不错的教程:
    - http://dailyjs.com/2011/04/04/node-tutorial-19/
    - http://backbonetutorials.com/
    - http://net.tutsplus.com/tutorials/javascript-ajax/getting-started-with-backbone-js/

    这是一个将服务器上的 Node.js 与客户端上的 Backbone 相结合的应用程序:

    http://fzysqr.com/2011/02/28/nodechat-js-using-node-js-backbone-js-socket-io-and-redis-to-make-a-real-time-chat-app/

    Backbone(如 Node.js)非常流行,因此您可以在线获得大量帮助/资源。

    【讨论】:

    • 谢谢,我会看看那些例子。
    • 你不需要担心服务器端,因为你的朋友会开发它。而不是 Node 可能是 PHP 或 Ruby 或任何其他服务器语言。
    • 是的,我想我只是对如何在服务器端和客户端之间重用代码感兴趣,因为它们都使用同一种语言。
    • 那么你应该阅读更多关于github.com/substack/node-browserify的信息。关于它的好文章在这里:substack.net/posts/24ab8c 基本上你可以拥有可以在浏览器端重用的 CommonJS 模块(用于 Node.js)。
    • 个人经验表明,Backbone 模型非常适合客户端,但在服务器上存在漏洞。
    【解决方案2】:

    当然。查看TodoMVC 以更好地了解各种替代方案。

    【讨论】:

    • 我看了一下。不过,它对我所说的服务器端的东西没有帮助。
    【解决方案3】:

    将模板文件粘贴到页面底部。这样,您的客户端代码可以轻松使用它,而无需调用获取模板。

    调用模板时使用 JQuery 的示例是

    <div style="display:none" id="sample_jquery_template">
      Hello ${name}
    </div>
    

    在您的客户端 JavaScript 代码中

    ..javascript..
    person = {name:'Joe'}
    $.tmpl($("#sample_jquery_template").html(), person ).appendTo( "#destinationList" );
    

    【讨论】:

      【解决方案4】:

      有足够多的模板解决方案,例如 mustache.js 在两端工作。
      但是为了在客户端使用模板,让渲染数据可用是有帮助的。
      Henrik Joreteg 写了a nice article 关于重用骨干模型并在客户端和服务器之间同步它们。

      【讨论】:

        【解决方案5】:

        来自 Yahoo 的 Dav Glass 提供了一个很好的 talk,展示了他如何使用 node.js 在客户端和服务器上运行 YUI3。

        这是他的github视频示例:

        您也可能有兴趣查看jsdom

        我刚开始学习 node,这个视频真的帮助我了解了如何使用 node 在服务器和客户端上进行实验。你会看到他禁用了 javascript 并且日历仍然有效 - 这很酷。

        这是一个很好的backbone资源:

        【讨论】:

          【解决方案6】:

          你可以看看http://derbyjs.com/#why_not_use_rails_and_backbone

          他们在打开 web 应用程序时尝试实现以下目标:

          1. 在第一次请求时传输完全呈现的页面。
          2. 从那时起,所有更改都应直接在客户端进行,并通过 ajax 同步到服务器。

          因此,通常用户向具有“胖”客户端的网站发出的第一个请求是相当痛苦的:

          • 必须传输和初始化应用数据
          • 数据必须由客户端加载
          • 显示数据

          这种行为通常比传输老式的服务器端渲染页面慢得多。例如,Gmail 或 iCloud 需要一些时间来加载,因为它们就是这样做的。

          【讨论】: