为了方便大家查阅,现把2010年01期《程序员》杂志中相关链接及代码发布在此:

程序天下事

P15页,推荐资源:

诗剑书生的专栏:http://blog.csdn.net/axman/

P17页,推荐资源:

《Java EE 6 Overview》—— Reza Rahman

http://www.theserverside.com/tt/articles/article.tss?l=JavaEE6Overview

P18页,推荐资源:

《SQL Server Compact 终极性能调校》  ——黎波

http://www.cnblogs.com/upto/archive/2009/11/08/1598470.html

P19页,推荐资源:

Eweek.com

《微软为SQL Server提供Solo支持》

http://www.eweek.com/c/a/Application-Development/Microsofts-Oslo-Becomes-SQL-Server-Modeling-117207/?kc=rss

SQL Server Magazine

《关于SQL Azure的七个事实》

http://www.sqlmag.com/Article/ArticleID/102766/sql_server_102766.html

P21页,推荐资源:

天之虹的新浪博客

http://blog.sina.com.cn/jackiechueng

P23页,推荐资源:

《协同软件的思想精髓》

http://www.cpw.com.cn/Download/Downfile.Asp?id=539

P24页,推荐资源:

微软云计算提供Ruby on Rails支持环境

http://rubyonrails.cloudapp.net/

P25页,推荐资源:

Xen官方网站:http://www.xen.org/

虚拟化973项目:http://grid.hust.edu.cn/973/

P27页,推荐资源:

Peter-Paul Koch (PPK官网):

PPK是自学成才的世界级JavaScript专家,《PPK谈……》系列书籍作者。

Blog:www.quirksmode.org

《世界顶尖运动队教练的成功秘诀》

P50:

感谢InfoQ中文站的支持,原文链接:http://www.infoq.com/cn/articles/sport-coaching-and-agile

《Rails性能优化之路》

P81页,代码段1:

Rails很好地支持了这个原则。比如:

stylesheet_link_tag("application")

生成的页面元素是:

<link href="/stylesheets/application.css?1232285206" media="screen" rel="stylesheet" type="text/css"/>

P82页,代码段2:

在一个request的生命周期之内,有些数据不会改变,或者我们不关心改变,则可以通过对结果缓存以避免重复计算。

def length

@length ||= end - start

End

P82页,代码段3:

下面的代码是从搜索结果数据集创建产品对象:

records.map { |record| Product.new record }

P82页,代码段4:

避免多次创建transaction的开销。(代码如下)

Product.transaction do

search_results.each do |search_result|

Product.create(search_result)

end

end

P82页,代码段5:

正确使用预先加载可以避免n+1查询:

Company.all(:include => :products, :conditions => "company.kind = 'toy'")

产生的sql查询是:

SELECT * FROM companies WHERE kind = 'toy'

SELECT * FROM products WHERE products.company_id IN (12, 423, 431...)

但错误使用预先加载是个很危险的事情,它可能不会影响结果的正确性,但会引起很严重的性能问题:

Company.all(:include => :products,  :conditions => "products.id IS NOT NULL AND

products.weight > 10")

其实写这个查询的人的目的是为了找出拥有products,并且products的weight大于10的company。但这个语句导致的sql查询是性能低下的:

SELECT companies.id AS t0_r0, ...., products.id as t1_r0, ... FROM companies LEFT OUTER

JOIN products ON products.company_id = companies.idWHERE products.id IS NOT NULL AND

products.weight > 10

这个sql查询有两个问题:

第一,结果集中的Products信息是不需要的;

第二,LEFT OUTER JOIN的性能劣于INNER JOIN。

我们可以使用如下的语句来避免这两个问题:

Company.all(:joins=> "INNER JOIN products ON products.company_id = companies.id", :

conditions => "products.weight > 10")

它生成的sql是:

SELECT companies.* FROM companies INNER JOIN products ON products.company_id =

companies.idWHERE products.weight > 10

P82页,代码段6:

View的helper方法生成html元素,比如:

Logo

20年前,《新程序员》创刊时,我们的心愿是全面关注程序员成长,中国将拥有新一代世界级的程序员。20年后的今天,我们有了新的使命:助力中国IT技术人成长,成就一亿技术人!

更多推荐