优化Ruby脚本效率实例分享

 更新时间:2014年06月30日 15:44:30   投稿:hebedich  
以前写过批量修改繁体文件名为简体的Ruby脚本 ,可惜脚本的性能很有问题,批量重命名时运行速度非常慢。这次准备优化下代码,提升脚本的执行效率。

profile.rb是为Ruby程序准备的profiler,它可以统计并输出各方法的运行时间,以便于找到程序执行的性能瓶颈。这次就用它来剖析脚本的运行时间。使用方法很简单,加上命令行选项-r profile就可以:

ruby -r profile rename.rb
运行结束后,会把统计信息输出到标准错误输出中。如下图所示:

profile统计的是各方法的运行时间,分为2类。第1种计算的是从方法调用到方法返回之间的时间,称为整体时间;第2种则是从整体时间中扣除在该方法中调用其它方法所耗费时间之后得到的时间,称为实际时间。输出信息每行中各字段含义如下(从左到右):

该方法执行时间占整体时间的百分比,比例越高越说明这行代码可能需要优化

整体时间的总和

实际时间的总和

被调用的次数

每次调用的平均实际时间(毫秒)

每次调用的平均整体时间(毫秒)

方法名

由上图可以看出,脚本执行的时间大部分耗在了循环上。解决方法有两个:消除循环或减少循环次数。前者很难实现,暂且还没有想到办法,也许根本就没有可能。脚本中mapping的大小为2685,所以每修改一个文件名需要执行2685次循环,且循环中的encode和gsub!都是耗时操作。通常文件名的长度不超过30个字符,通过遍历文件名中每个字符的方式重命名就可以把循环次数缩减到不超过30次。

修改代码后重新执行分析命令,得到的结果是脚本运行时间从379395秒优化到2418秒,性能整整提升了156倍,达到2个数量级的效果。

相关文章

  • 详解Ruby中的代码块对象Proc

    详解Ruby中的代码块对象Proc

    在Ruby中一个代码块block不是对象,但可以用Proc来替代其作为对象进行操作,接下来我们就来详解Ruby中的代码块对象Proc
    2016-05-05
  • Ruby实现的删除已经合并的git分支脚本分享

    Ruby实现的删除已经合并的git分支脚本分享

    这篇文章主要介绍了Ruby实现的删除已经合并的git分支脚本分享,本文给出脚本代码、使用方法和执行结果,需要的朋友可以参考下
    2015-01-01
  • Ruby中的异常处理代码编写示例

    Ruby中的异常处理代码编写示例

    这篇文章主要介绍了Ruby中的异常处理代码编写示例,作者对异常处理的方式给出了一些比较通用的建议,需要的朋友可以参考下
    2015-08-08
  • Ruby实现的最短编辑距离计算方法

    Ruby实现的最短编辑距离计算方法

    这篇文章主要介绍了Ruby实现的最短编辑距离计算方法,本文直接给出实现代码,需要的朋友可以参考下
    2015-05-05
  • 在 Ubuntu 12.04 Server 上安装部署 Ruby on Rails 应用

    在 Ubuntu 12.04 Server 上安装部署 Ruby on Rails 应用

    本教程只适合 Ubuntu Server 用于部署项目到线上,建议使用同样的 Ubuntu 版本,以免遇到一些版本不同带来的问题
    2014-07-07
  • 如何利用Ruby简单模拟Lambda演算详解

    如何利用Ruby简单模拟Lambda演算详解

    最近在学习lambda演算的相关内容,由于资料不全,学习的过程很是痛苦,下面这篇文章主要给大家介绍了关于如何利用Ruby简单模拟Lambda演算的相关资料,需要的朋友可以参考借鉴,下面来随着小编一起学习学习吧。
    2017-08-08
  • 使用Ruby实现简单的事物驱动的web应用的教程

    使用Ruby实现简单的事物驱动的web应用的教程

    这篇文章主要介绍了使用Ruby实现简单的事物驱动的web应用的教程,本文来自于IBM官方技术文档,需要的朋友可以参考下
    2015-04-04
  • Ruby编程中的命名风格指南

    Ruby编程中的命名风格指南

    这篇文章主要介绍了Ruby编程中的命名风格指南,包括变量和自定义方法等的常用命名格式,需要的朋友可以参考下
    2015-08-08
  • ruby中并发并行与全局锁详解

    ruby中并发并行与全局锁详解

    最近在学习ruby,想着将自己学习的内容总结一下分享出来,下面这篇文章主要给大家介绍了关于ruby中并发并行与全局锁的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • Ruby程序中正则表达式的基本使用教程

    Ruby程序中正则表达式的基本使用教程

    和Python与Perl一样,Ruby对正则表达式的支持也是相当好的,这里送出整理的Ruby程序中正则表达式的基本使用教程,需要的朋友可以参考下
    2016-05-05

最新评论