首页 » SEO优化 » rails作风php技巧_何时不应该运用 Rails

rails作风php技巧_何时不应该运用 Rails

访客 2024-12-15 0

扫一扫用手机浏览

文章目录 [+]

译者 | 弯月,责编 | 屠敏

头图 | CSDN 下载自东方 IC

rails作风php技巧_何时不应该运用 Rails

出品 | CSDN(ID:CSDNnews)

rails作风php技巧_何时不应该运用 Rails
(图片来自网络侵删)

以下为译文:

什么场合下不适宜选择Rails?

首先,我先容一些很明显不应该利用Rails的场合,然后再磋商一些值得从技能角度去考虑的情形。

首先,最主要的是团队熟习程度。
如果你的团队根本不理解Rails,而且对Rails的学习也不是特殊感兴趣,那么就不适宜选择Rails。
这种情形该当很明显,但仍旧该当是第一考虑要素。

其次,当你知道其他框架更得当的时候。
有时候你会特殊关注一些方面。
如果你须要利用Java措辞的机器学习库,并且由于某种缘故原由你不想利用JRuby,那么就不应该选择Rails。
如果你须要编写WordPress插件,则会选用PHP。
有些特定的兼容性问题每每比其他所有问题都主要。

如果能够发挥Rails的优点,同时缺陷没有太大影响,则可以选用Rails。
因此,下面我们来谈论优Rails的缺陷。

其余,常日Rails只能用作HTTP做事器,因此某些任务不适宜Rails。

什么场合下利用Rails属于大材小用?

不适宜利用Rails的情形包括:

非常小且不会增长的任务。
如果某个做事的功能非常有限,那么利用Rails就有点大材小用。
如果你不须要数据库,那么就没有必要建立数据库,对不对?如果只是一个流量非常低、不须要缓冲的中间做事器,那么利用Rails就得不偿失落。

但是,你须要谨慎处理不断增长的任务,不断扩大小型做事器的规模会带来很多麻烦。
如果你的做事须要通过Web浏览器向用户供应HTTP页面,那么必须考虑将来可能须要添加的功能。
仅靠最大略的办理方案远无法应对这种情形。

大略的API做事器。
Rails并不善于供应支持JSON的API做事器。
Rails的许多HTTP安全性都无用武之地(例如SQL注入防护、XSS防护等)。
虽然对付某些数据库而言,ActiveRecord是不错的选择,但当你构建须要与浏览器对话的HTML网站时,Rails才能发挥最大上风。
一样平常,在仅供机器利用的小项目中,Rails的用途不大。

与之类似,如果你须要在浏览器中渲染HTML,而Rails只卖力供应JSON数据。
这时,许多Rails的安全功能和便捷功能就形同摆设了,但ActiveRecord、ActiveJob、ActionMailer等内部库仍旧不容小觑。
但如果你不在做事器上渲染HTML,而且非常确定往后绝对不会,那么就不要纠结Rails了。

什么场合下利用Rails力不从心?

Rails是为小型团队和中等规模的代码库设计的。
超大型团队(许多程序员)和超大型代码库(大量的掌握器、模型、代码行数)会拖垮标准的Rails运用构造。

在Ruby中,你可以编写带有非局部副浸染的代码。
不论是猴子补丁,还是写入数据库,或者是在运行时创建新的类型,对付一个200人的团队来说,如果你无法信赖每个人,那么就不应该选用Ruby。
有时方法太多,反而会让人头疼。
有一些很好的工具可以方便在大规模团队中利用Ruby,但纵然如此,也很随意马虎碰着非常和困难。
这并不是Ruby善于的领域。

大多数时候,你可以将一个大型项目分割成多个较小的项目。
如果一个Rails运用过大,那么常日可以将其分割成多个运用,或者一个较薄的运用加上多个后台做事,或者一个运用加上一个微做事,等等。
不论哪种办法,总有办法将其分割成小部分。
Ruby非常鼓励这种做法,而我也非常赞许。

