通过添加一些gems来提升Rails应用的性能
使用Rails一段时间之后,你可能就会开始吹毛求疵的想要提高它性能。这是一系列文章中第一次考虑如何提高(即使微不足道的)Rails的性能。
我将会关注在一些gem的提速上面,在某些情况下,可能是一小部分的Rails,如html转义,String.blank?和JSON工具类。
基准原则
原则,对于仅仅在控制台wrk运行几次来讲,是一个与其过强的词语,但是我这里不是来寻找“圣杯”的,而是提供一些初始的想法。
我将从旧的apache ab切换到wrk。
wrk是现代的 HTTP 基准工具,当在一个单一的多核 CPU 上运行时,能够产生巨大的负载。
wrk -t10 -c10 -d10s http://localhost:3000
这条指令运行基准问题10s,使用10个线程,并且保持打开50个HTTP链接,也就是说,这样就足够了。记得将这些基准测试在你实际的应用中跑一下,看一下实际上的性能提高有多少。
escape_utils gem
通过可爱的escape_utils gem可以加快HTML的转义。为了使其能够在Rails中使用,需要添加一个初始值设定来解决:
begin require escape_utils/html/rack # to patch Rack::Utils
!-- Responsive navigation ==================================================== -- div
Running 10s test @ http://localhost:3000/sidechannels/bench 2 threads and 10 connections Thread Stats Avg Stdev Max +/- Stdev Latency 35.40ms 3.55ms 64.70ms 91.98% Req/Sec 142.19 11.68 164.00 83.12% 2837 requests in 10.00s, 4.92MB read Requests/sec: 283.61 Transfer/sec: 503.34KB
使用escape_utils gem:
Running 10s test @ http://localhost:3000/sidechannels/bench 2 threads and 10 connections Thread Stats Avg Stdev Max +/- Stdev Latency 34.06ms 3.89ms 63.92ms 89.10% Req/Sec 148.65 13.36 180.00 75.94% 2960 requests in 10.00s, 5.46MB read Requests/sec: 295.98 Transfer/sec: 558.72KB
fast_blank gem
是否在印象里,blank?方法太慢?不用多说,试一下fast_blank gem!
仅需要在你的Gemfile中添加gem fast_blank,这应该就可以非常漂亮的提高像这篇文章中提到的String.black?方法的速度。为了测试,我仅添加下俩代码:
fast_blank是一个简单的扩展,提供了一个支持String.blank?功能的快速实现。
def fast_blank_test n = 1000 strings = [ "",
Running 10s test @ http://localhost:3000/sidechannels/bench 2 threads and 10 connections Thread Stats Avg Stdev Max +/- Stdev Latency 1.40s 207.72ms 1.58s 92.68% Req/Sec 3.10 2.11 6.00 53.66% 69 requests in 10.01s, 33.08KB read Requests/sec: 6.90 Transfer/sec: 3.31KB
使用fast_blank gem:
Running 10s test @ http://localhost:3000/sidechannels/bench 2 threads and 10 connections Thread Stats Avg Stdev Max +/- Stdev Latency 1.33s 179.56ms 1.41s 93.33% Req/Sec 3.07 0.80 4.00 40.00% 72 requests in 10.00s, 34.52KB read Requests/sec: 7.20 Transfer/sec: 3.45KB
oj gem
# oj gem gem oj
Running 10s test @ http://localhost:3000/sidechannels/bench 2 threads and 10 connections Thread Stats Avg Stdev Max +/- Stdev Latency 108.37ms 5.12ms 134.90ms 83.33% Req/Sec 45.76 3.60 55.00 57.69% 922 requests in 10.00s, 57.41MB read Requests/sec: 92.17 Transfer/sec: 5.74MB
使用oj gem:
Running 10s test @ http://localhost:3000/sidechannels/bench 2 threads and 10 connections Thread Stats Avg Stdev Max +/- Stdev Latency 78.06ms 4.43ms 92.83ms 81.31% Req/Sec 63.64 5.33 71.00 64.49% 1277 requests in 10.00s, 79.83MB read Requests/sec: 127.65 Transfer/sec: 7.98MB
使用jemalloc
好吧,这其实不是一个真正的gem,如果你想深入探究它,可以看我的这篇文章。在初始测试时,jemalloc并没有产生太多性能的提升,至少对我使用的测试用例是这样的。
提示:某些情况下,可能会默认包含在Ruby中。
更新:请一定尝试一下kzk的jemalloc gem:
gem install jemalloc je -v rails s
深入探究你的Rails应用
不要担心,去用一下Sam Saffron的带有非常棒的FlameGraphs的MiniProfiler吧!
结语
鉴于你的应用要做什么,你可能想为你的Gemfile添加上述的一些gem。通常我会把他们都添加上,当然是出于一个好的估量(你可能会想检查你的RAM利用率,然后在添加之前,进行一个完整的测试)。
oj gem基于JSON API,对Rails来说是非常不错的,使用oj gem,你可以删除视图并仅使用代言人或者你选择的模式进行序列化。
本文作者:佚名
来源:51CTO
Rails 和 Sinatra 的区别是什么? 在 IBM Bluemix 中国版的应用程序中看到Ruby Sinatra,于是想知道它和 Rails 有什么区别,但搜索一番,发现国内几乎没人关注这个问题,可能国内使用Ruby的就比较少。 有一个比较好的问题:用 Sinatra 构建网站,你会怀念 Rails 的什么特性? 但很可惜,回复并...
相关文章
- Linux 典型应用之WebServer 安装和配置
- 最近面试java后端开发的感受:如果就以平时项目经验来面试,通过估计很难——再论面试前的准备 亡羊补牢,面试时如果发现回答不好,该怎么办? [UWP]在应用开发中安全使用文件资源 请教:WCF速度似乎比Remoting慢 WinForm的EXE破解(基于IL修改) WebApi实现单个文件的上传下载 Log4Net使用学习笔记 ASP.NET Core2基于RabbitMQ对Web前
- 写出3个使用this的典型应用
- 你们天天说的应用性能监控: Sky Walking
- 移动App性能测评与优化1.4.1 从物理内存到应用
- 移动App性能测评与优化1.4.4 多进程应用
- Spring Boot 使用 Micrometer 集成 Prometheus 监控 Java 应用性能
- 【快应用】快应用有获取文件摘要值的接口吗?
- Cocos平台集成AGC性能管理(一)—— Cocos应用发布
- Trie树:应用于统计和排序
- 《循序渐进Linux(第2版) 基础知识 服务器搭建 系统管理 性能调优 虚拟化与集群应用》——1.4 用虚拟机技术学习Linux
- 《循序渐进Linux(第2版) 基础知识 服务器搭建 系统管理 性能调优 虚拟化与集群应用》——4.2 系统管理与维护
- 《循序渐进Linux(第2版) 基础知识 服务器搭建 系统管理 性能调优 虚拟化与集群应用》——4.6 网络设置与维护
- 《循序渐进Linux(第2版) 基础知识 服务器搭建 系统管理 性能调优 虚拟化与集群应用》——4.7 文本编辑工具vi
- 《SAS 统计分析与应用从入门到精通(第二版)》一1.4 SAS系统的文件管理
- iOS应用性能调优的25个建议和技巧
- 《Spark大数据处理:技术、应用与性能优化》——第1章 Spark 简 介1.1 Spark是什么
- 【转载】 DeepMind 提出元梯度强化学习算法,显著提高大规模深度强化学习应用的性能
- 函数及其应用
- 应用网络性能不佳?Network Kit助力提升网络通道的抗丢包能力和吞吐量
- 如何精准分析特定用户的应用性能问题?这两个功能您一定要了解
- 大数据应用亟待筑牢安全防火墙
- 移动应用APP性能测试白皮书
- 浏览器性能对比测试技术研究与应用
- 【鲲鹏应用迁移】实验:通过鲲鹏开发套件实现Hyper Tuner性能调优(超详细)
- 赛思互动:CRM大数据应用如何帮助企业快速拓展市场
- 阿里布局应用入口 创业公司+大数据怎么玩