Javascript 设计AJAX应用程序的推荐方法

Javascript 设计AJAX应用程序的推荐方法,javascript,ajax,model-view-controller,backbone.js,Javascript,Ajax,Model View Controller,Backbone.js,这是一个相当普遍的问题,但我在Flex工作了几年,对纯web开发没有太多经验 我的问题是:如果您需要构建AJAX应用程序,您会选择以下两种方法中的哪一种: 经典的服务器端MVC,其中控制器返回与模型数据一起提供的视图。视图可以是完整视图,也可以是部分视图。基本上,只有少量的完整视图可以作为容器使用,javascript将帮助以异步方式使用部分HTML视图填补空白。这种方法是传统web开发的一步,因为javascript只用于维护总体控制和用户交互 一个成熟的js应用程序,如使用Cappuccin

这是一个相当普遍的问题,但我在Flex工作了几年,对纯web开发没有太多经验

我的问题是:如果您需要构建AJAX应用程序,您会选择以下两种方法中的哪一种:

  • 经典的服务器端MVC,其中控制器返回与模型数据一起提供的视图。视图可以是完整视图,也可以是部分视图。基本上,只有少量的完整视图可以作为容器使用,javascript将帮助以异步方式使用部分HTML视图填补空白。这种方法是传统web开发的一步,因为javascript只用于维护总体控制和用户交互

  • 一个成熟的js应用程序,如使用Cappuccino、Sproutcore或Backbone.js构建的应用程序,客户端很厚,它实现了MVC的客户端实现,该实现还可以处理模型、控制logi和视图交互。在本例中,服务器端扮演一组JSON/XML服务的角色,客户端与这些服务交换数据。这种情况下的缺点是,在启动初始应用程序时,必须在开始时加载视图模板,以便javascript可以基于数据布局标记。优点是减少了服务器响应的重量,以及更好地控制客户机,这允许应用视图模型绑定之类的内容

  • 这两者之间有点混合的方法

  • 我倾向于第二种,这是正常的,因为我来自一个类似的环境,但对于这一种,我最关心的问题是url路由(或者我们在Flash中称之为深度链接)、状态管理、模块化和视图布局(何时加载视图标记模板?是否应该有特定的服务器端点在调用时提供这些模板,以便在开始时不加载模板数据?)

    请发表评论

    我更喜欢自己,但我喜欢javascript:)

    不幸的是,我从未见过flex代码是什么样子。我的经验是使用rails,因此我将用这些术语进行讨论,但希望这些概念具有足够的普遍性,因此答案是有意义的

    至于客户端模板,最好是当您选择的服务器端平台有一个故事时(如rails 3.1资产管道或3.1之前版本的jammit插件)。如果您使用的是rails,我可以提供更多信息,但如果您不是,我会做的第一件事就是寻找一个现成的资产管理系统来处理这个问题

    我的退路通常是将模板嵌入到脚本标记内的服务器端模板中,如

    <script type='text/html' id='foo-template'></script>
    
    在我的服务器端模板中,我将把这些脚本标记作为片段拉入它们自己的文件中,因此我仍然得到文件分离(rails语法)

    'templates/foo.html.erb'>
    

    我更喜欢使用jammit,并将客户端模板放在以.jst结尾的单独文件中,但第二种方法可以在任何地方使用,并且您仍然可以获得大部分相同的好处。

    我是一个移动Web应用程序的架构师,该应用程序拥有100000个用户,其中20000个用户同时在线

    对于这种应用(例如有限的带宽),我认为2是唯一的选择

    所以服务器端只是一组数据服务,而客户端使用纯AJAX RPC。 在本例中,我们使用包含所有内容的单个静态index.htm文件。此外,我们使用HTML5清单减少启动时脚本/样式/图像到服务器的往返。此外,还使用localStorage进行应用程序状态持久化和缓存

    从MVC开始:你可以使用任何对你来说最方便的东西。模板本身非常紧凑,因为它们不包含任何数据,所以(在我们的例子中)可以全部包含它们

    是的,这样一个应用程序的体系结构需要事先经过深思熟虑#1选项不太重要-入门级较低


    我不知道您的目标平台是什么,但正如我所说的,2可能是移动设备的唯一选择。

    我推荐第二种方法。您已经熟悉的第二种方法(厚客户端瘦服务器方法)是越来越多的现代开发人员的首选方法,因为小部件的呈现和管理是在客户端完成的,这节省了服务器上的计算和带宽开销。另外,如果您有一个复杂的小部件管理案例,那么为小部件使用服务器端代码可能会变得越来越复杂和难以管理。 你指出的缺点是:

    视图模板必须在开始时加载,初始 应用程序是自举的,因此javascript可以布局标记 根据数据

    这是不对的。您可以根据需要通过ajax动态加载静态模板,然后使用javascript将其呈现到完整的小部件中。 例如,如果您有一个带有图像编辑器组件的imagegallery,则在用户实际选择编辑图像之前,您可能不会加载图像编辑器所需的文件(包括图像、模板和小部件渲染代码)

    使用ScriptLoader(例如requirejs、labjs),您最初只能加载一个中小型引导脚本,然后根据需要动态加载其余脚本

    此外,功能强大且成熟的服务器端小部件库仅适用于java后端(如vaadin)。如果您使用的是php、python或ruby后端,那么编写自己的服务器端ui框架可能是一项严重的过度工作。使用客户端服务器端的javascript ui框架(如dojo、qooxdoo等)更方便

    您似乎倾向于客户端mvc框架。这是一种很好的方法,但双mvc体系结构(在服务器和客户机上)通常会导致代码重复
    var template = $('#foo-template').html();
    
    <%= render :partial => 'templates/foo.html.erb' %>