`
andyhu1007
  • 浏览: 199999 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

rails有趣的性能问题

阅读更多

  今天遇到两个有趣的性能问题。

 

  1. 把所有数据都读取到一个数组,然后在内存层面去操作,每次从数组中查找一个对象耗时:0.02秒。因为数据太多,性能严重不行,完成整个操作要30分钟。试着改成每次都从数据库去find的方式来操作,每次查询也只耗时0.02秒,而且还要比内存层面的操作稍快。加个index,速度立马提升一个数量级,整个操作只需3分钟。cool!

 

  2. 一个update操作,因为数据较多,耗时将近10分钟。看了一下,一个n方的算法完全可以改成n的。后来直接改成sql去update,耗时不超过1秒钟。

 

  当然,为了性能问题,写一堆一堆的sql,或许就是噩梦的开始。

分享到:
评论
7 楼 yangzhihuan 2008-08-10  
性能优化没有学到,倒是学会了 benchmark 的使用,哈哈,多谢 rainux
6 楼 rainux 2008-08-08  
hozaka 写道
有一个很有意思的想法,把
array.each do |a|
# process
end

换成
while (a = array.pop) do # or shift
# process
end


性能会有多大的提高呢?


显然不会有性能提升,Array#pop 和 Array#shift 会有一个 Array 修改操作,导致性能降低。

require 'benchmark'

Benchmark.bm do |x|
  x.report {
    array = Array(1..1000000)
    array.each do |e|
    end
  }

  x.report {
    array = Array(1..1000000)
    while (a = array.pop) do
    end
  }

  x.report {
    array = Array(1..1000000)
    while (a = array.shift) do
    end
  }
end


rainux@mutalisk ~
% ruby test.rb
      user     system      total        real
  0.230000   0.010000   0.240000 (  0.248797)
  0.290000   0.010000   0.300000 (  0.312698)
  0.280000   0.000000   0.280000 (  0.292774)
rainux@mutalisk ~
% ruby test.rb
      user     system      total        real
  0.260000   0.000000   0.260000 (  0.277904)
  0.280000   0.000000   0.280000 (  0.289177)
  0.280000   0.000000   0.280000 (  0.285684)
rainux@mutalisk ~
% ruby test.rb
      user     system      total        real
  0.220000   0.000000   0.220000 (  0.245022)
  0.280000   0.010000   0.290000 (  0.299613)
  0.260000   0.010000   0.270000 (  0.285374)
5 楼 hozaka 2008-08-08  
有一个很有意思的想法,把
array.each do |a|
# process
end

换成
while (a = array.pop) do # or shift
# process
end


性能会有多大的提高呢?
4 楼 QuakeWang 2008-08-08  
如果用做数据遍历查找,大容量数组确实不合适,如dazuiba所说,想要性能的话,用hash。
3 楼 andyhu1007 2008-08-08  
Quake Wang 写道
1和2能否都举一下具体的代码例子?
特别是1,虽然ruby很慢,但是它的数组操作也是毫秒级别的,你说的0.02秒才能从数组中获取一个对象实在难以想像。


顺序获取应该是毫秒级的,如果是查找,一旦数据较多,跟数据库表查询没什么区别。
2 楼 dazuiba 2008-08-08  
Quake Wang 写道
1和2能否都举一下具体的代码例子?
特别是1,虽然ruby很慢,但是它的数组操作也是毫秒级别的,你说的0.02秒才能从数组中获取一个对象实在难以想像。


数组本来是做顺序查找的。遍历一个大数组会消耗很长时间。
Benchmark.realtime{
 Array(1..1000000).select{|e|e==1000000}
}
#消耗时间:0.608999967575073


非顺序遍历数组的复杂度是N,
想快点考虑用hash,用内存换时间。
1 楼 QuakeWang 2008-08-08  
1和2能否都举一下具体的代码例子?
特别是1,虽然ruby很慢,但是它的数组操作也是毫秒级别的,你说的0.02秒才能从数组中获取一个对象实在难以想像。

相关推荐

    提升Ruby on Rails性能的几个解决方案

    Ruby On Rails 框架自它提出之日起就受到广泛关注,在“不要重复自己”,“约定优于配置”等思想的指导下,Rails 带给 Web 开发者的是极高的开发效率。 ActiveRecord 的灵活让你再也不用配置繁琐的 Hibernate 即可...

    rails性能优化

    Rails性能优化是一个涉及多个方面的复杂过程,它要求开发者对Ruby on Rails框架的内部机制有深刻的理解,并且能够合理地应用各种技术和工具来提升应用的性能。在性能优化的过程中,首先应该避免盲目优化,而是要通过...

    对优化Ruby on Rails性能的一些办法的探究

    ### 对优化Ruby on Rails性能的一些办法的探究 #### 引言 随着Web应用程序变得越来越复杂,性能优化成为了确保用户满意度和提高系统效率的关键步骤之一。Ruby on Rails(简称Rails),作为一个流行的Web开发框架,...

    Ruby on Rails:Rails性能优化与缓存策略.docx

    Ruby on Rails:Rails性能优化与缓存策略.docx

    rails2-sample

    对于想要深入了解Rails框架并构建高性能Web应用的开发者来说,这些知识是必不可少的。 #### 10. Rails Plugins(Rails插件) Rails插件是扩展框架功能的有效方式。本章节将介绍如何安装、使用和开发自己的Rails...

    Rails recipes

    Rails Recipes涵盖了Rails的众多方面,包括但不限于模型、视图、控制器、路由、数据库迁移、安全、性能优化、测试和部署等。 书中所提到的“隐藏的宝石”,意味着即使是经验丰富的Rails开发者也可能还没有发现或...

    配置高可用的rails

    -Rails应用的性能基准:例如,Rails应用在处理请求时各个阶段的耗时,包括路由解析、模型加载、视图渲染等,这些数据对于定位性能瓶颈非常有帮助。 - 服务器资源的监控与优化:高可用的配置不仅仅是服务器的数量和...

    Advanced Rails

    10. **Rails社区与工具**:熟悉Rails社区的资源,如Stack Overflow、GitHub上的开源项目,以及RailsGuides和Rails API文档,这些都能帮助开发者解决问题和提升技能。 "Advanced Rails"这本书是进一步提升Rails技能...

    Rails进行敏捷Web开发(所有版本的源码rails3.0-4.0)

    通过对比不同版本的源码,开发者可以深入理解Rails如何逐步演进,如何处理性能、安全性和可维护性等问题。同时,这也能帮助开发者更好地适应Rails的新特性,提升自己的Web开发技能。 在探索这些源码时,你可以关注...

    Ruby-SkylightRails应用程序的智能分析工具能够可视化请求性能

    Ruby-Skylight 是一款专为Rails应用设计的性能分析工具,它可以帮助开发者深入理解应用程序的运行状况,尤其是在处理请求时的性能表现。通过提供直观的可视化界面,Skylight使得复杂的性能问题变得易于理解和解决。 ...

    rails4.0.0

    为了解决安全问题,Rails 4引入了Strong Parameters,强制开发者明确指定哪些参数可以被控制器的action使用。这有助于防止意外的未授权数据注入。 7. ** turbolinks** Rails 4默认包含了Turbolinks,这是一个...

    Rails osdc

    无论是在基础的MVC架构模式上,还是高级的RESTful设计、安全性保障、性能优化以及国际化支持等方面,Rails都表现出了卓越的能力。对于希望深入学习Ruby on Rails的开发者来说,这些知识点是非常重要的基础。

    Rails相关电子书汇总

    标题 "Rails相关电子书...此外,书中可能还涵盖了Rails的安全实践、性能优化以及与其他技术(如JavaScript库)的集成等内容。对于希望深入理解Rails框架或想要提升Web开发技能的开发者来说,这本书是一个宝贵的资源。

    The Rails 4 Way

    - **开发模式**:通常包含更多的调试信息和详细的错误报告,方便开发者快速定位问题。 - **测试模式**:专为自动化测试设计,可能会关闭缓存等性能优化措施。 - **生产模式**:注重性能和安全性,减少不必要的...

    rails api(文档)

    Rails API的目的是为了提高性能,并减小API服务器与传统的Rails Web应用程序之间的差异。 在Rails API中,主要的亮点包括: 1. **轻量级结构**:Rails API剥离了Web展示层的组件,如Action View和Asset Pipeline,...

    Ruby on Rails安装指南(Ruby 1.8.6+Rails 2.0.2)

    这些插件有助于提升Mongrel服务器的性能和稳定性。 **知识点4:创建Rails应用程序** 安装好Ruby、Rails和Mongrel后,我们就可以开始创建自己的Rails应用程序了。通过命令行输入`rails new project_name`即可创建一...

    rails敏捷开发的购物车系统

    使用RSpec进行行为驱动开发(BDD)测试,Rake任务自动化测试执行,确保购物车系统在功能上和性能上的健壮性。 总结,构建Rails敏捷开发的购物车系统涉及了模型-视图-控制器架构的运用、数据库设计、路由配置、会话...

    rails cookbook

    《Rails Cookbook》是一本专注于Ruby on Rails框架的实用指南,旨在帮助开发者解决在开发过程中遇到的具体问题和挑战。Rails作为一款强大的Web应用框架,以其MVC(模型-视图-控制器)架构和“约定优于配置”的设计...

Global site tag (gtag.js) - Google Analytics