Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Backbone.js路由器进行路由而不使用服务器端代码的原因_Javascript_Model View Controller_Backbone.js - Fatal编程技术网

Javascript 使用Backbone.js路由器进行路由而不使用服务器端代码的原因

Javascript 使用Backbone.js路由器进行路由而不使用服务器端代码的原因,javascript,model-view-controller,backbone.js,Javascript,Model View Controller,Backbone.js,何时以及为什么我要使用Backbone.js路由器进行路由,而不是通过服务器端代码进行路由?由于这是我第一次接触客户端路由,有人能详细说明一下吗。这完全是我的偏好问题。它基本上是询问何时执行AJAX请求而不是完整请求的另一个版本。您可以完全使用主干网进行单页应用程序的路由,然后让后端通过API表示模型的纯表示。如果采用HTML5->Mobile类型的解决方案,这将特别有用。我推荐一种更温和的方法,这取决于你和你同事的技能 最好的第一步通常是确保使用主干路由器之类的东西来表示与主要应用程序目的一致

何时以及为什么我要使用Backbone.js路由器进行路由,而不是通过服务器端代码进行路由?由于这是我第一次接触客户端路由,有人能详细说明一下吗。

这完全是我的偏好问题。它基本上是询问何时执行AJAX请求而不是完整请求的另一个版本。您可以完全使用主干网进行单页应用程序的路由,然后让后端通过API表示模型的纯表示。如果采用HTML5->Mobile类型的解决方案,这将特别有用。我推荐一种更温和的方法,这取决于你和你同事的技能

最好的第一步通常是确保使用主干路由器之类的东西来表示与主要应用程序目的一致的可寻址前端状态更改。如果前端正在执行诸如显示从AJAX请求创建的详细视图之类的操作,那么您应该使用哈希段和UI元素链接到的前端路由来实现它,而不是通过附加到某个UI元素的事件处理程序来实现它。例如,UI元素只是一个指向
/#/item/45
之类的链接,然后路由器将获取该链接并运行附加到模式的处理程序,如
/#/item/{itemId}
。这更好地代表了状态,为利用浏览器历史记录和创建以干净的方式使用现有前端代码的链接打开了大门

开始后,您可以根据需要越来越多地实施路由器。

好处

  • 快速,通常只需加载页面的一部分
  • 值得纪念的是,历史是一页一页的,你们可以控制什么进入历史,什么不进入历史
  • 在构建客户端应用程序时,最好在客户端拥有所有必要的逻辑,包括重要组件,如dispatcher(路由器)
  • 易于实现,实现几乎与服务器端相同,您可以指定路由和处理程序,然后在锚href attr中指定链接
例外情况

  • 当您想要提交包含文件的表单时,只需使用操作url来处理多部分数据就更容易了
只要我的2美分


编辑:删除了令人难忘的一行中的“作为服务器端”。

对于单页应用程序,浏览器不会在每次用户执行操作时重新绘制整个页面,而是通过Javascript生成内容并注入页面。客户端路由在地址栏中维护状态,以便用户可以直接返回到该状态,从而使这些状态成为可书签、可共享等状态

您仍然需要执行服务器端路由。从主干文档:

例如,如果您的路由为/documents/100,则您的web服务器 如果浏览器访问该URL,则必须能够为该页面提供服务 直接的

您将执行服务器端和客户端路由

从客户端到服务器的请求仍然需要在服务器上路由。 从服务器的角度来看,仍然为Ajax请求执行路由

客户端路由器用于将
#链接
路由到主干应用程序。 因此,当有人点击一个
#
链接时,你的路由器将接收到这个消息并采取行动——很可能触发一个适当的事件

路由器的功能非常不同,目前我想不出在什么情况下你会使用一个而不是另一个。

为什么我会使用它:

  • 更干净的UI应用程序代码。集中处理关注点的方法。这对于复杂的UI应用程序起着重要作用
接下来的两项与客户端路由有些关联(但不是直接相关):

  • Ajax请求不需要返回整个页面(尽管仍然可以)
  • Ajax请求可以使用紧凑的数据格式(如JSON),这使得请求处理速度更快

为什么我不使用它:

  • SEO变得更难完成。客户端路由主要映射到客户端功能,而不是URL。这意味着,搜索引擎将看到不指向不同内容页的链接。这显然是不可取的。在某种程度上,您可以尝试使用站点地图来克服它
  • 作为克服上述问题的另一个方法,网站开发人员有时必须在客户端和服务器端支持相同的URL结构(路由)。这是为实现同样的最终结果而付出的更多努力。在我看来,这是一个错误,因为这样的网站一开始被认为是公共的,但被设计成私人的。在大多数情况下,此类应用程序的设计可能只是考虑了Ajax,而不是客户端路由

结论:

话虽如此,在我看来,客户端路由对于不需要爬网的富UI应用程序最有意义(主要是因为它们受密码保护)

e、 g.电子邮件、聊天、企业应用程序、游戏、其他自定义应用程序

另一方面,正如您可能已经注意到的,打算爬网的网站不使用客户端路由

e、 g.博客、公共网站、维基页面等


值得一提的是,您可以在同一个应用程序中混合这两种方法,只要它有属于上述不同类别的不同部分。

您提出了错误的二分法。现实情况是,当您使用主干网的路由器代替服务器端解决方案时,可能永远不会出现这种情况。这就是说,使用客户端路由器(不特别是主干网路由器)来创建单页应用程序的趋势肯定在不断增长,例如。以下是您的选择:

仅服务器端路由