人们常说,计算机硬件现在已经非常快了,以至于大多数开发人员不必担心性能问题。事实上,Douglas Crockford 因此拒绝为本书撰写章节。
如果我写一章,那将是关于反性能的:大多数为追求性能而付出的努力都是浪费的。我不认为这是您想要的。
唐纳德·克努斯 30 年前就提出了同样的观点。
我们应该忘记大约 97% 时间的小效率:过早优化是万恶之源。
但是,在功能和内存有限的移动设备以及需要处理 TB 级数据的分析项目之间,越来越多的开发人员*确实*需要使代码更快、数据结构更小以及响应时间更短。然而,尽管数百本教科书解释了操作系统、网络、计算机图形和数据库的基础知识,但很少(如果有的话)解释如何在实际应用中找到并修复那些“慢得要死”的问题。
本案例研究集是我们试图填补这一空白的尝试。每一章都由真正的开发人员撰写,他们不得不使现有系统更快,或者不得不设计一些东西一开始就很快。他们涵盖了许多不同类型的软件和性能目标;他们的共同点是对实际发生的情况以及大型应用程序的不同部分如何组合在一起有深入的了解。我们希望这本书——像其前作《开源应用程序的架构》一样——能够帮助您成为一名更好的开发人员,让您能够在这些专家的肩膀上学习。
– Tavish Armstrong
Tavish Armstrong(编辑):Tavish 在康考迪亚大学学习软件工程,希望在 2014 年春季毕业。他的在线主页是http://tavisharmstrong.com。
Michael Snoyman(Warp):Michael 是FP Complete 的首席软件工程师。他是 Yesod Web 框架的创始人兼首席开发人员,该框架提供了一种创建健壮、高性能 Web 应用程序的方法。他的正式学习包括精算科学,他之前曾在US 汽车和房屋保险行业工作,分析大型数据集。
Kazu Yamamoto(Warp):Kazu 是IIJ 创新研究所的高级研究员。他从事开源软件开发已近 20 年。他的产品包括 Mew、KAME、Firemacs 和 mighty。
Andreas Voellmy(Warp):Andreas 是耶鲁大学计算机科学专业的博士候选人。Andreas 在软件定义网络的研究中使用 Haskell,并发布了开源 Haskell 包,例如 nettle-openflow,用于使用 Haskell 程序控制路由器。Andreas 还为GHC 项目做出贡献,并且是GHC 的IO 管理器的维护者。
Ilya Grigorik(Chrome):Ilya 是 Google“让网络更快速”团队的网络性能工程师和开发者布道师,他白天黑夜都在致力于使网络更快以及推动性能最佳实践的采用。您可以在他的博客 igvita.com 和 Twitter 上的 @igrigorik
找到 Ilya。
Evan Martin(Ninja):Evan 在 Google 工作了九年。在此之前,他的背景包括计算机科学和语言学学位。他参与了许多小型自由软件项目和一些大型项目,包括 LiveJournal。他的网站是http://neugierig.org。
Bryce Howard(移动性能):Bryce 是一位软件架构师,痴迷于让事物运行得更快。他在业界拥有 15 年以上的经验,并为许多您从未听说过的初创公司工作过。他目前正在尝试“写作”这件事,并为 O’Reilly Associates 撰写一本关于 Amazon Web Services 的入门书籍。
Kyle Huey(Memshrink):Kyle 在 Mozilla 公司工作,负责 Gecko 渲染引擎,该引擎为 Firefox 网络浏览器提供动力。在搬到旧金山之前,他在佛罗里达大学获得了数学学士学位。他在 blog.kylehuey.com 上写博客。
Clint Talbert(Talos):Clint 参与 Mozilla 项目已近十年,最初是作为志愿者,后来成为员工。他目前领导自动化和工具团队,其职责是自动化所有可以自动化的内容,并决心消除任何自动化机器上的空闲周期。您可以在 clinttalbert.com 关注他在开源和写作方面的冒险经历。
Joel Maher(Talos):Joel 拥有超过 15 年的软件自动化经验。在过去 5 年的 Mozilla 工作中,Joel 对 Mozilla 的自动化和工具进行了改进,使其扩展到移动电话,并负责 Talos 以扩展测试、可靠性和改进回归检测。当他的自动化程序运行时,Joel 喜欢外出并在生活中迎接新的挑战。有关更多自动化冒险,请访问 elvis314.wordpress.com。
Audrey Tang(Ethercalc):Audrey 是一位来自台湾的自学成才的程序员和翻译,目前在 Socialtext 工作,职位是“无标题页面”,并在 Apple 从事本地化和发布工程工作。Audrey 之前设计并领导了 Pugs 项目,这是第一个可工作的 Perl 6 实现,并担任 Haskell、Perl 5 和 Perl 6 的语言设计委员会成员,并为CPAN 和 Hackage 做出了大量贡献。在 Twitter 上关注 Audrey,用户名是 @audreyt
。
C. Titus Brown(Khmer):Titus 从事过进化建模、物理气象学、发育生物学、基因组学和生物信息学。他现在是密歇根州立大学的助理教授,在那里他将自己的兴趣扩展到几个新的领域,包括科学软件的可重复性和可维护性。他还是 Python 软件基金会的成员,并在 http://ivory.idyll.org 上写博客。
Eric McDonald(Khmer):Eric McDonald 是一位科学软件开发人员,专注于高性能计算(HPC),他过去 13 年的大部分时间都在这个领域工作。他之前与各种物理学家合作过,现在帮助生物信息学家。他拥有计算机科学、数学和物理学学士学位。Eric 从 90 年代中期就开始成为FOSS 的粉丝。
Douglas C. Schmidt(DaNCE):Douglas C. Schmidt 博士是范德比尔特大学计算机科学教授、计算机科学与工程项目副主任以及软件集成系统研究所高级研究员。Doug 出版了 10 本书和 500 多篇技术论文,涵盖了广泛的软件相关主题,并在过去二十年中领导了ACE、TAO、CIAO 和 CoSMIC 的开发。
Aniruddha Gokhale(DaNCE):Aniruddha S. Gokhale 博士是范德比尔特大学电气工程与计算机科学系副教授以及软件集成系统研究所(ISIS) 的高级研究科学家。他拥有超过 140 篇技术文章,目前的研究重点是开发针对云计算和网络物理系统新兴挑战的新颖解决方案。
William R. Otte(DaNCE):William R. Otte 博士是范德比尔特大学软件集成系统研究所(ISIS) 的研究科学家。他拥有近十年的开源中间件和分布式、实时和嵌入式系统建模工具开发经验,与政府和工业合作伙伴(包括DARPA、NASA、诺斯罗普·格鲁曼和洛克希德·马丁)合作。他发表了许多描述这些进步的技术文章和报告,并参与了组件中间件开放标准的制定。
Manik Surtani(Infinispan):Manik 是 Red Hat 中间件部门 JBoss 的核心研发工程师。他是 Infinispan 项目的创始人,也是 JBoss Data Grid 的平台架构师。他还是JSR 347(Java 平台的数据网格)的规范负责人,并在JSR 107(Java 的临时缓存)的专家组中代表 Red Hat。他的兴趣在于云计算和分布式计算、大数据和 NoSQL、自主系统和高可用性计算。
Arseny Kapoulkine(Pugixml):Arseny 的整个职业生涯都在为电子游戏编写图形和底层系统,从小型利基游戏到多平台AAA 大作,例如FIFA 足球。他喜欢让慢的东西变快,让快的东西变得更快。可以通过 mail@zeuxcg.org
或 Twitter 上的 @zeuxcg
联系他。
Arjan Scherpenisse(Zotonic):Arjan 是 Zotonic 的主要架构师之一,并且能够同时处理数十个项目,主要使用 Zotonic 和 Erlang。Arjan 连接了后端和前端 Erlang 项目之间的差距。除了可扩展性和性能等问题之外,Arjan 还经常参与创意项目。Arjan 是活动的常客演讲者。
Marc Worrell(Zotonic):Marc 是 Erlang 社区中受人尊敬的成员,并且是 Zotonic 项目的发起者。Marc 将时间花在为大型 Erlang 项目提供咨询、开发 Zotonic 以及担任 Maximonster(MaxClass 和 LearnStone 的构建者)的CTO。
如果没有 Amy Brown 和 Greg Wilson 的帮助,这本书将不存在,他们请我编辑这本书并说服我这是可能的。我还要感谢 Tony Arkles 在编辑初期提供的帮助,以及我们的技术审阅者
一支由复制编辑和助手组成的庞大队伍确保了这本书在本十年内出版。
Amy Brown、Bruno Kinoshita 和 Danielle Pham 因其在书籍构建过程、图形和排版方面提供的帮助而应受到特别感谢。
编辑一本书是一项艰巨的任务,但当您有鼓励的朋友时,它会变得更容易。Natalie Black、Julia Evans 和 Kamal Marhubi 在整个过程中都表现出耐心和热情。
数十名志愿者努力创作了这本书,但仍有很多工作要做。如果您想提供帮助,可以通过报告错误、将内容翻译成其他语言或描述其他开源系统来做到这一点。如果您想参与进来,请通过 gvwilson@third-bit.com 与我们联系。
在印刷版中,这出现在最后一页。关于字体的说明特定于印刷版和 PDF 版。
封面字体是来自 exljibris 字体库的 Museo,由 Jos Buivenga 设计。正文字体是 TEXGyre Termes,标题字体是 TEXGyre Heros,两者均由 Bogusław Jackowski 和 Janusz M. Nowacki 设计。代码字体是 Raph Levien 设计的 Inconsolata。
封面照片展示的是维也纳圣斯蒂芬大教堂塔钟的旧内部构造。现在,这些构造可以在维也纳钟表博物馆看到。照片由Michelle Enemark拍摄。封面设计由Amy Brown完成。
本书使用开源软件构建(封面除外)。LaTeX、Pandoc、Python和Calibre(ebook-convert)等程序提供了极大的帮助。