有些构造虽然不太像Rails的风格,但能很好地扩展规模。
Avdi Grimm(已退休)提出的Objects on Rails便是这方面的一次考试测验,还有Hexagonalarchitecture for Rails也是,它与更古老、更通用的N-tier architecture有很多共通的地方。

但有时采取其他框架更好。
一个明显的选择便是Hanami,在创建微型运用程序时它不像Rails那么快捷,但在大型团队中,它的扩展性更好。

个人而言,我还是会从Rails下手。
如果只想快速开拓,然后看看市场反响,那么没有任何框架的生产力可以与Rails媲美。
等到市场成功,而且可以适当降落开拓速率时,再用更坚实的框架重写就好。

另一个须要考虑的是性能问题。
如果你要重写一个普通网站,那么实际上性能并不是问题,Rails在这种规模上依然能够良好地扩展。
但如果面对几百倍大的网站(如B2C网站),那么有可能你的做事器用度会超过人工用度。
住这种情形下,可以考虑降落工程师的事情效率,开拓效率更高的网站,以节省做事器用度。
可以查看一下你的运用做事器的账单,只看看运行Rails的运用做事器就好。
然后比拟一下Web工程师(即卖力编写Rails运用的人)的人为。
一样平常而言,工程师的人为要远远大于做事器的用度,以是该当利用廉价的做事器韶光来换取昂贵的工程韶光。
但在某个点上,天平会倾斜,此时就该当考虑提高工程师的人为,以此来降落做事器开销。

什么情形下Rails会做出错误的假设?

在谈论Rails的假设是否精确之前,我们先看看这些假设是什么。

Rails有一些大略的假设:它假设你编写的是在做事器上渲染HTML的交互运用。
它假设安全性非常主要(Rails为了安全性放弃了很多),而大多数情形下你不会自己构建安全系统。
它假设你有一个精英小团队来做原型的事情,或者你有一个中型团队,但有完善的指南。

Rails还假设,你乐意用技能债务来换取更快的开拓速率。
换句话说,Rails的目标是快速构建运用程序。
当技能实行力不是紧张考虑的风险时,这种做法很合理。
例如:如果你有一个小型的创业公司,你很确定你能构建网站,但人们并不一定会买你的产品,那么你最大的风险便是市场风险。
此时Rais应该是首选。
你须要迅速构建。
由于就算你能做出完美的产品,也可能由于非技能缘故原由(如“人们不愿意买”)而放弃。

鉴于“开拓速率优于技能债务”的信条,Rails假设你会利用大量的gems,而且只要能加快开拓速率,添加依赖也不是问题。

Rails假设你不在乎水平扩展运用做事器(即添加更多的运用做事器)。
如果你能做到这一点,它就能很好地扩展。
Rails假设CPU很便宜(一样平常来说这是实话)。
相应地,Rails还假设数据库常日是最严重的性能瓶颈(一样平常对付Web运用程序来说,这是实情)。

Rails还假设你的运用程序须要进行一些打算或数据传输。
它假设可以利用CPU,由于无论如何你都要用CPU做一些打算。

Rails不善于什么?

只管Rails善于做很多事情,但有一件事是它不善于的:垫片(shim)。

所谓“垫片”指的是自身打算量非常少,功能只是将几个其他后台做事的结果集成到一起并转发的做事器。
例如一个做事器,查询两个JSON做事,并将结果大略地字符串连接。
它的打算量非常小,但须要处理许多事宜。

这里的关键词是“事宜”。

Node.js支持一种分外的运用程序架构,叫做“Eventd”(事宜)编程。
它仅利用非常少的资源就可以支持上千乃至百万级别的同时连接。
它可以同时实现高吞吐量和低延迟。
如果用在得当的地方,它的性能无人企及。

Rails完备不如Eventd编程。
实在没有哪个框架能比。
Ruby也有Eventd编程框架(如EventMachine、Async),但Rails完备不同。

既然Eventd这么好,为什么不在所有场合下都利用呢?由于它并不适宜统统场合。
我特殊想强调的是每个要求的打算量,如果每个要求都实行很多打算,Eventd做事器就会挂掉。
对付一台能处理百万连接的做事器,如果每个连接须要几百毫秒的CPU韶光,那么就大事不妙了,由于要求量太大,延迟也会非常糟糕。

