什么时候使用 js 框架? [关闭]

Posted

技术标签:

【中文标题】什么时候使用 js 框架? [关闭]【英文标题】:When to use a js framework? [closed] 【发布时间】:2014-09-05 20:44:54 【问题描述】:

我们有一个 ruby​​ on rails 网站,它使用了很多 rail 的内置远程 ajax 和 js 模板。我们有新的需求将我们带向单页面应用程序的方向,其中页面的整个块和列都将基于 ajax。

我们应该继续使用rails ajax 基础设施还是开始合并像angularjs 这样的js 框架?换句话说,判断是否需要一个 js 框架的主要评估标准是什么?

【问题讨论】:

【参考方案1】:

就我个人而言,我认为一旦您的 ajax 响应需要潜在地更新页面的多个非相邻区域,那么绝对是时候引入 JS 框架了。服务器生成的 javascript(就像 rails 助手给你的)对于非常简单的事情很方便,但是一旦事情变得比这更复杂,你最好只从 rails 返回 JSON 数据并让前端从中找出页面的某些部分应该得到更新。

也没有理由你必须是一个或另一个。你可以继续使用 Rails 的 JS 助手来处理简单的事情,但在有意义的页面上,引入 KnockoutJS、Backbone 或 Angular 之类的东西。我以这种方式将 KnockoutJS 引入到现有应用程序中,并且效果很好。它不依赖于特定版本的 jQuery 并且还支持旧版浏览器,这一点很有帮助。

您需要决定是通过 ruby​​gem 添加 JS 框架,还是直接下载并将其添加到您的资产管道。第一种方法可能更简单,但它也会将您绑定到 gem 中包含的版本,这可能会在某些时候给您留下几个版本。如果我正在启动一个新应用程序,我可能不会使用任何 rails 的 javascript 帮助程序,甚至可能不会使用资产管道,而是使用其他工具(如 grunt)来代替。与“包括电池”的权衡相比,这几乎是一种“关注点分离”,需要更多的前期工作。

【讨论】:

更新多个不相邻的区域似乎是一个关键标准。还想知道将 Rails 用于 Rails 为大区域(如仪表板)提供服务的重型 js 模板是否有意义。如果将js框架整合到零碎,后端API会不会有些复杂? 有趣的是没有人提到EmberJS...【参考方案2】:

当您可以为您的数据源使用更多后端 JSON API 时,像 Angular 这样的 javascript 框架是一个好主意,从而保持 Rails 代码更轻巧。如果您必须通过 AJAX 进行大量的来回通信,Angular 甚至 Backbone 可以使这变得更加简洁。这实际上取决于您要构建什么样的应用程序,您认为前端应该如何构建,以及框架是否可以帮助实现这一点。

由于您已经在 js.erb 运行的情况下将代码保存在远程 true 中,因此您可以坚持下去。如果它变得非常痛苦,我只会在这一点上真正切换。因为更改现有应用程序中的框架/架构可能是一项相当大的工作。特别是如果您是 Angular 新手。

最近我在一个项目中工作,该项目将更加繁重。我最终使用把手进行了一些模板渲染,然后只使用了几个单例对象。这样做的原因是因为我们没有持久化很多数据。只需将几个字段放入通过 ajax 请求完成的 cookie,然后是前端和那些单例使用的数据的单个 JSON 端点。

【讨论】:

那么另一个标准是,如果有大量数据和主要数据输入交互使用 html 表单,那么 js 框架将是最好的方式吗?【参考方案3】:

如果你使用单页 Rails 作为后端 json api 解决方案仍然很棒。当您进行比较测试时,node.js 会更快,但它是否会换取 Ruby 与 JavaScript 等开发的乐趣。如果您需要两倍以上的时间在 js 代码中重写/开发它,这算不算。 .. ?

如果项目不是另一种“FB 或 Youtube 的东西”,老实说,我认为 Rails 很久以前就已成为企业级框架。这是较新的结局故事,但希望你明白我的意思。干杯

【讨论】:

【参考方案4】:

我会使用:

    API Rails 与 rabl gem 或类似。 AngularJS。

您将花费时间构建 API,但是使用 Angular 之类的框架(我说过,对于此类应用程序,单页应用程序)前端会更容易

【讨论】:

以上是关于什么时候使用 js 框架? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Sails.js 与 Meteor - 两者的优势是啥? [关闭]

什么是 HTML5 框架? [关闭]

我啥时候应该在独立的 node.js 上使用 express.js

使用 svelte js 的原因 [关闭]

React.js 是库还是框架 [关闭]

函子我啥时候应该使用它们它们的预期用途是啥[关闭]