第1页
Ruby 的快与慢
薄荷 谢文威 2014.11.01
第2页
介绍
关于我
谢文威,薄荷科技联合创始人,CTO,中国最早一批 Ruby 程序员
关于薄荷
中国最大最活跃的减肥网站和减肥 app,核心系统完全基于 Ruby 构建
第3页
要点
Ruby 的快:快速开发
慢一点,适当控制开发节奏
Ruby 的慢:缓慢的性能
如何获得高性能,高并发
第4页
简洁的 Ruby
弱类型,duck type
人性化、自然的语法
纯粹的面向对象,致命的一致性
第5页
简洁的 Ruby
class Sample
attr_accessor :age, :name
end
sample = Sample.new
sample.age = 18
sample.name = 'Sample'
puts "age: #{sample.age}. name: #{sample.name}"
class Sample {
private int age;
private String name;
public int getAge() {
return this.age;
}
public void setAge(int value) {
this.age = value;
}
public String getName() {
return this.name;
}
public void setName(String value) {
this.name = value;
}
public static void main(String[] argv) {
Sample sample = new Sample();
sample.age = 18;
sample.name = "Sample";
System.out.println("age: " + sample.age + " name: " + sample.name);
}
}
第6页
灵活的 Ruby
强大的元编程
DSL 能力,代码块
胶水语言,强大的粘合力
万能的控制台
第7页
丰富的类库,性感的框架
Ruby on Rails
Rails 带来 web 开发领域的革命,现在依然引领潮流
Sinatra
轻量,灵巧,高效
第8页
快乐编程
为了乐趣编程
nice 的 Ruby 社区
第9页
少即是多
每个程序员平均产生代码的行数是固定的,和语言无关,越有表现力的语言越有效率
第10页
为什么要慢一点
一次典型的苦逼开发经历
软件 = 编程 + 工程
第11页
单元测试
单元测试是 Ruby 一种基础文化
避免重复劳动
促进更好的设计
没必要百分百覆盖
第12页
代码走查 Code Review
发现和解决问题同时进行
监督和提醒
促进交流分享
降低人员流动风险
第13页
在离产生问题越近的地方发现问题,或者越早的发现问题,问题产生的代价越小
第14页
重构 Refactor,重建 Rework
技术负债如影随形,重构可以减轻负担
允许你一开始犯错,通过重构依然能获得良好的设计
如果实在无可救药,那就重建吧
第15页
如何搞垮一个 Rails 系统
产品特性不断增加,变化
没有及时重构,划分子系统
第16页
如何处理日益增加的复杂度
模块化,让单个模块复杂度可控
分离 gem,Rails engine,SOA 化
第17页
要快,但不要裸奔,欲速不达。适当控制节奏,让你拥有更高质量代码,更健壮的系统。
第18页
Ruby 常见的 3 个月经贴
编程语言排行榜
Ruby 性能好差
Rails 性能好差
第19页
Ruby 为什么慢
动态语言的劣势
解析器 VM,垃圾收集 GC
全局锁 GIL
第20页
适合 Ruby 的项目类型
性能不敏感的应用
IO 密集型应用
选择合适的并发模型
第21页
最简单优化:加硬件
时间比钱更宝贵
硬件很便宜,人很贵
性能优化容易让人上瘾
第22页
准备工具
识别性能瓶颈 profile
效果评估 benchmark
第23页
最有效策略:缓存
缓存是最有效的方法,立竿见影
缓存的种类
页面
片段
对象
第24页
异步任务队列
避免长时间的处理阻塞普通请求
常见的异步任务:发邮件,文档处理等
工具:如DelayedJob,Resque,Sidekiq
第25页
粘合服务
有些 Ruby 真不擅长做的事情就交给别人吧
适合分离的服务
数据分析统计处理
全文检索服务
图像处理...
第26页
提升性能和并发量方法
加硬件
并发模型
利用缓存
异步任务队列
利用外部服务
GC调优,减少对象生成...
第27页
总结
Ruby 是一种简洁、灵活的语言,具有非常高的开发效率,但是要有意识的控制节奏,这会让你拥有更高质量的代码,更健壮的系统
Ruby 语言本身性能的确比较差,解析器 VM 性能不高,高并发方面有诸多限制,当你认清并理解她的劣势,通过一些策略改进,依然可以获得很棒的性能
第28页
Thank you & QA
ruby-china: vincent
http://xiewenwei.github.com
微信:booheeok