换句话说,Rails和Node.js是适用于不同项目的不同工具。
如果你认为“这个项目利用Rails或者Node都可以”,那么我建议你仔细想想你的项目(以及框架),直到找出明显的精确答案。
这二者的用途完备不一样。

总结

如果团队不想用或者不会用,那么Rails便是缺点的选择。

如果很明显其他框架更好,或者某个须要兼容的库并不支持Rails,那么Rails便是缺点的选择。

如果不在做事器上渲染HTML,特殊是当项目非常小,并且不该用做事器时,那么Rails可能是缺点的选择。

如果不做原型类的事情(最好是在小型、高竞争力的团队内做),那么Rails便是缺点的选择。

如果开拓团队或者运用代码太大,并且无法拆分项目时,那么Rails便是缺点的选择。

如果项目须要Node.js的Eventd做事器或者EventMachine一类的功能,那么Rails便是缺点的选择。

末了,如果你只想听关于这个话题的娱乐新闻,那么这篇文章便是缺点的选择。

网友说

评论1:

我来根据我的履历说说为什么该当坚持利用Rails:

所有“轻量级Sinatra API(或者类似的API)”做事末了都会越来越像Rails运用。
Rails给开拓者供应了很多遍历,除非你自己开拓一个轻量级API,否则都不会把稳到这些。
例如掌握台、日志、数据库迁移、数据库连接池、rspec集成、i18n等。

没人喜好自己写项目构造。
代码放在哪里?是lib?core?还是app?你以为ActiveRecord太臃肿而“无法扩展”,以是就自己编写了一个轻量级“数据映射器”模式?但不好意思没有人乐意花韶光去学习。
话虽如此,Rails项目还是有一些可以随便挑选的部分,只不过不符合大家的习气。

大部分时候,开拓者会假设数据库连接池是一件很自然的事情。
系统管理员不想调试你的程序。
在反反复复几个星期后你就会认识到,数据库连接池是Rails供应的。
而仅仅在Sinatra运用中导入activerecord再建立连接,是没有数据库连接池的。

某天,某个卖力生产环境掩护的人忘却了rake任务的名字。
在运行bundle exec rake时忘却了添加-T。
默认的任务是rspec。
结果把生产数据库删掉了。
到时你就会明白,Rails会阻挡类似的事情发生,而那些“轻量级API”不会。
但是,这种教训显然还不足深刻,由于几年后类似的事情还会再发生一次。

评论2:

对我来说Rails不可或缺,你只须要15分钟就可以从零开始构建一个网站在Heroku上运行,顺便设置好SSL和域名。
我特殊

说实话,纵然是JSON API加上React前真个模式,我也会用Rails。
由于实在太方便了。

评论3:

我还是会选用Rails。
如果你想快速开拓,然后看一看有没有人喜好,那么没有任何框架能够比得上Rails。

我有5年的RoR履历,两年sprintboot/kotlin履历,1年的Django履历。
一旦设置好事情流程后,生产力方面就不会有太大差别。
痛点仅在设置初始项目,以及在库版本更新时随时保持更新。

django和spring boot缺少的便是实体、掌握器和视图的命令行天生器,以及快速设置流程。

Django和spring boot须要在设置高下点功夫。
Django须要settings、运用程序数组、中间件定义等。
一旦这些事情都做好了,编写实体、视图和路由都非常大略。

Springboot须要坚实的文件夹构造、运用程序属性文件,还须要仔细设置好数据库迁移和日志。
以是并不是那么随意马虎上手。
但编写实体、掌握器、做事、视图等还是很方便的。

原文:http://codefol.io/posts/when-should-you-not-use-rails/

本文为 CSDN 翻译,转载请注明来源出处。

标签:

相关文章

九零大数据,新时代下的数据力量

随着信息技术的飞速发展,大数据已成为当今社会的重要资源。在众多数据中,九零大数据因其独特的优势而备受关注。本文将从九零大数据的概念...

SEO优化 2024-12-17 阅读0 评论0