我使用PHP已经有一段时间了,并且在CodeIgniter中使用得很好,这是一个很棒的框架.我正在开始一个新的个人项目,上一次我在考虑使用什么(PHP vs ROR)时,我使用了PHP,因为我听说ROR存在可伸缩性问题,尤其是在阅读了Twitter开发人员对它的 comments 之后.可伸缩性在ROR中仍然是一个问题,还是有改进?

我想学一门新语言,ROR似乎很有趣.PHP完成了这项工作,但众所周知,它的语法和组织非常复杂,感觉就像一个大黑客.

推荐答案

再详细介绍一下Ryan Doherty的答案...

我在日常工作中使用的是静态类型语言(.NET/C#),Ruby也是一种辅助工具.在我目前的工作之前,我是一家ruby开发公司的首席程序员,为《纽约时报》辛迪加服务工作.(不过,很久以前我就在PHP工作了).

我这么说只是为了说明这一点:我亲身经历过rails(以及更普遍的ruby)的性能问题,以及其他一些 Select .正如Ryan所说,你不会让它自动为你zoom .找到瓶颈需要付出努力和极大的耐心.

我们从其他人甚至我们自己身上看到的大部分性能问题都是在ORM层中处理执行缓慢的查询.我们从Rails/ActiveRecord到Rails/DataMapper,最后到Merb/DM,每个迭代都因为底层框架而变得更快.

缓存对性能有着惊人的影响.不幸的是,我们无法缓存数据.我们的缓存最多每五分钟就会失效一次.我们网站的几乎每一个部分都是动态的.因此,如果你不能做到这一点,也许你可以从我们的经验中学习.

我们最终不得不认真地微调数据库索引,确保我们的查询没有做非常愚蠢的事情,确保我们没有执行比绝对必要的更多的查询,等等.当我说"非常愚蠢的事情"时,我指的是1+N查询问题...

#1 query
Dog.find(:all).each do |dog|
   #N queries
   dog.owner.siblings.each do |sibling|
      #N queries per above N query!!
      sibling.pets.each do |pet|
         #Do something here
      end
   end
end

DataMapper是处理上述问题的一个很好的方法(这里有are no 1 + N problems with it个),但更好的方法是使用你的大脑,停止这样的查询:D当你需要原始性能时,大多数ORM层不会轻易处理极端定制的查询,所以你不妨手工编写它们.

我们也做了一些常识性的事情.我们为不断增长的数据库购买了一台强大的服务器,并将其转移到了自己的专用机箱中.我们还必须不断地进行大量的处理和数据导入.我们也将处理转移到了its个自己的盒子上.我们也不再仅仅为了数据导入实用程序而加载整个奇怪的堆栈.我们很有品味地只加载了我们绝对需要的内容(从而减少了内存开销!).

如果你还不知道...一般来说,当涉及ruby/rails/merb时,您必须扩展到out,将硬件投入到问题中.但最终,硬件是便宜的;虽然这不是劣质代码的借口!:D

即使有这些困难,我个人也不会在另一个框架中启动项目,如果我能帮助的话.我热爱这门语言,每天都在不断地学习.这是我从C#那里得不到的,尽管C#更快.

我也喜欢开源工具,用这种语言开始工作的成本很低,只需拿出一些东西并试着看看它是否有市场,同时用一种通常可以优雅美丽的语言工作...

归根结底,当你 Select 你的框架时,你日复一日想要什么样的生活、呼吸、饮食和睡眠.如果你喜欢微软的思维方式,那就go 吧.网如果你想要开源,但仍然想要 struct 化,可以试试Java.如果你想拥有一种动态语言,并且仍然比ruby有更多的 struct ,可以试试python.如果你想要优雅,试试Ruby(我Jest ,我Jest ……还有很多其他优雅的语言适合你.不要试图挑起一场火焰战:D)

见鬼,全都试试!我倾向于同意上面的答案,早期担心优化不是你应该或不应该 Select 框架的原因,但我不同意这是他们唯一的答案.

总之,是的,你必须克服一些困难,但是语言的优雅,imho,远远超过了这些缺点.

很抱歉读了这本小说,但我一直都有性能问题.这是无法克服的.所以别让它吓跑你.

Ruby-on-rails相关问答推荐

如何修改使用Google Cloud App Engine部署rails 7应用程序的步骤

Gemfile需要较新版本的依赖项

会话控制器中的某种问题

API Rails 路由,令牌是路由的一部分

ArgumentError 用于 Ruby on Rails 中非常简单的初始化方法,没有参数

Rails - Comment.count没有改变1

Rails - 如何从 http://example.com 重定向到 https://www.example.com

如何将动态 Ruby 代码嵌入到 Slim 模板中的javascript部分?

Rails 4.1 Mailer 预览和设计自定义邮箱

如何在 Ruby 字符串中返回最后一个斜杠(/)之后的所有内容

在 Rails/ActiveRecord 列名中使用问号字符

如何找出现有 Rails 应用程序基于哪个 Rails 版本?

带有 master.key 的 Rails 5.2 - Heroku 部署

获取磁盘上 ActiveStorage 文件的路径

使用 AJAX 向 Rails 发送 Authenticity Token 的正确方法

如何从邮箱中获取域

如何更改 Rails 3 控制器中视图文件的默认路径?

t.belongs_to 在迁移

Rails:在 link_to 中保留 GET 查询字符串参数

未捕获的 ReferenceError:未定义 ReactDOM