﻿
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>好易阁&#124;免费杀毒软件&#124;Web技术</title>
	<atom:link href="http://www.helloyi.cn/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.helloyi.cn</link>
	<description></description>
	<lastBuildDate>Fri, 23 Jul 2010 08:38:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.3</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>百万级PHP网站Poppen.de的架构分享</title>
		<link>http://www.helloyi.cn/index.php/2010/07/23/poppen/</link>
		<comments>http://www.helloyi.cn/index.php/2010/07/23/poppen/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 08:33:52 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[WEB编程技术]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=3278</guid>
		<description><![CDATA[Poppen.de是德国的一家婚姻中介网站，对于该网站的统计数字有：1）200万的用户数，2）2万的并发用户数，3）每天产生30万的私信，4）25万的日登录用户数。这样的网站也就是个中型规模的网站，下面看看这个网站在技术应用及经验方面带来的东西。
  Poppen.de目前有200万注册用户数，而项目团队有11个开发人员，两个设计，两个系统管理员。该站点的商业模式采用免费增值模式，用户可以使用搜索用户、给好友发送消息、上载图片和视频等功能。
　　如果用户想享受不受限制发送消息和上载图片，那么就得根据需要支付不同类型的会员服务，视频聊天及网站其他服务也采用同样的策略。
Nginx
　　Poppen.de使用nginx作为web server，包括静态请求和动态请求。特别的，Poppen.de通过nginx来直接从memcache中获取缓存的动态页面内容而不需要经过PHP，一个例子就是请求用户信息页。对于缓存整个动态请求页面内容，这是一种方法，更常见的是使用squid、varnish来做。在请求用户上传图片的处理方面，Poppen.de是将图片上传到统一的文件服务器，而前端的nginx在请求时会做本机的cache处理（不知道它的请求是如何落到nginx上的，如果是随机的，多台nginx本机cache的数据就重复了，有些浪费，但也最简单），对于图片量不大的情况倒是简单的处理方法。
　　PHP-FPM
　　Poppen.de使用了PHP 5.3.x、APC和PHP-FPM，PHP-FPM是启用了100个进程，也是个标配。使用APC使得PHP能减少30%的CPU和内存消耗。Poppen.de竟然使用了symfony作为开发框架，出发点自然是希望快速开发，但从我的使用经验来说，symfony还是太重的一个框架，无论是使用上还是性能上都不是最优的PHP框架。当然，它也提到，框架是有性能损失的，但还可以接受。就PHP框架来说，尽管开源的框架一筐一筐，但没一个真正流行的，而重复的轮子却不停的出现，此种现象很耐人寻味。Poppen.de还使用了Facebook出品的XHProf来分析PHP程序的性能问题。
　　Mysql
　　Poppen.de的数据存在Mysql中，主要就是主从模式。由于现在的数据量并不大，并没有做数据分区处理，当数据量上来时，像垂直和水平分区自然是扩展性能的简单方式。稍显意外的是，Poppen.de使用由4台机器构成的NDB cluster来存储写频繁的数据，比如某个用户页都被谁访问过这样的统计信息。如果NDB cluster能被一些大型应用证明其稳定性，对于解决写频繁的应用（比如Social game？）来说是个不错的选择。Poppen.de的表大多是MyISAM，自然不是很好的选择，不过他们竟然有计划转向XtraDB（自然是经过测试比较后的结果），真是够有个性的。尽管XtraDB很优秀，但官方的innodb显然会更成熟，并且新版也在吸收如XtraDB等存储引擎的优点，选择一个不明前途的第三方引擎还是有些风险的。
　　Memcached
　　cache为王，Poppen.de有45GB、51个结点的cache数据。并且还做了一个系统，当一个表数据变化时，自动作废cache数据，好处自然是减少了应用处理。当然，也可以做一个穿透的数据访问中间件来做cache填充与失效的事情（就像DAL）。Poppen.de似乎也在考虑使用Redis或MongoDB等来将cache操作和数据操作自然的绑在一起。
　　RabbitMQ
　　Poppen.de使用了RabbitMQ来做一些异步job处理。特别有趣的是，它使用了PHP-FPM的一个专有特性，即fastcgi_finish_request() 函数，能够在请求结束前，在把结果返回到客户端后，异步的做诸如连接关闭、发送消息的处理。在消费消息方面，Poppen.de使用了最简单的山寨方法，就是同时运行多个PHP脚本，每个脚本在消费250个job后退出，然后由监控脚本再新起一个消费脚本。当处理不过来时，或者多加脚本或者多加机器来解决。
　　其他
　　Poppen.de使用CouchDB来存储log而是代替人工直接分析日志文件，这个对于单机的日志分析或许会更快更方便些，并且他们有计划将日志可视化，但他们想必现在还没打算做分布式的日志存储与分析的工作。Poppen.de使用了叫做Red5的东西来存储视频（我是不了解了）。Poppen.de还使用Graphite来做数据监控，包括如Memcached的命中率、RabbitMQ状态监控、各机器的负载监控等。当一个网站有一定规模后，这种监控是必不可少的，而通常也是拿现成的工具使用，在必要时做些功能上的扩展。Poppen.de还使用Tsung来做基准测试，比如HTTP请求及各Mysql存储引擎方面的测试。
　　经验
　　1、背靠大树好乘凉，选择技术和工具时要挑成熟、活跃的社区，这样有问题也有途径及时解决。
　　2、了解你所使用的技术的优缺点，发挥它的优点，避开它的缺点。
　　3、扩展工具，让工具更好的满足你。
　　4、敢于尝试。可以看到，越是大公司，在技术选型时越是缩手缩脚，生怕外面的东西不成熟有问题，总相信自己能造成更好的自己能掌控的轮子。而看看Poppen.de上面提到的东西，有多少是你不知道没用过的？再感慨一下，每天都有大量的开源项目出现，一些因为被人关注而众人拾柴，东西就存活下去，一些尽管东西很好但因为无人问津，也就悄无声息的死去。
　　5、度量一切，对网站的各个模块、系统、流量等数字有清晰的认识。
　　6、经验积累、全面把握。不要等到上线时发现新模块的功能不是需要的，不要等到上线时发现模块性能不满足需求。
　　总结
　　Poppen.de还做了些展望，比如将更多的使用erlang产品，这要是个国内的公司，估计很多人会膜拜的。而总结来说，Poppen.de分享的东西真是很实在很实用，是个很开放也很技术流的公司，对中小规模的网站来说是可充分借鉴的。
　　英文原文：Poppen.de Architecture
]]></description>
			<content:encoded><![CDATA[<p>Poppen.de是德国的一家婚姻中介网站，对于该网站的统计数字有：1）200万的用户数，2）2万的并发用户数，3）每天产生30万的私信，4）25万的日登录用户数。这样的网站也就是个中型规模的网站，下面看看这个网站在技术应用及经验方面带来的东西。</p>
<p><span id="more-3278"></span>  Poppen.de目前有200万注册用户数，而项目团队有11个开发人员，两个设计，两个系统管理员。该站点的商业模式采用免费增值模式，用户可以使用搜索用户、给好友发送消息、上载图片和视频等功能。</p>
<p>　　如果用户想享受不受限制发送消息和上载图片，那么就得根据需要支付不同类型的会员服务，视频聊天及网站其他服务也采用同样的策略。</p>
<p>Nginx</p>
<p>　　Poppen.de使用nginx作为web server，包括静态请求和动态请求。特别的，Poppen.de通过nginx来直接从memcache中获取缓存的动态页面内容而不需要经过PHP，一个例子就是请求用户信息页。对于缓存整个动态请求页面内容，这是一种方法，更常见的是使用squid、varnish来做。在请求用户上传图片的处理方面，Poppen.de是将图片上传到统一的文件服务器，而前端的nginx在请求时会做本机的cache处理（不知道它的请求是如何落到nginx上的，如果是随机的，多台nginx本机cache的数据就重复了，有些浪费，但也最简单），对于图片量不大的情况倒是简单的处理方法。</p>
<h2>　　PHP-FPM</h2>
<p>　　Poppen.de使用了PHP 5.3.x、APC和PHP-FPM，PHP-FPM是启用了100个进程，也是个标配。使用APC使得PHP能减少30%的CPU和内存消耗。Poppen.de竟然使用了symfony作为开发框架，出发点自然是希望快速开发，但从我的使用经验来说，symfony还是太重的一个框架，无论是使用上还是性能上都不是最优的PHP框架。当然，它也提到，框架是有性能损失的，但还可以接受。就PHP框架来说，尽管开源的框架一筐一筐，但没一个真正流行的，而重复的轮子却不停的出现，此种现象很耐人寻味。Poppen.de还使用了Facebook出品的XHProf来分析PHP程序的性能问题。</p>
<h2>　　Mysql</h2>
<p>　　Poppen.de的数据存在Mysql中，主要就是主从模式。由于现在的数据量并不大，并没有做数据分区处理，当数据量上来时，像垂直和水平分区自然是扩展性能的简单方式。稍显意外的是，Poppen.de使用由4台机器构成的NDB cluster来存储写频繁的数据，比如某个用户页都被谁访问过这样的统计信息。如果NDB cluster能被一些大型应用证明其稳定性，对于解决写频繁的应用（比如Social game？）来说是个不错的选择。Poppen.de的表大多是MyISAM，自然不是很好的选择，不过他们竟然有计划转向XtraDB（自然是经过测试比较后的结果），真是够有个性的。尽管XtraDB很优秀，但官方的innodb显然会更成熟，并且新版也在吸收如XtraDB等存储引擎的优点，选择一个不明前途的第三方引擎还是有些风险的。</p>
<h2>　　Memcached</h2>
<p>　　cache为王，Poppen.de有45GB、51个结点的cache数据。并且还做了一个系统，当一个表数据变化时，自动作废cache数据，好处自然是减少了应用处理。当然，也可以做一个穿透的数据访问中间件来做cache填充与失效的事情（就像DAL）。Poppen.de似乎也在考虑使用Redis或MongoDB等来将cache操作和数据操作自然的绑在一起。</p>
<h2>　　RabbitMQ</h2>
<p>　　Poppen.de使用了RabbitMQ来做一些异步job处理。特别有趣的是，它使用了PHP-FPM的一个专有特性，即fastcgi_finish_request() 函数，能够在请求结束前，在把结果返回到客户端后，异步的做诸如连接关闭、发送消息的处理。在消费消息方面，Poppen.de使用了最简单的山寨方法，就是同时运行多个PHP脚本，每个脚本在消费250个job后退出，然后由监控脚本再新起一个消费脚本。当处理不过来时，或者多加脚本或者多加机器来解决。</p>
<h2>　　其他</h2>
<p>　　Poppen.de使用CouchDB来存储log而是代替人工直接分析日志文件，这个对于单机的日志分析或许会更快更方便些，并且他们有计划将日志可视化，但他们想必现在还没打算做分布式的日志存储与分析的工作。Poppen.de使用了叫做Red5的东西来存储视频（我是不了解了）。Poppen.de还使用Graphite来做数据监控，包括如Memcached的命中率、RabbitMQ状态监控、各机器的负载监控等。当一个网站有一定规模后，这种监控是必不可少的，而通常也是拿现成的工具使用，在必要时做些功能上的扩展。Poppen.de还使用Tsung来做基准测试，比如HTTP请求及各Mysql存储引擎方面的测试。</p>
<h2>　　经验</h2>
<p>　　1、背靠大树好乘凉，选择技术和工具时要挑成熟、活跃的社区，这样有问题也有途径及时解决。<br />
　　2、了解你所使用的技术的优缺点，发挥它的优点，避开它的缺点。<br />
　　3、扩展工具，让工具更好的满足你。<br />
　　4、敢于尝试。可以看到，越是大公司，在技术选型时越是缩手缩脚，生怕外面的东西不成熟有问题，总相信自己能造成更好的自己能掌控的轮子。而看看Poppen.de上面提到的东西，有多少是你不知道没用过的？再感慨一下，每天都有大量的开源项目出现，一些因为被人关注而众人拾柴，东西就存活下去，一些尽管东西很好但因为无人问津，也就悄无声息的死去。<br />
　　5、度量一切，对网站的各个模块、系统、流量等数字有清晰的认识。<br />
　　6、经验积累、全面把握。不要等到上线时发现新模块的功能不是需要的，不要等到上线时发现模块性能不满足需求。</p>
<h2>　　总结</h2>
<p>　　Poppen.de还做了些展望，比如将更多的使用erlang产品，这要是个国内的公司，估计很多人会膜拜的。而总结来说，Poppen.de分享的东西真是很实在很实用，是个很开放也很技术流的公司，对中小规模的网站来说是可充分借鉴的。</p>
<p>　　英文原文：<a href="http://highscalability.com/blog/2010/4/12/poppende-architecture.html">Poppen.de Architecture</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2010/07/23/poppen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>NoSQL数据库探讨之一为什么要用非关系数据库？</title>
		<link>http://www.helloyi.cn/index.php/2010/07/23/nosql-exploration/</link>
		<comments>http://www.helloyi.cn/index.php/2010/07/23/nosql-exploration/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 08:26:11 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[数据库应用]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=3275</guid>
		<description><![CDATA[随着互联网web2.0网站的兴起，非关系型的数据库现在成了一个极其热门的新领域，非关系数据库产品的发展非常迅速。而传统的关系数据库在应付web2.0网站，特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心，暴露了很多难以克服的问题，例如：
  1、High performance -对数据库高并发读写的需求
     web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息，所以基本上无法使用动态页面静态化技术，因此数据库并发负载非常高，往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住，但是应付上万次SQL写数据请求，硬盘IO就已经无法承受了。其实对于普通的 BBS网站，往往也存在对高并发写请求的需求，例如像JavaEye网站的实时统计在线用户状态，记录热门帖子的点击次数，投票计数等，因此这是一个相当普遍的需求。
     2、Huge Storage -对海量数据的高效率存储和访问的需求
     类似Facebook，twitter，Friendfeed这样的SNS网站，每天用户产生海量的用户动态，以Friendfeed为例，一个月就达到了2.5亿条用户动态，对于关系数据库来说，在一张2.5亿条记录的表里面进行SQL查询，效率是极其低下乃至不可忍受的。再例如大型web网站的用户登录系统，例如腾讯，盛大，动辄数以亿计的帐号，关系数据库也很难应付。
     3、High Scalability&#38;&#38; High Availability-对数据库的高可扩展性和高可用性的需求
     在基于web的架构当中，数据库是最难进行横向扩展的，当一个应用系统的用户量和访问量与日俱增的时候，你的数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说，对数据库系统进行升级和扩展是非常痛苦的事情，往往需要停机维护和数据迁移，为什么数据库不能通过不断的添加服务器节点来实现扩展呢？
     在上面提到的“三高”需求面前，关系数据库遇到了难以克服的障碍，而对于web2.0网站来说，关系数据库的很多主要特性却往往无用武之地，例如：
     1、数据库事务一致性需求
     很多web实时系统并不要求严格的数据库事务，对读一致性的要求很低，有些场合对写一致性要求也不高。因此数据库事务管理成了数据库高负载下一个沉重的负担。
     2、数据库的写实时性和读实时性需求
     对关系数据库来说，插入一条数据之后立刻查询，是肯定可以读出来这条数据的，但是对于很多web应用来说，并不要求这么高的实时性，比方说我（JavaEye的robbin）发一条消息之后，过几秒乃至十几秒之后，我的订阅者才看到这条动态是完全可以接受的。
     3、对复杂的SQL查询，特别是多表关联查询的需求
     任何大数据量的web系统，都非常忌讳多个大表的关联查询，以及复杂的数据分析类型的复杂SQL报表查询，特别是SNS类型的网站，从需求以及产品设计角度，就避免了这种情况的产生。往往更多的只是单表的主键查询，以及单表的简单条件分页查询，SQL的功能被极大的弱化了。
     因此，关系数据库在这些越来越多的应用场景下显得不那么合适了，为了解决这类问题的非关系数据库应运而生，现在这两年，各种各样非关系数据库，特别是键值数据库(Key-Value Store DB)风起云涌，多得让人眼花缭乱。前不久国外刚刚举办了NoSQL Conference，各路NoSQL数据库纷纷亮相，加上未亮相但是名声在外的，起码有超过10个开源的NoSQLDB，例如：Redis，Tokyo Cabinet，Cassandra，Voldemort，MongoDB，Dynomite，HBase，CouchDB，Hypertable， Riak，Tin， Flare， Lightcloud， KiokuDB，Scalaris， Kai， ThruDB， 
&#8230;&#8230;     这些NoSQL数据库，有的是用C/C++编写的，有的是用Java编写的，还有的是用Erlang编写的，每个都有自己的独到之处，看都看不过来了，我(robbin)也只能从中挑选一些比较有特色，看起来更有前景的产品学习和了解一下。这些NoSQL数据库大致可以分为以下的三类：
     一、满足极高读写性能需求的Kye-Value数据库：Redis，Tokyo Cabinet， Flare
     高性能Key-Value数据库的主要特点就是具有极高的并发读写性能，Redis，Tokyo Cabinet， Flare，这3个Key-Value DB都是用C编写的，他们的性能都相当出色，但出了出色的性能，他们还有自己独特的功能：
     1、Redis
     Redis是一个很新的项目，刚刚发布了1.0版本。Redis本质上是一个Key-Value类型的内存数据库，很像memcached，整个数据库统统加载在内存当中进行操作，定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作，Redis的性能非常出色，每秒可以处理超过10万次读写操作，是我知道的性能最快的Key-Value DB。
     Redis的出色之处不仅仅是性能，Redis最大的魅力是支持保存List链表和Set集合的数据结构，而且还支持对List进行各种操作，例如从List两端push和pop数据，取List区间，排序等等，对Set支持各种集合的并集交集操作，此外单个value的最大限制是1GB，不像 memcached只能保存1MB的数据，因此Redis可以用来实现很多有用的功能，比方说用他的List来做FIFO双向链表，实现一个轻量级的高性能消息队列服务，用他的Set可以做高性能的tag系统等等。另外Redis也可以对存入的Key-Value设置expire时间，因此也可以被当作一个功能加强版的memcached来用。
     Redis的主要缺点是数据库容量受到物理内存的限制，不能用作海量数据的高性能读写，并且它没有原生的可扩展机制，不具有scale（可扩展）能力，要依赖客户端来实现分布式读写，因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。目前使用Redis的网站有 github，Engine Yard。
     2、Tokyo Cabinet和Tokoy Tyrant
     TC和TT的开发者是日本人Mikio [...]]]></description>
			<content:encoded><![CDATA[<p>随着互联网web2.0网站的兴起，非关系型的数据库现在成了一个极其热门的新领域，非关系数据库产品的发展非常迅速。而传统的关系数据库在应付web2.0网站，特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心，暴露了很多难以克服的问题，例如：</p>
<p><span id="more-3275"></span>  <span style="font-weight: bold;">1、High performance -对数据库高并发读写的需求</span><br />
     web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息，所以基本上无法使用动态页面静态化技术，因此数据库并发负载非常高，往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住，但是应付上万次SQL写数据请求，硬盘IO就已经无法承受了。其实对于普通的 BBS网站，往往也存在对高并发写请求的需求，例如像JavaEye网站的实时统计在线用户状态，记录热门帖子的点击次数，投票计数等，因此这是一个相当普遍的需求。</p>
<p>     <span style="font-weight: bold;">2、Huge Storage -对海量数据的高效率存储和访问的需求</span><br />
     类似Facebook，twitter，Friendfeed这样的SNS网站，每天用户产生海量的用户动态，以Friendfeed为例，一个月就达到了2.5亿条用户动态，对于关系数据库来说，在一张2.5亿条记录的表里面进行SQL查询，效率是极其低下乃至不可忍受的。再例如大型web网站的用户登录系统，例如腾讯，盛大，动辄数以亿计的帐号，关系数据库也很难应付。</p>
<p>     <span style="font-weight: bold;">3、High Scalability&amp;&amp; High Availability-对数据库的高可扩展性和高可用性的需求</span><br />
     在基于web的架构当中，数据库是最难进行横向扩展的，当一个应用系统的用户量和访问量与日俱增的时候，你的数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说，对数据库系统进行升级和扩展是非常痛苦的事情，往往需要停机维护和数据迁移，为什么数据库不能通过不断的添加服务器节点来实现扩展呢？</p>
<p>     在上面提到的“三高”需求面前，关系数据库遇到了难以克服的障碍，而对于web2.0网站来说，关系数据库的很多主要特性却往往无用武之地，例如：</p>
<p>     <span style="font-size: medium;">1、数据库事务一致性需求</span><br />
     很多web实时系统并不要求严格的数据库事务，对读一致性的要求很低，有些场合对写一致性要求也不高。因此数据库事务管理成了数据库高负载下一个沉重的负担。</p>
<p>     <span style="font-size: medium;">2、数据库的写实时性和读实时性需求</span><br />
     对关系数据库来说，插入一条数据之后立刻查询，是肯定可以读出来这条数据的，但是对于很多web应用来说，并不要求这么高的实时性，比方说我（JavaEye的robbin）发一条消息之后，过几秒乃至十几秒之后，我的订阅者才看到这条动态是完全可以接受的。</p>
<p>     <span style="font-size: medium;">3、对复杂的SQL查询，特别是多表关联查询的需求</span><br />
     任何大数据量的web系统，都非常忌讳多个大表的关联查询，以及复杂的数据分析类型的复杂SQL报表查询，特别是SNS类型的网站，从需求以及产品设计角度，就避免了这种情况的产生。往往更多的只是单表的主键查询，以及单表的简单条件分页查询，SQL的功能被极大的弱化了。</p>
<p>     因此，关系数据库在这些越来越多的应用场景下显得不那么合适了，为了解决这类问题的非关系数据库应运而生，现在这两年，各种各样非关系数据库，特别是键值数据库(Key-Value Store DB)风起云涌，多得让人眼花缭乱。前不久国外刚刚举办了<a href="http://journal.uggedal.com/nosql-east-2009---summary-of-day-1" target="_blank">NoSQL Conference</a>，各路NoSQL数据库纷纷亮相，加上未亮相但是名声在外的，起码有超过10个开源的NoSQLDB，例如：Redis，Tokyo Cabinet，Cassandra，Voldemort，MongoDB，Dynomite，HBase，CouchDB，Hypertable， Riak，Tin， Flare， Lightcloud， KiokuDB，Scalaris， Kai， ThruDB， </p>
<div id="sina_keyword_ad_area2">&#8230;&#8230;     这些NoSQL数据库，有的是用C/C++编写的，有的是用Java编写的，还有的是用Erlang编写的，每个都有自己的独到之处，看都看不过来了，<a href="http://robbin.javaeye.com/" target="_blank">我(robbin)</a>也只能从中挑选一些比较有特色，看起来更有前景的产品学习和了解一下。这些NoSQL数据库大致可以分为以下的三类：</div>
<p>     <span style="font-size: medium; font-weight: bold;">一、满足极高读写性能需求的Kye-Value数据库：Redis，Tokyo Cabinet， Flare</span></p>
<p>     高性能Key-Value数据库的主要特点就是具有极高的并发读写性能，Redis，Tokyo Cabinet， Flare，这3个Key-Value DB都是用C编写的，他们的性能都相当出色，但出了出色的性能，他们还有自己独特的功能：</p>
<p>     1、<a href="http://code.google.com/p/redis/" target="_blank">Redis</a><br />
     Redis是一个很新的项目，刚刚发布了1.0版本。Redis本质上是一个Key-Value类型的内存数据库，很像memcached，整个数据库统统加载在内存当中进行操作，定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作，Redis的性能非常出色，每秒可以处理超过10万次读写操作，是我知道的性能最快的Key-Value DB。</p>
<p>     Redis的出色之处不仅仅是性能，Redis最大的魅力是支持保存List链表和Set集合的数据结构，而且还支持对List进行各种操作，例如从List两端push和pop数据，取List区间，排序等等，对Set支持各种集合的并集交集操作，此外单个value的最大限制是1GB，不像 memcached只能保存1MB的数据，因此Redis可以用来实现很多有用的功能，比方说用他的List来做FIFO双向链表，实现一个轻量级的高性能消息队列服务，用他的Set可以做高性能的tag系统等等。另外Redis也可以对存入的Key-Value设置expire时间，因此也可以被当作一个功能加强版的memcached来用。</p>
<p>     Redis的主要缺点是数据库容量受到物理内存的限制，不能用作海量数据的高性能读写，并且它没有原生的可扩展机制，不具有scale（可扩展）能力，要依赖客户端来实现分布式读写，因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。目前使用Redis的网站有 github，Engine Yard。</p>
<p>     2、<a href="http://1978th.net/" target="_blank">Tokyo Cabinet和Tokoy Tyrant</a><br />
     TC和TT的开发者是日本人Mikio Hirabayashi，主要被用在日本最大的SNS网站mixi.jp上，TC发展的时间最早，现在已经是一个非常成熟的项目，也是Kye-Value 数据库领域最大的热点，现在被广泛的应用在很多很多网站上。TC是一个高性能的存储引擎，而TT提供了多线程高并发服务器，性能也非常出色，每秒可以处理 4-5万次读写操作。</p>
<p>     TC除了支持Key-Value存储之外，还支持保存Hashtable数据类型，因此很像一个简单的数据库表，并且还支持基于column的条件查询，分页查询和排序功能，基本上相当于支持单表的基础查询功能了，所以可以简单的替代关系数据库的很多操作，这也是TC受到大家欢迎的主要原因之一，有一个Ruby的项目<a href="http://github.com/tsukasaoishi/miyazakiresistance" target="_blank">miyazakiresistance</a>将TT的hashtable的操作封装成和ActiveRecord一样的操作，用起来非常爽。</p>
<p>     TC/TT在mixi的实际应用当中，存储了2000万条以上的数据，同时支撑了上万个并发连接，是一个久经考验的项目。TC在保证了极高的并发读写性能的同时，具有可靠的数据持久化机制，同时还支持类似关系数据库表结构的hashtable以及简单的条件，分页和排序操作，是一个很棒的 NoSQL数据库。</p>
<p>     TC的主要缺点是在数据量达到上亿级别以后，并发写数据性能会大幅度下降，<a href="http://bjclark.me/2009/08/04/nosql-if-only-it-was-that-easy/" target="_blank">NoSQL: If Only It Was That Easy</a>提到，他们发现在TC里面插入1.6亿条2-20KB数据的时候，写入性能开始急剧下降。看来是当数据量上亿条的时候，TC性能开始大幅度下降，从TC作者自己提供的mixi数据来看，至少上千万条数据量的时候还没有遇到这么明显的写入性能瓶颈。</p>
<p>     这个是Tim Yang做的一个<a href="http://timyang.net/data/mcdb-tt-redis/" target="_blank">Memcached，Redis和Tokyo Tyrant的简单的性能评测，仅供参考</a></p>
<p>     3、<a href="http://labs.gree.jp/Top/OpenSource/Flare-en.html" target="_blank">Flare</a><br />
     TC是日本第一大SNS网站mixi开发的，而Flare是日本第二大SNS网站green.jp开发的，有意思吧。Flare简单的说就是给 TC添加了scale功能。他替换掉了TT部分，自己另外给TC写了网络服务器，Flare的主要特点就是支持scale能力，他在网络服务端之前添加了一个node server，来管理后端的多个服务器节点，因此可以动态添加数据库服务节点，删除服务器节点，也支持failover。如果你的使用场景必须要让TC可以scale，那么可以考虑flare。</p>
<p>     flare唯一的缺点就是他只支持memcached协议，因此当你使用flare的时候，就不能使用TC的table数据结构了，只能使用TC的key-value数据结构存储。</p>
<p>     <span style="font-size: medium; font-weight: bold;">二、满足海量存储需求和访问的面向文档的数据库：MongoDB，CouchDB</span></p>
<p>     面向文档的非关系数据库主要解决的问题不是高性能的并发读写，而是保证海量数据存储的同时，具有良好的查询性能。MongoDB是用C++开发的，而CouchDB则是Erlang开发的：</p>
<p>     1、<a href="http://www.mongodb.org/display/DOCS/Home" target="_blank">MongoDB</a><br />
     MongoDB是一个介于关系数据库和非关系数据库之间的产品，是非关系数据库当中功能最丰富，最像关系数据库的。他支持的数据结构非常松散，是类似json的bjson格式，因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大，其语法有点类似于面向对象的查询语言，几乎可以实现类似关系数据库单表查询的绝大部分功能，而且还支持对数据建立索引。</p>
<p>     Mongo主要解决的是海量数据的访问效率问题，根据官方的文档，当数据量达到50GB以上的时候，Mongo的数据库访问速度是MySQL的 10倍以上。Mongo的并发读写效率不是特别出色，根据官方提供的性能测试表明，大约每秒可以处理0.5万－1.5次读写请求。对于Mongo的并发读写性能，我（robbin）也打算有空的时候好好测试一下。</p>
<p>     因为Mongo主要是支持海量数据存储的，所以Mongo还自带了一个出色的分布式文件系统GridFS，可以支持海量的数据存储，但我也看到有些评论认为GridFS性能不佳，这一点还是有待亲自做点测试来验证了。</p>
<p>     最后由于Mongo可以支持复杂的数据结构，而且带有强大的数据查询功能，因此非常受到欢迎，很多项目都考虑用MongoDB来替代MySQL来实现不是特别复杂的Web应用，比方说<a href="http://blog.boxedice.com/2009/07/25/choosing-a-non-relational-database-why-we-migrated-from-mysql-to-mongodb/" target="_blank">whywe migrated from MySQL to MongoDB</a>就是一个真实的从MySQL迁移到MongoDB的案例，由于数据量实在太大，所以迁移到了Mongo上面，数据查询的速度得到了非常显著的提升。</p>
<p>     MongoDB也有一个ruby的项目<a href="http://github.com/jnunemaker/mongomapper" target="_blank">MongoMapper</a>，是模仿Merb的DataMapper编写的MongoDB的接口，使用起来非常简单，几乎和DataMapper一模一样，功能非常强大易用。</p>
<p>     2、CouchDB<br />
     CouchDB现在是一个非常有名气的项目，似乎不用多介绍了。但是我却对CouchDB没有什么兴趣，主要是因为CouchDB仅仅提供了基于 HTTP REST的接口，因此CouchDB单纯从并发读写性能来说，是非常糟糕的，这让我立刻抛弃了对CouchDB的兴趣。</p>
<p>     <span style="font-size: medium; font-weight: bold;">三、满足高可扩展性和可用性的面向分布式计算的数据库：</span></p>
<p>     面向scale能力的数据库其实主要解决的问题领域和上述两类数据库还不太一样，它首先必须是一个分布式的数据库系统，由分布在不同节点上面的数据库共同构成一个数据库服务系统，并且根据这种分布式架构来提供online的，具有弹性的可扩展能力，例如可以不停机的添加更多数据节点，删除数据节点等等。因此像Cassandra常常被看成是一个开源版本的Google BigTable的替代品。Cassandra和Voldemort都是用Java开发的：</p>
<p>     1、<a href="http://incubator.apache.org/cassandra/" target="_blank">Cassandra</a><br />
     Cassandra项目是Facebook在2008年开源出来的，随后Facebook自己使用Cassandra的另外一个不开源的分支，而开源出来的Cassandra主要被Amazon的Dynamite团队来维护，并且Cassandra被认为是Dynamite2.0版本。目前除了 Facebook之外，twitter和digg.com都在使用Cassandra。</p>
<p>     Cassandra的主要特点就是它不是一个数据库，而是由一堆数据库节点共同构成的一个分布式网络服务，对Cassandra的一个写操作，会被复制到其他节点上去，对Cassandra的读操作，也会被路由到某个节点上面去读取。对于一个Cassandra群集来说，扩展性能是比较简单的事情，只管在群集里面添加节点就可以了。我看到有文章说Facebook的Cassandra群集有超过100台服务器构成的数据库群集。</p>
<p>     Cassandra也支持比较丰富的数据结构和功能强大的查询语言，和MongoDB比较类似，查询功能比MongoDB稍弱一些，twitter的平台架构部门领导Evan Weaver写了一篇文章介绍Cassandra：<a href="http://blog.evanweaver.com/articles/2009/07/06/up-and-running-with-cassandra/" target="_blank">http://blog.evanweaver.com/articles/2009/07/06/up-and-running-with-cassandra/</a>，有非常详细的介绍。</p>
<p>     Cassandra以单个节点来衡量，其节点的并发读写性能不是特别好，有文章说评测下来Cassandra每秒大约不到1万次读写请求，我也看到一些对这个问题进行质疑的评论，但是评价Cassandra单个节点的性能是没有意义的，真实的分布式数据库访问系统必然是n多个节点构成的系统，其并发性能取决于整个系统的节点数量，路由效率，而不仅仅是单节点的并发负载能力。</p>
<p>     2、<a href="http://project-voldemort.com/" target="_blank">Voldemort</a><br />
     Voldemort是个和Cassandra类似的面向解决scale问题的分布式数据库系统，Cassandra来自于Facebook这个 SNS网站，而Voldemort则来自于Linkedin这个SNS网站。说起来SNS网站为我们贡献了n多的NoSQL数据库，例如 Cassandar，Voldemort，Tokyo Cabinet，Flare等等。Voldemort的资料不是很多，因此我没有特别仔细去钻研，Voldemort官方给出Voldemort的并发读写性能也很不错，每秒超过了1.5万次读写。</p>
<p>     从Facebook开发Cassandra，Linkedin开发Voldemort，我们也可以大致看出国外大型SNS网站对于分布式数据库，特别是对数据库的scale能力方面的需求是多么殷切。前面我（robbin）提到，web应用的架构当中，web层和app层相对来说都很容易横向扩展，唯有数据库是单点的，极难scale，现在Facebook和Linkedin在非关系型数据库的分布式方面探索了一条很好的方向，这也是为什么现在 Cassandra这么热门的主要原因。</p>
<p>     如今，NoSQL数据库是个令人很兴奋的领域，总是不断有新的技术新的产品冒出来，改变我们已经形成的固有的技术观念，我自己（robbin）稍微了解了一些，就感觉自己深深的沉迷进去了，可以说NoSQL数据库领域也是博大精深的，我（robbin）也只能浅尝辄止，我（robbin）写这篇文章既是自己一点点钻研心得，也是抛砖引玉，希望吸引对这个领域有经验的朋友来讨论和交流。</p>
<p>     从我（robbin）个人的兴趣来说，分布式数据库系统不是我能实际用到的技术，因此不打算花时间深入，而其他两个数据领域（高性能 NoSQLDB和海量存储NoSQLDB）都是我很感兴趣的，特别是Redis，TT/TC和MongoDB这3个NoSQL数据库，因此我接下来将写三篇文章分别详细介绍这3个数据库。作者: <a href="http://robbin.javaeye.com/" target="_blank">robbin</a>  来源: <a href="http://robbin.javaeye.com/blog/524977" target="_blank">javaeye</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2010/07/23/nosql-exploration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google IE插件Chrome Frame测试版</title>
		<link>http://www.helloyi.cn/index.php/2010/06/15/google-ie-chrome-frame-beta/</link>
		<comments>http://www.helloyi.cn/index.php/2010/06/15/google-ie-chrome-frame-beta/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 02:22:11 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[IT资讯]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=3271</guid>
		<description><![CDATA[Google发布了 Chrome Frame的Beta公测版本。Chrome Frame兼容XP、Vista、Windows 7系统，适用于IE6、IE7、IE8，安装该插件后，可以让用户的浏览器外观依然是IE的菜单和界面，但用户在浏览网页时，实际上使用的是Google Chrome浏览器内核。
      Google曾表示，下载使用Chrome Frame插件后，你可以获得更快的网页响应体验（根据Sunspider JavaScript基准测试，安装Chrome Frame后IE的速度有显著提升，IE8在安装该插件后比IE8自身快10倍左右）；Chrome Frame的开放技术使得网站可以为用户提供更多新功能；最重要的一点，用户可以像从前一样上网冲浪，Chrome Frame在浏览器后台起作用，用户丝毫无需改变之前的浏览习惯。
             有了Chrome Frame，开发人员也不用担心IE不支持HTML5等Web标准的问题了，就算是在IE中也可以使用最新Web技术。无论是更快的JavaScript 引擎还是当前的Web技术，比如HTML5的离线功能以及，抑或是最新的CSS/Layout操作，Google Chrome Frame使得IE可以完全支持这些功能，而且无需任何额外编码，也不用测试不同的浏览器版本。&#60;meta http-equiv=&#8221;X-UA-Compatible&#8221; content=&#8221;chrome=1&#8243;&#62; 想要使用Google Chrome Frame的开发人员只需做一件事，那就是添加如上标签，当Google Chrome Frame检测到这个标签时它将自动转换到Google Chrome的WebKit渲染引擎。
Chrome Frame Beta测试版官方下载：
http://www.google.com/chromeframe/
]]></description>
			<content:encoded><![CDATA[<p>Google发布了<a href="http://www.google.com/chromeframe/"> </a><span style="font-weight: bold;"><a href="http://www.google.com/chromeframe/">Chrome Frame</a><span style="font-weight: normal;">的Beta公测版本。<strong>Chrome Frame兼容XP、Vista、Windows 7系统</strong>，<strong>适用于IE6、IE7、IE8</strong>，安装该插件后，可以让用户的浏览器外观依然是IE的菜单和界面，但用户在浏览网页时，实际上使用的是Google Chrome浏览器内核。</span></span></p>
<p><span id="more-3271"></span><span style="font-weight: bold;"><span style="font-weight: normal;">      </span></span>Google曾表示，下载使用Chrome Frame插件后，你可以获得更快的网页响应体验（根据Sunspider JavaScript基准测试，安装Chrome Frame后IE的速度有显著提升，IE8在安装该插件后比IE8自身快10倍左右）；Chrome Frame的开放技术使得网站可以为用户提供更多新功能；最重要的一点，用户可以像从前一样上网冲浪，Chrome Frame在浏览器后台起作用，用户丝毫无需改变之前的浏览习惯。<br />
             有了Chrome Frame，开发人员也不用担心IE不支持HTML5等Web标准的问题了，就算是在IE中也可以使用最新Web技术。无论是更快的JavaScript 引擎还是当前的Web技术，比如HTML5的离线功能以及，抑或是最新的CSS/Layout操作，Google Chrome Frame使得IE可以完全支持这些功能，而且无需任何额外编码，也不用测试不同的浏览器版本。&lt;meta http-equiv=&#8221;X-UA-Compatible&#8221; content=&#8221;chrome=1&#8243;&gt; 想要使用Google Chrome Frame的开发人员只需做一件事，那就是添加如上标签，当Google Chrome Frame检测到这个标签时它将自动转换到Google Chrome的WebKit渲染引擎。</p>
<p>Chrome Frame Beta测试版<strong>官方下载</strong>：</p>
<p><a href="http://www.google.com/chromeframe/" target="_blank">http://www.google.com/chromeframe/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2010/06/15/google-ie-chrome-frame-beta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web开发者必备的十大资源网站</title>
		<link>http://www.helloyi.cn/index.php/2010/05/31/10-must-have-resources-for-web-developers/</link>
		<comments>http://www.helloyi.cn/index.php/2010/05/31/10-must-have-resources-for-web-developers/#comments</comments>
		<pubDate>Mon, 31 May 2010 06:41:45 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[WEB编程技术]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=3269</guid>
		<description><![CDATA[要成为一名优秀的Web开发者，并没有捷径可走，只能通过自己一步一步的努力去实现，但如果你拥有一些优秀的开发工具，则可以大大提高你的开发效率。本文将从中挑选出十个最佳工具，供大家选择使用。
　1、MySQL Format Date
　　网址：http://www.mysqlformatdate.com/
　　MySQL Format Date可以帮助开发者使用MySQLDATE_FORMAT函数来规范化自己的日期数值。开发者只需选择一个通用日期格式，然后对其进行修改来满足自己的需求。页面底部将自动生成MySQLDATE_FORMAT代码，开发者可以直接将它们拷贝粘贴到自己的代码中。
　　2、Script Src
　　网址：http://scriptsrc.net
　　为了及时发现自己所喜爱的Javascript代码库是否有最新版本，Web开发者可能需要不断定期在网络上搜索，这无疑会令人疲倦。ScriptSrc.net则已经把jQuery、Mootools、Prototype和更多内容汇集到一个网页中，Web开发者只需要点击一下，就能把相关最新版链接地址复制到自己浏览器的剪贴板中。
　　3、Em Chart
　　网址：http://aloestudios.com/tools/emchart/
　　我从来不喜欢在CSS文件中使用ems来定义文本尺寸，但有时候却又不得不使用它。这时Em Chart可以帮助你省时省力，它能够把ems转化为像素值。
　　4、Twitter API Explorer
　　网址：http://twitapi.com/explore/
　　如果你在自己创建的站点中使用了Twitter API，你一定会喜欢Twitter API Explorer网站，它可以让你通过Twitter API进行搜索。更绝的是，它可以生成立即可用的代码片段。你和你的客户能够实现即时获取。
　　5、Browser Sandbox
　　网址：http://spoon.net/browsers
　　毫无疑问，跨浏览器兼容性是Web开发者在日常工作中不得不面对的最大问题之一。Browser Sandbox让开发者可以从网络上运行任何Windows浏览器。唯一的缺点是，你必须使用Windows系统，该应用不能运行在苹果Mac和GNU/Linux系统之上。
　　6、PHP Forms
　　网址：http://www.phpform.org/
　　Web表单是网站最重要的部分之一，但创建它们也是一件非常耗时的工作。不过，PHP Forms网站可以免费加速你的表单开发工作，它能够让你创建满足多数网站需求的高级表单。
　　7、.htaccess editor
　　网址：http://www.htaccesseditor.com/en.shtml
　　对任何网站来说，.htaccess文件是必用的。不过即使你还不知道怎么编写一个.htaccess文件，也不用感到担忧，该网站通过一个向导来帮助你创建.htaccess文件。虽然它不支持非常高级的处理工作，但对于你创建的95%网站来说，它可以满足需要。
　　8、Smush it!
　　网址：http://developer.yahoo.com/yslow/smushit/
　　就信息表达来说，一个图片的价值可能胜过一千句话。但图片也以带宽杀手而闻名。通过使用Photoshop等软件，可以把图片优化以适应Web；但是如果你没有这样的软件或不会使用它，Smushit也可以满足你的需要。这个在线工具的开发者是雅虎开发者网络，它可以在不降低图片质量的前提下降低图片大小。
　　9、CSS Compressor
　　网址：http://www.csscompressor.com/
　　假如一个网站拥有许多不同的页面布局，其CSS文件往往会变得非常庞大，并且占用大量服务器带宽。CSS Compressor可以通过移除注释、缩减和更多信息，来降低任何CSS文件的体积。另外，你还可以通过该工具配置压缩等级来满足自己的需要。
　　10、Test everything
　　网址：http://tester.jonasjohn.de/
　　该网站是你必须收藏的精品网站之一。从其名称可以看出，它能够让你测试许多事情，诸如XHTML和CSS标记、PageRank和反向链接等。  原文：10 must have resources for Web Developers
]]></description>
			<content:encoded><![CDATA[<p>要成为一名优秀的Web开发者，并没有捷径可走，只能通过自己一步一步的努力去实现，但如果你拥有一些优秀的开发工具，则可以大大提高你的开发效率。本文将从中挑选出十个最佳工具，供大家选择使用。</p>
<p><span id="more-3269"></span><strong>　1、MySQL Format Date</strong></p>
<p>　　网址：<a href="http://www.mysqlformatdate.com/" target="_blank"><span style="color: #0000ff;">http://www.mysqlformatdate.com/</span></a></p>
<p>　　MySQL Format Date可以帮助开发者使用MySQLDATE_FORMAT函数来规范化自己的日期数值。开发者只需选择一个通用日期格式，然后对其进行修改来满足自己的需求。页面底部将自动生成MySQLDATE_FORMAT代码，开发者可以直接将它们拷贝粘贴到自己的代码中。</p>
<p><strong>　　2、Script Src</strong></p>
<p>　　网址：<a href="http://scriptsrc.net/" target="_blank"><span style="color: #0000ff;">http://scriptsrc.net</span></a></p>
<p>　　为了及时发现自己所喜爱的Javascript代码库是否有最新版本，Web开发者可能需要不断定期在网络上搜索，这无疑会令人疲倦。ScriptSrc.net则已经把jQuery、Mootools、Prototype和更多内容汇集到一个网页中，Web开发者只需要点击一下，就能把相关最新版链接地址复制到自己浏览器的剪贴板中。</p>
<p><strong>　　3、Em Chart</strong></p>
<p>　　网址：<a href="http://aloestudios.com/tools/emchart/" target="_blank"><span style="color: #0000ff;">http://aloestudios.com/tools/emchart/</span></a></p>
<p>　　我从来不喜欢在CSS文件中使用ems来定义文本尺寸，但有时候却又不得不使用它。这时Em Chart可以帮助你省时省力，它能够把ems转化为像素值。</p>
<p><strong>　　4、Twitter API Explorer</strong></p>
<p>　　网址：<a href="http://twitapi.com/explore/" target="_blank"><span style="color: #0000ff;">http://twitapi.com/explore/</span></a></p>
<p>　　如果你在自己创建的站点中使用了Twitter API，你一定会喜欢Twitter API Explorer网站，它可以让你通过Twitter API进行搜索。更绝的是，它可以生成立即可用的代码片段。你和你的客户能够实现即时获取。</p>
<p><strong>　　5、Browser Sandbox</strong></p>
<p>　　网址：<a href="http://spoon.net/browsers" target="_blank"><span style="color: #0000ff;">http://spoon.net/browsers</span></a></p>
<p>　　毫无疑问，跨浏览器兼容性是Web开发者在日常工作中不得不面对的最大问题之一。Browser Sandbox让开发者可以从网络上运行任何Windows浏览器。唯一的缺点是，你必须使用Windows系统，该应用不能运行在苹果Mac和GNU/Linux系统之上。</p>
<p><strong>　　6、PHP Forms</strong></p>
<p>　　网址：<a href="http://www.phpform.org/" target="_blank"><span style="color: #0000ff;">http://www.phpform.org/</span></a></p>
<p>　　Web表单是网站最重要的部分之一，但创建它们也是一件非常耗时的工作。不过，PHP Forms网站可以免费加速你的表单开发工作，它能够让你创建满足多数网站需求的高级表单。</p>
<p><strong>　　7、.htaccess editor</strong></p>
<p>　　网址：<a href="http://www.htaccesseditor.com/en.shtml" target="_blank"><span style="color: #0000ff;">http://www.htaccesseditor.com/en.shtml</span></a></p>
<p>　　对任何网站来说，.htaccess文件是必用的。不过即使你还不知道怎么编写一个.htaccess文件，也不用感到担忧，该网站通过一个向导来帮助你创建.htaccess文件。虽然它不支持非常高级的处理工作，但对于你创建的95%网站来说，它可以满足需要。</p>
<p><strong>　　8、Smush it!</strong></p>
<p>　　网址：<a href="http://developer.yahoo.com/yslow/smushit/" target="_blank">htt<span style="color: #0000ff;">p://developer.yahoo.com/yslow/smushit/</span></a></p>
<p>　　就信息表达来说，一个图片的价值可能胜过一千句话。但图片也以带宽杀手而闻名。通过使用Photoshop等软件，可以把图片优化以适应Web；但是如果你没有这样的软件或不会使用它，Smushit也可以满足你的需要。这个在线工具的开发者是雅虎开发者网络，它可以在不降低图片质量的前提下降低图片大小。</p>
<p><strong>　　9、CSS Compressor</strong></p>
<p>　　网址：<a href="http://www.csscompressor.com/" target="_blank"><span style="color: #0000ff;">http://www.csscompressor.com/</span></a></p>
<p>　　假如一个网站拥有许多不同的页面布局，其CSS文件往往会变得非常庞大，并且占用大量服务器带宽。CSS Compressor可以通过移除注释、缩减和更多信息，来降低任何CSS文件的体积。另外，你还可以通过该工具配置压缩等级来满足自己的需要。</p>
<p><strong>　　10、Test everything</strong></p>
<p>　　网址：<a href="http://tester.jonasjohn.de/" target="_blank"><span style="color: #0000ff;">http://tester.jonasjohn.de/</span></a></p>
<p>　　该网站是你必须收藏的精品网站之一。从其名称可以看出，它能够让你测试许多事情，诸如XHTML和CSS标记、PageRank和反向链接等。  原文：<a href="http://variable3.com/blog/2010/05/10-must-have-resources-for-web-developers/" target="_blank">10 must have resources for Web Developers</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2010/05/31/10-must-have-resources-for-web-developers/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Google 发布全球 TOP 1000 网站榜单</title>
		<link>http://www.helloyi.cn/index.php/2010/05/31/google-top-1000-website/</link>
		<comments>http://www.helloyi.cn/index.php/2010/05/31/google-top-1000-website/#comments</comments>
		<pubDate>Mon, 31 May 2010 02:19:31 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[IT资讯]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=3265</guid>
		<description><![CDATA[下面是前20名的网站，全榜单请看这里,前十名的网站中，国内有baidu和qq上榜。前一百名中，国内网站占有23席位。
 

]]></description>
			<content:encoded><![CDATA[<p>下面是前20名的网站，全榜单请看<a href="http://www.google.com/adplanner/static/top1000/" target="_blank">这里</a>,前十名的网站中，国内有baidu和qq上榜。前一百名中，国内网站占有23席位。</p>
<p><span id="more-3265"></span> </p>
<p><img class="alignnone size-full wp-image-3266" title="google-100website" src="http://www.helloyi.cn/index.php?feedimage=wp-content/uploads/2010/05/google-100website.jpg" alt="google-100website" width="633" height="593" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2010/05/31/google-top-1000-website/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google免费网页字体</title>
		<link>http://www.helloyi.cn/index.php/2010/05/20/google-font/</link>
		<comments>http://www.helloyi.cn/index.php/2010/05/20/google-font/#comments</comments>
		<pubDate>Thu, 20 May 2010 06:02:10 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[网页设计]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=3261</guid>
		<description><![CDATA[Google发布了18款在线免费网页字体服务，但与 Monotype Web Fonts、FontShop 等字体商不同，Google 这次开放的字体与它其他很多服务一样，完全免费。但是使用过发现对中文字体效果无效：需要使用google字体只需要调用google font api即可:
了解Google在线字体的话，请到官方主页http://code.google.com/webfonts
详细使用方法http://code.google.com/apis/webfonts/docs/getting_started.html
]]></description>
			<content:encoded><![CDATA[<p>Google发布了18款在线免费网页字体服务，但与 Monotype Web Fonts、FontShop 等字体商不同，Google 这次开放的字体与它其他很多服务一样，完全免费。但是使用过<span style="color: #ff0000;">发现对中文字体效果无效</span>：需要使用google字体只需要调用google font api即可:</p>
<p><span id="more-3261"></span>了解Google在线字体的话，请到官方主页<a href="http://code.google.com/webfonts">http://code.google.com/webfonts</a></p>
<p>详细使用方法<a href="http://code.google.com/apis/webfonts/docs/getting_started.html">http://code.google.com/apis/webfonts/docs/getting_started.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2010/05/20/google-font/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>最新Dreamweaver CS5支持HTML 5 扩展包</title>
		<link>http://www.helloyi.cn/index.php/2010/05/20/dreamweaver-cs5-html5/</link>
		<comments>http://www.helloyi.cn/index.php/2010/05/20/dreamweaver-cs5-html5/#comments</comments>
		<pubDate>Thu, 20 May 2010 03:15:35 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[酷软推荐]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=3256</guid>
		<description><![CDATA[在今天Google I/O 大会的 Adobe CTO Keynote 演示了 Adobe CS5 对 HTML5 的多种支持，同时 Adobe Labs 放出了 Dreamweaver CS5 的 HTML5 扩展包。 通过该扩展包，DW CS5 将获得以下新特性：

多屏幕预览面板，适用于同时为不同设备开发 HTML 应用
支持对 HTML 5 新增的标签库的代码提示
支持对 CSS 3 代码提示
增加 Video 和 Audio 标签的实时预览
改进 CSS 3 实时预览效果
改进设计视图下对 HTML 5 新增标签的渲染效果

点击这 里下载。点击观看 Adobe TV 的视频介绍.
Adobe Dreamweaver CS5 软件带来哪些新特性和功能:
新增功能如下：      1,尽享对 WordPress、Joomla! 和 Drupal 等内容管理系统框架的创作和测试支持
                                   2,以可视方式显示详细的 CSS 框模型，轻松切换 [...]]]></description>
			<content:encoded><![CDATA[<p>在今天Google I/O 大会的 Adobe CTO Keynote 演示了 Adobe CS5 对 HTML5 的多种支持，同时 Adobe Labs 放出了 Dreamweaver CS5 的 HTML5 扩展包。 通过该扩展包，DW CS5 将获得以下新特性：</p>
<ul>
<li>多屏幕预览面板，适用于同时为不同设备开发 HTML 应用</li>
<li>支持对 HTML 5 新增的标签库的代码提示<span id="more-3256"></span></li>
<li>支持对 CSS 3 代码提示</li>
<li>增加 Video 和 Audio 标签的实时预览</li>
<li>改进 CSS 3 实时预览效果</li>
<li>改进设计视图下对 HTML 5 新增标签的渲染效果</li>
</ul>
<p>点击<a onclick="javascript:pageTracker._trackPageview('/outbound/article/download.macromedia.com');" href="http://download.macromedia.com/pub/labs/html5pack/html5pack_p1_051910.zxp">这 里</a>下载。点击观看 <a onclick="javascript:pageTracker._trackPageview('/outbound/article/tv.adobe.com');" href="http://tv.adobe.com/">Adobe TV</a> 的视频介绍.</p>
<p>Adobe Dreamweaver CS5 软件带来哪些新特性和功能:</p>
<p>新增功能如下：      1,尽享对 WordPress、Joomla! 和 Drupal 等内容管理系统框架的创作和测试支持</p>
<p>                                   2,以可视方式显示详细的 CSS 框模型，轻松切换 CSS 属性并且无需读取代码或使用其他实用程序。与 Adobe BrowserLab** 集成 新增功能.</p>
<p>                                 3，支持CSS3的属性，借助更新和简化的 CSS Starter 布局，快速启动基于标准的网站计  </p>
<p>                                  4，PHP 自定义类代码提示。</p>
<p>                              5， Subversion 支持 增强功能：借助增强的 Subversion 软件支持，提高协作、版本控制的环境中的站点文件管理效率</p>
<p>下载Dreamweaver CS5和HTML 5 扩展包套件内有注册码 <a href="http://u.115.com/file/">http://u.115.com/file/</a>   提取码t3cefc8ae3</p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2010/05/20/dreamweaver-cs5-html5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>20个免费PDF格式电子书下载网站</title>
		<link>http://www.helloyi.cn/index.php/2010/05/07/20-free-pdf-website/</link>
		<comments>http://www.helloyi.cn/index.php/2010/05/07/20-free-pdf-website/#comments</comments>
		<pubDate>Fri, 07 May 2010 13:15:49 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[免费资源]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=3252</guid>
		<description><![CDATA[我们认为这是同样重要的是PDF格式的电子书。有一些PDF格式的电子书在互联网上，它包含了很多有用的信息，如手册，指南等
用于PDF搜索搜索引擎的正常使用可能会有点混乱，你得到的结果可以有一个正常的网站，以及混合。为了帮助您为您的PDF电子书与想要搜寻的关键字，这里有22个PDF搜寻引擎，您可以尝试：
1. PDF-Search-Engine
2. PDFXP
3. Search-PDF-Books
4. PDF Rapid4Me
5. TooDoc
6. OpenPDF
7. PDFQueen
8. Data-Sheet
9. PDFFind
10. eBook-Search-Engine
11. PDFOne
12. Live-PDF
13. aeroPDF
14. GGiaro
15. India PDF Search Engine
16. PDFeye
17. PDFtrace
18. PDF-searcher
19. PDFlost
20. PDFSearchEngine
]]></description>
			<content:encoded><![CDATA[<p><span id="result_box"><span style="background-color: #ffffff;" title="Another important search engine that we think that it is also important is ebook in PDF.">我们认为这是同样重要的是PDF格式的电子书。</span><span style="background-color: #ffffff;" title="There are a lot of ebook in PDF format on the Internet and it contains useful information such as manual, guides and etc.">有一些PDF格式的电子书在互联网上，它包含了很多有用的信息，如手册，指南等<br />
</span><span style="background-color: #ffffff;" title="Searching for PDF using the normal search engine might be a little confusing and the results that you get can can have a mixed of normal websites as well.">用于PDF搜索搜索引擎的正常使用可能会有点混乱，你得到的结果可以有一个正常的网站，以及混合。</span><span style="background-color: #ffffff;" title="To help you search for the PDF ebook that you want with keyword, here are 22 PDF search engines that you can try:">为了帮助您为您的PDF电子书与想要搜寻的关键字，这里有22个PDF搜寻引擎，您可以尝试：</span></span></p>
<p><span><span style="background-color: #ffffff;" title="To help you search for the PDF ebook that you want with keyword, here are 22 PDF search engines that you can try:"><span id="more-3252"></span></span><span style="background-color: #ffffff;" title="To help you search for the PDF ebook that you want with keyword, here are 22 PDF search engines that you can try:">1. <strong><a href="http://www.pdf-search-engine.com/"><span style="color: #a91b33;">PDF-Search-Engine</span></a></strong><br />
2. <strong><a href="http://www.pdfxp.com/"><span style="color: #a91b33;">PDFXP</span></a></strong><br />
3. <strong><a href="http://search-pdf-books.com/"><span style="color: #a91b33;">Search-PDF-Books</span></a></strong><br />
4. <strong><a href="http://pdf.rapid4me.com/"><span style="color: #a91b33;">PDF Rapid4Me</span></a></strong><br />
5. <strong><a href="http://www.toodoc.com/"><span style="color: #a91b33;">TooDoc</span></a></strong><br />
6. <strong><a href="http://openpdf.com/"><span style="color: #a91b33;">OpenPDF</span></a></strong><br />
7. <strong><a href="http://www.pdfqueen.com/"><span style="color: #a91b33;">PDFQueen</span></a></strong><br />
8. <strong><a href="http://www.data-sheet.net/"><span style="color: #a91b33;">Data-Sheet</span></a></strong><br />
9. <strong><a href="http://pdfind.com/"><span style="color: #a91b33;">PDFFind</span></a></strong><br />
10. <strong><a href="http://www.ebook-search-engine.com/"><span style="color: #a91b33;">eBook-Search-Engine</span></a></strong><br />
11. <strong><a href="http://www.pdfone.com/"><span style="color: #a91b33;">PDFOne</span></a></strong><br />
12. <strong><a href="http://live-pdf.com/"><span style="color: #a91b33;">Live-PDF</span></a></strong><br />
13. <strong><a href="http://www.aeropdf.com/"><span style="color: #a91b33;">aeroPDF</span></a></strong><br />
14. <strong><a href="http://www.ggiaro.com/"><span style="color: #a91b33;">GGiaro</span></a></strong><br />
15. <strong><a href="http://www.pdfsearchengine.in/"><span style="color: #a91b33;">India PDF Search Engine</span></a></strong><br />
16. <strong><a href="http://www.pdfeye.com/"><span style="color: #a91b33;">PDFeye</span></a></strong><br />
17. <strong><a href="http://pdftrace.com/"><span style="color: #a91b33;">PDFtrace</span></a></strong><br />
18. <strong><a href="http://www.pdf-searcher.com/"><span style="color: #a91b33;">PDF-searcher</span></a></strong><br />
19. <strong><a href="http://pdflost.com/"><span style="color: #a91b33;">PDFlost</span></a></strong><br />
20. <strong><a href="http://www.pdfsearchengine.org/"><span style="color: #a91b33;">PDFSearchEngine</span></a></strong></span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2010/05/07/20-free-pdf-website/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Internet Explorer 8 性能优化白皮书</title>
		<link>http://www.helloyi.cn/index.php/2010/05/06/internet-explorer-8-2/</link>
		<comments>http://www.helloyi.cn/index.php/2010/05/06/internet-explorer-8-2/#comments</comments>
		<pubDate>Thu, 06 May 2010 06:53:30 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[免费资源]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=3247</guid>
		<description><![CDATA[微软前段时间发布了一份关于 Windows Internet Explorer 8 浏览器（以下简称为 IE 8）性能优化的白皮书《Windows Internet Explorer 8 Performance White Paper》，指导最终用户如何优化 IE 8 获得最佳的浏览器体验。笔者将其全文翻译为了中文，并添加了少许注释，供广大 IE 8 用户参考。以下以微软雅黑字体显示白皮书的译文、以 Arial 字体显示笔者的注释。《Windows Internet Explorer 8 Performance White Paper》译稿：
基础部分：提高 Windows Internet Explorer 8 的性能
★ 指导最终用户优化 IE 8 以获得最佳性能
IE 浏览器是当今最流行、最受大众信任的浏览器之一。自从 1995 年首次发布以来，IE 一直致力于帮助 Windows 计算机用户使用 Internet。IE 历代版本均针对浏览器的性能与稳定性有所升级、确保用户在浏览 Internet 时拥有出众的体验，最新的 IE 8 亦同时在最终用户生产力与浏览器性能两方面引入了重要改进。
IE 8 的设计初衷是成为一种可以迅速启动并载入页面的高效浏览器。“新建选项卡 －接着您想做什么”向导可以指导用户更高效、更简单地浏览 Internet。IE 8 [...]]]></description>
			<content:encoded><![CDATA[<p><span onclick="tagshow(event)">微软前段时间</span>发布了一份关于 <span onclick="tagshow(event)">Windows</span> Internet Explorer 8 浏览器（以下简称为 IE 8）性能优化的白皮书《Windows Internet Explorer 8 Performance White Paper》，指导最终用户如何优化 IE 8 获得最佳的浏览器体验。笔者将其全文<span onclick="tagshow(event)">翻译</span>为了中文，并添加了少许注释，供广大 IE 8 用户参考。以下以微软雅黑字体显示白皮书的译文、以 Arial 字体显示笔者的注释。《Windows Internet Explorer 8 Performance White Paper》译稿：<br />
<span id="more-3247"></span>基础部分：提高 Windows Internet Explorer 8 的性能</p>
<p>★ 指导最终用户优化 IE 8 以获得最佳性能</p>
<p>IE 浏览器是当今最流行、最受大众信任的浏览器之一。自从 1995 年首次发布以来，IE 一直致力于帮助 Windows 计算机用户使用 Internet。IE 历代版本均针对浏览器的性能与稳定性有所升级、确保用户在浏览 Internet 时拥有出众的体验，最新的 IE 8 亦同时在最终用户生产力与浏览器性能两方面引入了重要改进。</p>
<p>IE 8 的设计初衷是成为一种可以迅速启动并载入页面的高效浏览器。“新建选项卡 －接着您想做什么”向导可以指导用户更高效、更简单地浏览 Internet。IE 8 用时开创了很多领先业界的创新性改进，例如用于提高浏览器稳定性的选项卡进程隔离技术（Tab Isolation）、自动崩溃恢复技术（Automatic Crash Recovery）等。IE 8 的这些性能改进帮助超过三亿的用户提升了 Web 浏览体验。</p>
<p>这份白皮书将帮助您学习如何解决一些寻常的因为 IE 8 配置不当引起的网络响应缓慢问题。我们将在复杂的浏览器系统中为您剖析一些有关如何提升 IE 8 性能的提示与技巧，使您尽快学习掌握。这些技巧将由易而难介绍给您，因此您可以尝试学习尽量多的方法，直到您满意为止。</p>
<p>如果您正在使用最新的 Windows 7 操作系统，IE 8 浏览器已经内置在您的计算机中。如果您正在使用 Windows XP 或 Windows Vista，您需要首先安装单独发布的 IE 8。</p>
<p>请访问 <a href="http://www.microsoft.com/china/windows/internet-explorer" target="_blank">http://www.microsoft.com/china/windows/internet-explorer</a> 获取更多信息。</p>
<p>★ 什么因素会影响 IE 8 的性能</p>
<p>当您点击 IE 浏览器的蓝色 e 图标、打开 Gmail 或更新您的 Facebook 时，您可能没有意识到有多少软件正在后台工作。大多数用户并不在意 Internet 是一个多么复杂的系统，但 IE 浏览器可能是这个系统的所有角色中对您影响最直接的一个。IE 浏览器的性能由许多不同的因素共同决定：计算机中您知道的或不知道的各种软件、Internet 连接速率、您浏览的网站的速率&#8230;&#8230; 等等，我们列出的只是一小部分。</p>
<p>由非微软公司开发的第三方软件可能会嵌入 IE 浏览器中。尽管我们在工作中会与这些第三方公司保持密切的交流，提供必要的指导帮助他们编写可以为用户带来良好 Web 体验的软件，但我们却无法保证他们编写的代码均能达到预期的高质量。</p>
<p>IE 浏览器同时要花费时间与可能存在于计算机中的所有杀毒软件、防火墙及其它安全防护软件打交道。有时这些时间的花费可能是重复的、并会引起 IE 浏览器出现不必要的响应缓慢。</p>
<p>★ 什么是浏览器加载项</p>
<p>加载项是指为浏览器添加扩展功能的特殊软件。提到加载项一般涉及插件、扩展组件、工具栏等，通常是由非微软的第三方厂商编写。有些加载项可以在浏览器中直观地看见、有些则以静默的方式运行于后台。我们不记实名的遥测数据显示，每位 IE 8 用户平均拥有五六个已安装的加载项。下面是一份 2009 年 7 月全球 IE 8 用户最常使用的二十个加载项列表（按照流行程度排序）：</p>
<p>1. 谷歌工具栏；<br />
2. Windows Live 登录助手；<br />
3. Adobe PDF Reader；<br />
4. Windows Live 工具栏；<br />
5. 雅虎工具栏；<br />
6. JAVA 插件；<br />
7. 迅雷下载管理器；<br />
8. 金山浏览器保护盾；<br />
9. AVG 安全防护工具栏；<br />
10.Skype；<br />
11.诺顿 NIS 安全防护；<br />
12.麦克菲安全防护；<br />
13.卡巴斯基 KIS 安全防护；<br />
14.MSN 工具栏；<br />
15.QQ 工具栏；<br />
16.百度工具栏；<br />
17.AskBar；<br />
18.谷歌浏览器地址错误重定向；<br />
19.Spybot Search &amp; Destroy；<br />
20.Adware.StickyPops。</p>
<p>尽管浏览器加载项可以为浏览器添加良好的新功能，但如果编写得不好也会带来影响性能的问题。绝大多数浏览器崩溃是由加载项引起的，IE 8 因加载项引起的崩溃占 70% 以上。由于加载项引起的 IE 8 响应缓慢也很常见，特别是在您打开新浏览器窗口或新选项卡时。</p>
<p>随着使用时间增加，浏览器会积累一些可能影响浏览器性能的加载项。已安装的加载项可能会在用户不知道他安装了什么样的加载项的情况下自动启用，这意味着很多用户都曾在无意识的情况下安装过很多不想要的或不需要的加载项。获得加载项通常有如下途径：</p>
<p>1. 在您购买品牌计算机前已经由品牌机厂商预装在计算机中；</p>
<p>2. 部分第三方软件可能包含有安装额外加载项的选项，有些用户并没有意识到这些软件的安装程序会为 IE 浏览器添加加载项，因为并非所有软件的安装程序都会给予用户明确的提示；</p>
<p>3. 您可能会有意识地从 Internet Explorer 8 Gallery 站点安装加载项，或者从加载项开发商的网站直接下载安装（例如：<a href="http://toobar.live.com/" target="_blank">http://toobar.live.com</a>、http: //downloads.cnet.com）。</p>
<p>出于尊重您的隐私的考虑，IE 8 无法区分好意或恶意的加载项，也很难描述“原生”的浏览器问题与第三方加载项引起的问题有何区别。因此，您对于浏览器加载项的积极维护管理将是保证您获得您想要的 IE 8 性能体验的最佳途径。</p>
<p>★ 技巧 1：挑出行为异常的加载项并将其禁用</p>
<p>在 IE 8 中，您可以很容易地查看您的系统已安装的加载项并将那些不需要的加载项禁用。</p>
<p>1. 如何排查加载项引起的故障</p>
<p>以“不启动加载项”模式运行 IE 8 是一种很容易的测试加载项是否影响浏览器性能的方法。</p>
<p>第一步，在开始菜单的“运行”或“搜索栏”中输入 IEXPLORE.EXE -EXTOFF 并运行，IE 8 将会以不启用任何加载项的模式运行。您可以以这种模式访问您的站点测试是否有相同的问题发生。如果 IE 8 以“不启动加载项”模式运行的速度比平时快得多，您便需要打开“管理加载项”对话框禁用那些您用不到的加载项。</p>
<p>笔者注：除了以命令行方式运行 IEXPLORE -EXTOFF 命令外，我们还可以在 IE 8 地址栏中输入 about:NoAdd-ons，或者右键单击 Windows 7 超级任务栏中的 IE 图标、在跳转列表中继续右键单击 Internet Explorer，并在弹出的右键菜单中选择“以不启动加载项模式运行”，也可以令 IE 8 以“不启动加载项”模式运行。</p>
<p>第二步，当 IE 8 以“不启动加载项”模式运行之后，用鼠标点击地址栏下方的金色信息栏，在弹出的菜单中点击“管理加载项”，打开“管理加载项”对话框。</p>
<p>笔者注：“管理加载项”对话框同样可以在 IE 8 的“工具”工具栏或“工具”菜单中找到。</p>
<p>2. 禁用工具栏</p>
<p>在 IE 8 中禁用工具栏非常简单，只需点击工具栏旁边的“×”按钮即可。</p>
<p>IE 8 将提示您是否禁用此工具栏及任何与之相关的、出自同一开发商的加载项。例如，当您试图禁用 Contoso 开发的工具栏时，如果您还安装有同样出自 Contoso 的 Toolbar Helper 或 Support Library，IE 8 将询问您是否将这些相关的加载项一并禁用。</p>
<p>如果您点击“禁用”禁用了加载项，下一次运行 IE 8 时它将不会再自动加载，也不会再影响 IE 8 的响应。</p>
<p>笔者注：IE 8 的这一特性笔者曾经在去年写的博客《Windows Internet Explorer 8 在管理加载项与默认搜索引擎方面的改进》中有过介绍，欢迎参考。</p>
<p>3. 管理加载项</p>
<p>在 IE 8 中，您还可以检查载入每一个加载项需要花费多长时间，并禁用那些您不想要或不需要的加载项。</p>
<p>第一步，在 IE 8 的“工具”工具栏或“工具”菜单中打开“管理加载项”。</p>
<p>在“管理加载项”对话框中，您可以直观地看到加载项会令浏览器的启动时间增加多少秒。例如，Contoso Toolbar 及 Toolbar Helper 加载项在您每次打开新浏览器窗口或新选项卡时大约会使启动时间增加 1.42＋2.85 = 4.27 秒。</p>
<p>第二步，请确认您了解并信任那些已启动的加载项。请逐一检查每一个加载项的载入时间并确定那些比常规时间更长的加载项。</p>
<p>通过“管理加载项”对话框，我们可以很容易地启用或禁用任何加载项，以提高浏览器性能。</p>
<p>第三步，选中您希望禁用的加载项，点击“禁用”按钮。</p>
<p>修改的设置将在浏览器重新启动后生效（笔者注：指重新启动相应的 IEXPLORE.EXE 进程），被禁用的工具栏将不再出现。无论您何时感到浏览器响应速度变慢，都可以再打开“管理加载项”对话框进行排查。有时也许很难说什么时候会有一个软件在没有您许可的情况下被安装，但“管理加载项”始终是一个容易的检查方法。</p>
<p>IE 开发团队提供了下列文章供您参考：</p>
<p><a href="http://blogs.msdn.com/ie/archive/2009/07/18/how-to-make-ie-open-new-tabs-faster.aspx" target="_blank">http://blogs.msdn.com/ie/archive &#8230; ew-tabs-faster.aspx</a><br />
<a href="http://blogs.msdn.com/ieinternals/archive/2009/07/20/IE8-Performance-and-Speed-Tips.aspx" target="_blank">http://blogs.msdn.com/ieinternal &#8230; and-Speed-Tips.aspx</a></p>
<p>我们已经确认了一些与 IE 8 不兼容的加载项的已知案例：</p>
<p><a href="http://go.microsoft.com/fwlink/?LinkId=110570" target="_blank">http://go.microsoft.com/fwlink/?LinkId=110570</a></p>
<p>★ 技巧 2：检查计算机是否存在恶意软件或间谍软件</p>
<p>如果您发现 IE 8 运行异常、出现崩溃或自动访问了不希望的站点，可能是因为您的计算机受到了恶意软件（Malicious Software）的影响。您应该确保您安装有一款值得信赖的安全防护软件，可以随时帮助您检查计算机中是否存在病毒、木马及其它各类恶意软件。</p>
<p>下面是部分安全防护软件提供商的推荐信息，基于不同的 Windows 版本：</p>
<p><a href="http://www.microsoft.com/windows/antivirus-partners/windows-7.aspx" target="_blank">http://www.microsoft.com/windows &#8230; ners/windows-7.aspx</a><br />
<a href="http://www.microsoft.com/windows/antivirus-partners/windows-vista.aspx" target="_blank">http://www.microsoft.com/windows &#8230; /windows-vista.aspx</a><br />
<a href="http://www.microsoft.com/windows/antivirus-partners/windows-xp.aspx" target="_blank">http://www.microsoft.com/windows &#8230; ers/windows-xp.aspx</a></p>
<p>★ 技巧 3：校验受限站点列表</p>
<p>如果 IE 8 的载入时间过长，可能是因为您的受限站点（Restricted Sites）或者可信站点（Trusted Sites）列表被添加了大量的网站。类似 SpyBot Search &amp; Destroy 之类的安全防护软件可能会在上述列表中添加上千个网站，防止您访问不安全的站点。尽管这不是推荐的做法，但如果您使用了这些安全防护软件的免疫功能，您可以已经在不知不觉中应用了这些设置。</p>
<p>第一步，请依次点击“工具”－“Internet 选项”，切换至“安全”选项卡，单击选中“受限站点”图标并点击下方的“站点”按钮。</p>
<p>在您的“受限站点”对话框中共有多少个网站？如果超过了十个，您应该删除大多数网站。同时请检查您的安全防护软件并禁用任何可能会向“受限站点”列表添加网站的设置。</p>
<p>第二步，请在“受限站点”列表中选中希望删除的网站，然后点击“删除”按钮。</p>
<p>IE 8 本身提供有 SmartScreen 过滤器，这是一种浏览器内置的、设计用于保护您免受网络“钓鱼”攻击的安全特性。如果 SmartScreen 过滤器检测到恶意站点，IE 8 会将整个站点屏蔽。同时，它也提供了仅针对寄宿在正规站点上的恶意软件或“钓鱼”攻击的“外部屏蔽”，在不影响站点的前提下仅屏蔽恶意内容。</p>
<p>★ 技巧 4：确认您安装有加载项及软件的最近更新</p>
<p>将您的加载项及插件保持升级至最新是非常重要的。例如，众所周知早期版本的 Adobe <span onclick="tagshow(event)">Flash</span> 可能会引起浏览器崩溃或停止运行。如果您安装有谷歌搜索或其它工具栏及扩展插件，请随时访问开发商的首页并确认您已升级至最新的版本。</p>
<p>另外请确保您运行的杀毒软件、反恶意软件工具及防火墙等均是最新的版本。同时请确保您的计算机安装有来自 Microsoft Update 的所有安全更新。</p>
<p>★ 技巧 5：重置 IE 8 默认设置</p>
<p>有时重置 IE 8 浏览器的设置可以降低遇到浏览器性能或稳定性故障的机率。您可以参考这篇微软 KB 知识库文章、并获取自动重置 IE 8 默认设置的 Fix it 工具：</p>
<p><a href="http://support.microsoft.com/kb/923737" target="_blank">http://support.microsoft.com/kb/923737</a><br />
<a href="http://go.microsoft.com/?linkid=9646978" target="_blank">http://go.microsoft.com/?linkid=9646978</a></p>
<p>此工具可以禁用工具栏与加载项、重置默认浏览器设置、重置个人隐私设置、重置安全设置、重置 Internet 高级选项、重置选项卡设置、重置弹出窗口阻止程序设置。</p>
<p>笔者注：IE 8 本身就有重置浏览器默认设置的功能。您可以在“Internet 选项”中切换至“高级”选项卡，在“重置 Internet Explorer 设置”框中点击“重置”按钮。Fix it 并不是重置 IE 8 默认设置必须的工具。</p>
<p>★ 技巧 6：联机求助于微软帮助支持</p>
<p>如果您在尝试了上述技巧之后依然感到 IE 8 未达到最理想的运行状态，请尝试联机访问微软帮助支持中心，按照向导的提示排查您的浏览器故障：</p>
<p><a href="http://support.microsoft.com/gp/pc_ie_intro" target="_blank">http://support.microsoft.com/gp/pc_ie_intro</a></p>
<p>进阶部分：提高 Windows Internet Explorer 8 性能的高级设置技巧</p>
<p>纵观来自用户的反馈与错误报告，我们已经可以确定某些计算机设置可能会引起浏览器响应缓慢。调整这些设置可以帮助优化浏览器性能。这些设置大都需要涉及浏览器与注册表的进阶知识。不久以后，我们将提供可以帮助您轻松调整这些设置的自动化资源。</p>
<p>★ 技巧 1：检查您的 User Agent 字符串长度</p>
<p>1. 什么是 User Agent 字符串</p>
<p>每种浏览器都拥有一个 User Agent 字符串。这个字符串被您访问的网站自动读取，确定您的浏览器类型、操作系统类型及某些其它关于计算机的技术资源信息（笔者注：包括关于 .net Framework、Media Center、Tablet PC 及某些第三方软件的信息）。部分网站有时会根据这些字符串提供的信息决定在您的浏览器中显示何种内容。例如，假设您使用 Windows 计算机访问一个这样的站点，它可能就会自动提供 Windows 版本的软件供您下载。有时在您安装了非微软的第三方软件，例如<span onclick="tagshow(event)">路由器</span>、摄像头、声卡驱动，或者访问了非微软提供的站点之后，您的 User Agent 字符串将被附加额外的信息。</p>
<p>关于 User Agent 字符串的更多信息可以参考：</p>
<p><a href="http://msdn.microsoft.com/en-us/library/ms537503" target="_blank">http://msdn.microsoft.com/en-us/library/ms537503</a>(VS.85).aspx</p>
<p>2. 如果我的 User Agent 字符串过长会出现什么问题</p>
<p>如果 User Agent 字符串过长，试图读取它的网站可能拒绝您的浏览器获取站点内容的请求。由于请求信息会在网站与您的浏览器之间不停地往返并陷入循环，这可能会引起不必要的浏览器响应缓慢。</p>
<p>笔者注：通常 User Agent 字符串的长度不应超过 200 个字符，否则 IE 8 便会很容易出现无法获取请求的内容、浏览器被屏蔽、返还空白页面、显示错误信息等各类故障。</p>
<p>我们可以在浏览器地址栏中输入：</p>
<p>BLOCKED SCRIPTalert(navigator.userAgent)</p>
<p>然后运行，查看当前的 User Agent 字符串。如果 User Agent 字符串过长，可以打开注册表编辑器，在如下注册表项中删除不需要的附加信息：</p>
<p>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent<br />
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\User Agent<br />
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent<br />
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\User Agent</p>
<p>另外，User Agent 字符串中的信息排列顺序也是有讲究的。因为附加信息过多、导致排列顺序有误而引起的网站功能故障也很常见。笔者在 <span onclick="tagshow(event)">2008</span> 年曾写过一篇博客《Windows Update 为什么将 Windows 识别为 Macintosh》，讨论的问题便是由 User Agent 字符串引起，欢迎参考。</p>
<p>★ 技巧 2：增大 IE 8 的连接限制数优化 IE 的并行下载</p>
<p>IE 8 浏览器允许与每台<span onclick="tagshow(event)">服务器</span>同时建立最多六个连接以刷新显示信息，这意味着当您同时下载多个文件时，您可以从每台服务器获得最多六个文件的并行下载。有时增大 IE 8 的每服务器连接限制数可以增强浏览器的下载及浏览性能。</p>
<p>有关如何增加 IE 8 的连接限制数，请访问：<br />
微软上周发布了一份关于 Windows Internet Explorer 8 浏览器（以下简称为 IE 8）性能优化的白皮书《Windows Internet Explorer 8 Performance White Paper》，指导最终用户如何优化 IE 8 获得最佳的浏览器体验。笔者将其全文翻译为了中文，并添加了少许注释，供广大 IE 8 用户参考。以下以微软雅黑字体显示白皮书的译文、以 Arial 字体显示笔者的注释。</p>
<p>《Windows Internet Explorer 8 Performance White Paper》译稿：</p>
<p>基础部分：提高 Windows Internet Explorer 8 的性能</p>
<p>★ 指导最终用户优化 IE 8 以获得最佳性能</p>
<p>IE 浏览器是当今最流行、最受大众信任的浏览器之一。自从 1995 年首次发布以来，IE 一直致力于帮助 Windows 计算机用户使用 Internet。IE 历代版本均针对浏览器的性能与稳定性有所升级、确保用户在浏览 Internet 时拥有出众的体验，最新的 IE 8 亦同时在最终用户生产力与浏览器性能两方面引入了重要改进。</p>
<p>IE 8 的设计初衷是成为一种可以迅速启动并载入页面的高效浏览器。“新建选项卡 －接着您想做什么”向导可以指导用户更高效、更简单地浏览 Internet。IE 8 用时开创了很多领先业界的创新性改进，例如用于提高浏览器稳定性的选项卡进程隔离技术（Tab Isolation）、自动崩溃恢复技术（Automatic Crash Recovery）等。IE 8 的这些性能改进帮助超过三亿的用户提升了 Web 浏览体验。</p>
<p>这份白皮书将帮助您学习如何解决一些寻常的因为 IE 8 配置不当引起的网络响应缓慢问题。我们将在复杂的浏览器系统中为您剖析一些有关如何提升 IE 8 性能的提示与技巧，使您尽快学习掌握。这些技巧将由易而难介绍给您，因此您可以尝试学习尽量多的方法，直到您满意为止。</p>
<p>如果您正在使用最 新的 Windows 7 操作系统，IE 8 浏览器已经内置在您的计算机中。如果您正在使用 Windows XP 或 Windows Vista，您需要首先安装单独发布的 IE 8。</p>
<p>请访问 <a href="http://www.microsoft.com/china/windows/internet-explorer" target="_blank">http://www.microsoft.com/china/windows/internet-explorer</a> 获取更多信息。</p>
<p>★ 什么因素会影响 IE 8 的性能</p>
<p>当您点击 IE 浏览器的蓝色 e 图标、打开 Gmail 或更新您的 Facebook 时，您可能没有意识到有多少软件正在后台工作。大多数用户并不在意 Internet 是一个多么复杂的系统，但 IE 浏览器可能是这个系统的所有角色中对您影响最直接的一个。IE 浏览器的性能由许多不同的因素共同决定：计算机中您知道的或不知道的各种软件、Internet 连接速率、您浏览的网站的速率&#8230;&#8230; 等等，我们列出的只是一小部分。</p>
<p>由非微软公司开发的第三方软件可能会嵌入 IE 浏览器中。尽管我们在工作中会与这些第三方公司保持密切的交流，提供必要的指导帮助他们编写可以为用户带来良好 Web 体验的软件，但我们却无法保证他们编写的代码均能达到预期的高质量。</p>
<p>IE 浏览器同时要花费时间与可能存在于计算机中的所有杀毒软件、防火墙及其它安全防护软件打交道。有时这些时间的花费可能是重复的、并会引起 IE 浏览器出现不必要的响应缓慢。</p>
<p>★ 什么是浏览器加载项</p>
<p>加载项是指为浏览器添加扩展功能的特殊软件。提到加载项一般涉及插 件、扩展组件、工具栏等，通常是由非微软的第三方厂商编写。有些加载项可以在浏览器中直观地看见、有些则以静默的方式运行于后台。我们不记实名的遥测数据 显示，每位 IE 8 用户平均拥有五六个已安装的加载项。下面是一份 2009 年 7 月全球 IE 8 用户最常使用的二十个加载项列表（按照流行程度排序）：</p>
<p>1. 谷歌工具栏；<br />
2. Windows Live 登录助手；<br />
3. Adobe PDF Reader；<br />
4. Windows Live 工具栏；<br />
5. 雅虎工具栏；<br />
6. JAVA 插件；<br />
7. 迅雷下载管理器；<br />
8. 金山浏览器保护盾；<br />
9. AVG 安全防护工具栏；<br />
10.Skype；<br />
11.诺顿 NIS 安全防护；<br />
12.麦克菲安全防护；<br />
13.卡巴斯基 KIS 安全防护；<br />
14.MSN 工具栏；<br />
15.QQ 工具栏；<br />
16. 百度工具栏；<br />
17.AskBar；<br />
18.谷歌浏览器地址错误重定向；<br />
19.Spybot Search &amp; Destroy；<br />
20.Adware.StickyPops。</p>
<p>尽管浏览器加载项可以为浏览器添加良好的新功能，但如果编写得不好 也会带来影响性能的问题。绝大多数浏览器崩溃是由加载项引起的，IE 8 因加载项引起的崩溃占 70% 以上。由于加载项引起的 IE 8 响应缓慢也很常见，特别是在您打开新浏览器窗口或新选项卡时。</p>
<p>随着使用时间增加，浏览器会积累一些可能影响浏览器性能的加载项。已安装的 加载项可能会在用户不知道他安装了什么样的加载项的情况下自动启用，这意味着很多用户都曾在无意识的情况下安装过很多不想要的或不需要的加载项。获得加载 项通常有如下途径：</p>
<p>1. 在您购买品牌计算机前已经由品牌机厂商预装在计算机中；</p>
<p>2. 部分第三方软件可能包含有安装额外加载项的选项，有些用户并没有意识到这些软件的安装程序会为 IE 浏览器添加加载项，因为并非所有软件的安装程序都会给予用户明确的提示；</p>
<p>3. 您可能会有意识地从 Internet Explorer 8 Gallery 站点安装加载项，或者从加载项开发商的网站直接下载安装（例如：<a href="http://toobar.live.com/" target="_blank">http://toobar.live.com</a>、<a href="http://downloads.cnet.com/" target="_blank">http://downloads.cnet.com</a>）。</p>
<p>出 于尊重您的隐私的考虑，IE 8 无法区分好意或恶意的加载项，也很难描述“原生”的浏览器问题与第三方加载项引起的问题有何区别。因此，您对于浏览器加载项的积极维护管理将是保证您获得 您想要的 IE 8 性能体验的最佳途径。</p>
<p>★ 技巧 1：挑出行为异常的加载项并将其禁用</p>
<p>在 IE 8 中，您可以很容易地查看您的系统已安装的加载项并将那些不需要的加载项禁用。</p>
<p>1. 如何排查加载项引起的故障</p>
<p>以“不启动 加载项”模式运行 IE 8 是一种很容易的测试加载项是否影响浏览器性能的方法。</p>
<p>第一步，在开始菜单的“运行”或“搜索栏”中输入 IEXPLORE.EXE -EXTOFF 并运行，IE 8 将会以不启用任何加载项的模式运行。您可以以这种模式访问您的站点测试是否有相同的问题发生。如果 IE 8 以“不启动加载项”模式运行的速度比平时快得多，您便需要打开“管理加载项”对话框禁用那些您用不到的加载项。</p>
<p>笔者注：除了以命令行方式运行 IEXPLORE -EXTOFF 命令外，我们还可以在 IE 8 地址栏中输入 about:NoAdd-ons，或者右键单击 Windows 7 超级任务栏中的 IE 图标、在跳转列表中继续右键单击 Internet Explorer，并在弹出的右键菜单中选择“以不启动加载项模式运行”，也可以令 IE 8 以“不启动加载项”模式运行。</p>
<p>第 二步，当 IE 8 以“不启动加载项”模式运行之后，用鼠标点击地址栏下方的金色信息栏，在弹出的菜单中点击“管理加载项”，打开“管理加载项”对话框。</p>
<p>笔者注：“管理加载项”对话框同样可以在 IE 8 的“工具”工具栏或“工具”菜单中找到。</p>
<p>2. 禁用工具栏</p>
<p>在 IE 8 中禁用工具栏非常简单，只需点击工具栏旁边的“×”按钮即可。</p>
<p>IE 8 将提示您是否禁用此工具栏及任何与之相关的、出自同一开发商的加载项。例如，当您试图禁用 Contoso 开发的工具栏时，如果您还安装有同样出自 Contoso 的 Toolbar Helper 或 Support Library，IE 8 将询问您是否将这些相关的加载项一并禁用。</p>
<p>如 果您点击“禁用”禁用了加载项，下一次运行 IE 8 时它将不会再自动加载，也不会再影响 IE 8 的响应。</p>
<p>笔者注：IE 8 的这一特性笔者曾经在去年写的博客《Windows Internet Explorer 8 在管理加载项与默认搜索引擎方面的改进》 中有过介绍，欢迎参考。</p>
<p>3. 管理加载项</p>
<p>在 IE 8 中，您还可以检查载入每一个加载项需要花费多长时间，并禁用那些您不想要或不需要的加载项。</p>
<p>第一步，在 IE 8 的“工具”工具栏或“工具”菜单中打开“管理加载项”。</p>
<p>在“管理加载项”对话框中，您可以直观地看到加载项会令浏览器的启动时间增加多少 秒。例如，Contoso Toolbar 及 Toolbar Helper 加载项在您每次打开新浏览器窗口或新选项卡时大约会使启动时间增加 1.42＋2.85 = 4.27 秒。</p>
<p>第二步，请确认您了解并信任那些已启动的加载项。请逐一检查每一个加载项的载入时间并确定那些比 常规时间更长的加载项。</p>
<p>通过“管理加载项”对话框，我们可以很容易地启用或禁用任何加载项，以提高浏览器性能。</p>
<p>第三步， 选中您希望禁用的加载项，点击“禁用”按钮。</p>
<p>修改的设置将在浏览器重新启动后生效（笔者注：指重 新启动相应的 IEXPLORE.EXE 进程），被禁用的工具栏将不再出现。无论您何时感到浏览器响应速度变慢，都可以再打开“管理加载 项”对话框进行排查。有时也许很难说什么时候会有一个软件在没有您许可的情况下被安装，但“管理加载项”始终是一个容易的检查方法。</p>
<p>IE 开发团队提供了下列文章供您参考：</p>
<p><a href="http://blogs.msdn.com/ie/archive/2009/07/18/how-to-make-ie-open-new-tabs-faster.aspx" target="_blank">http://blogs.msdn.com/ie/archive &#8230; ew-tabs-faster.aspx</a><br />
<a href="http://blogs.msdn.com/ieinternals/archive/2009/07/20/IE8-Performance-and-Speed-Tips.aspx" target="_blank">http://blogs.msdn.com/ieinternal &#8230; and-Speed-Tips.aspx</a></p>
<p>我 们已经确认了一些与 IE 8 不兼容的加载项的已知案例：</p>
<p><a href="http://go.microsoft.com/fwlink/?LinkId=110570" target="_blank">http://go.microsoft.com/fwlink/?LinkId=110570</a></p>
<p>★ 技巧 2：检查计算机是否存在恶意软件或间谍软件</p>
<p>如果您发现 IE 8 运行异常、出现崩溃或自动访问了不希望的站点，可能是因为您的计算机受到了恶意软件（Malicious Software）的影响。您应该确保您安装有一款值得信赖的安全防护软件，可以随时帮助您检查计算机中是否存在病毒、木马及其它各类恶意软件。</p>
<p>下 面是部分安全防护软件提供商的推荐信息，基于不同的 Windows 版本：</p>
<p><a href="http://www.microsoft.com/windows/antivirus-partners/windows-7.aspx" target="_blank">http://www.microsoft.com/windows &#8230; ners/windows-7.aspx</a><br />
<a href="http://www.microsoft.com/windows/antivirus-partners/windows-vista.aspx" target="_blank">http://www.microsoft.com/windows &#8230; /windows-vista.aspx</a><br />
<a href="http://www.microsoft.com/windows/antivirus-partners/windows-xp.aspx" target="_blank">http://www.microsoft.com/windows &#8230; ers/windows-xp.aspx</a></p>
<p>★ 技巧 3：校验受限站点列表</p>
<p>如果 IE 8 的载入时间过长，可能是因为您的受限站点（Restricted Sites）或者可信站点（Trusted Sites）列表被添加了大量的网站。类似 SpyBot Search &amp; Destroy 之类的安全防护软件可能会在上述列表中添加上千个网站，防止您访问不安全的站点。尽管这不是推荐的做法，但如果您使用了这些安全防护软件的免疫功能，您可 以已经在不知不觉中应用了这些设置。</p>
<p>第一步，请依次点击“工具”－“Internet 选项”，切换至“安全”选项卡，单击选中“受限站点”图标并点击下方的“站点”按钮。</p>
<p>在您的“受限站点”对话框中共有多少个网站？如果超 过了十个，您应该删除大多数网站。同时请检查您的安全防护软件并禁用任何可能会向“受限站点”列表添加网站的设置。</p>
<p>第二步，请在“受限站 点”列表中选中希望删除的网站，然后点击“删除”按钮。</p>
<p>IE 8 本身提供有 SmartScreen 过滤器，这是一种浏览器内置的、设计用于保护您免受网络“钓鱼”攻击的安全特性。如果 SmartScreen 过滤器检测到恶意站点，IE 8 会将整个站点屏蔽。同时，它也提供了仅针对寄宿在正规站点上的恶意软件或“钓鱼”攻击的“外部屏蔽”，在不影响站点的前提下仅屏蔽恶意内容。</p>
<p>★ 技巧 4：确认您安装有加载项及软件的最近更新</p>
<p>将您的加载项及插件保持升级至最新是非常重要的。例如，众所周知早期版本的 Adobe Flash 可能会引起浏览器崩溃或停止运行。如果您安装有谷歌搜索或其它工具栏及扩展插件，请随时访问开发商的首页并确认您已升级至最新的版本。</p>
<p>另 外请确保您运行的杀毒软件、反恶意软件工具及防火墙等均是最新的版本。同时请确保您的计算机安装有来自 Microsoft Update 的所有安全更新。</p>
<p>★ 技巧 5：重置 IE 8 默认设置</p>
<p>有时重置 IE 8 浏览器的设置可以降低遇到浏览器性能或稳定性故障的机率。您可以参考这篇微软 KB 知识库文章、并获取自动重置 IE 8 默认设置的 Fix it 工具：</p>
<p><a href="http://support.microsoft.com/kb/923737" target="_blank">http://support.microsoft.com/kb/923737</a><br />
<a href="http://go.microsoft.com/?linkid=9646978" target="_blank">http://go.microsoft.com/?linkid=9646978</a></p>
<p>此 工具可以禁用工具栏与加载项、重置默认浏览器设置、重置个人隐私设置、重置安全设置、重置 Internet 高级选项、重置选项卡设置、重置弹出窗口阻止程序设置。</p>
<p>笔者注：IE 8 本身就有重置浏览器默认设置的功能。您可以在“Internet 选项”中切换至“高级”选项卡，在“重置 Internet Explorer 设置”框中点击“重置”按钮。Fix it 并不是重置 IE 8 默认设置必须的工具。</p>
<p>★ 技巧 6：联机求助于微软帮助支持</p>
<p>如果您在尝试了上述技巧之后依然感到 IE 8 未达到最理想的运行状态，请尝试联机访问微软帮助支持中心，按照向导的提示排查您的浏览器故障：</p>
<p><a href="http://support.microsoft.com/gp/pc_ie_intro" target="_blank">http://support.microsoft.com/gp/pc_ie_intro</a></p>
<p>进 阶部分：提高 Windows Internet Explorer 8 性能的高级设置技巧</p>
<p>纵观来自用户的反馈与错误报告，我们已经可 以确定某些计算机设置可能会引起浏览器响应缓慢。调整这些设置可以帮助优化浏览器性能。这些设置大都需要涉及浏览器与注册表的进阶知识。不久以后，我们将 提供可以帮助您轻松调整这些设置的自动化资源。</p>
<p>★ 技巧 1：检查您的 User Agent 字符串长度</p>
<p>1. 什么是 User Agent 字符串</p>
<p>每种浏览器都拥有一个 User Agent 字符串。这个字符串被您访问的网站自动读取，确定您的浏览器类型、操作系统类型及某些其它关于计算机的技术资源信息（笔 者注：包括关于 .net Framework、Media Center、Tablet PC 及某些第三方软件的信息）。部分网站有时 会根据这些字符串提供的信息决定在您的浏览器中显示何种内容。例如，假设您使用 Windows 计算机访问一个这样的站点，它可能就会自动提供 Windows 版本的软件供您下载。有时在您安装了非微软的第三方软件，例如路由器、摄像头、声卡驱动，或者访问了非微软提供的站点之后，您的 User Agent 字符串将被附加额外的信息。</p>
<p>关于 User Agent 字符串的更多信息可以参考：</p>
<p><a href="http://msdn.microsoft.com/en-us/library/ms537503" target="_blank">http://msdn.microsoft.com/en-us/library/ms537503</a>(VS.85).aspx</p>
<p>2. 如果我的 User Agent 字符串过长会出现什么问题</p>
<p>如果 User Agent 字符串过长，试图读取它的网站可能拒绝您的浏览器获取站点内容的请求。由于请求信息会在网站与您的浏览器之间不停地往返并陷入循环，这可能会引起不必要的 浏览器响应缓慢。</p>
<p>笔 者注：通常 User Agent 字符串的长度不应超过 200 个字符，否则 IE 8 便会很容易出现无法获取请求的内容、浏览器被屏蔽、返还空白页面、显示错误信息等各类故障。</p>
<p>我们可以在浏览器地址栏中输入：</p>
<p>BLOCKED SCRIPTalert(navigator.userAgent)</p>
<p>然后运行，查看当前的 User Agent 字符串。如果 User Agent 字符串过长，可以打开注册表编辑器，在如下注册表项中删除不需要的附加信息：</p>
<p>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent<br />
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\User Agent<br />
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent<br />
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\User Agent</p>
<p>另外，User Agent 字符串中的信息排列顺序也是有讲究的。因为附加信息过多、导致排列顺序有误而引起的网站功能故障也很常见。笔者在 2008 年曾写过一篇博客《Windows Update 为什么将 Windows 识别为 Macintosh》，讨论的问题便是由 User Agent 字符串引起，欢迎参考。</p>
<p>★ 技巧 2：增大 IE 8 的连接限制数优化 IE 的并行下载</p>
<p>IE 8 浏览器允许与每台服务器同时建立最多六个连接以刷新显示信息，这意味着当您同时下载多个文件时，您可以从每台服务器获得最多六个文件的并行下载。有时增大 IE 8 的每服务器连接限制数可以增强浏览器的下载及浏览性能。</p>
<p>有关如何增加 IE 8 的连接限制数，请访问：</p>
<p><a href="http://support.microsoft.com/kb/282402/zh-cn" target="_blank">http://support.microsoft.com/kb/282402/zh-cn</a></p>
<p>笔者 注：我们可以将 IE 8 的连接限制数增大为十。从 KB282402 知识库文章页面中获取自动的 Fix it 工具，或者参照 KB282402 介绍的方法手动修改组策略或注册表。</p>
<p><a href="http://support.microsoft.com/kb/282402/zh-cn" target="_blank">http://support.microsoft.com/kb/282402/zh-cn</a></p>
<p>笔者注：我们可以将 IE 8 的连接限制数增大为十。从 KB282402 知识库文章页面中获取自动的 Fix it 工具，或者参照 KB282402 介绍的方法手动修改组策略或注册表。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2010/05/06/internet-explorer-8-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>金山毒霸2011免费90天版下载</title>
		<link>http://www.helloyi.cn/index.php/2010/04/29/duba-2011-free-90/</link>
		<comments>http://www.helloyi.cn/index.php/2010/04/29/duba-2011-free-90/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 08:23:23 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[杀毒软件]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=3241</guid>
		<description><![CDATA[金山毒霸2011产品研发部自豪的称这个版本拥有三个之最：安装包最小；新病毒的响应速度最快；系统的资源开销最小,独创可信云安全，联网即可享有最新的病毒防杀能力.独创云端海量样本快速识别，95%的文件鉴定只需要1分钟.


免费下载点击
]]></description>
			<content:encoded><![CDATA[<p>金山毒霸2011产品研发部自豪的称这个版本拥有三个之最：安装包最小；新病毒的响应速度最快；系统的资源开销最小,独创可信云安全，联网即可享有最新的病毒防杀能力.独创云端海量样本快速识别，95%的文件鉴定只需要1分钟.</p>
<p><span id="more-3241"></span></p>
<p><img class="alignnone size-full wp-image-3242" title="duba2011" src="http://www.helloyi.cn/index.php?feedimage=wp-content/uploads/2010/04/duba2011.jpg" alt="duba2011" width="672" height="591" /></p>
<p><span style="color: #ff0000;"><strong><a href="http://www.duba.net/kav/">免费下载点击</a></strong></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2010/04/29/duba-2011-free-90/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google免费开源web安全扫描器Skipfish</title>
		<link>http://www.helloyi.cn/index.php/2010/04/23/google-skipfish/</link>
		<comments>http://www.helloyi.cn/index.php/2010/04/23/google-skipfish/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 03:31:36 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[杀毒软件]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=3234</guid>
		<description><![CDATA[Google开发者Michal Zalewski在Skipfish wiki表示，这项工具可扫瞄网络应用程序是否含有一些难以处理的状况，如Blind SQL插入式攻击，或XML远端程序注入等瑕疵。Skipfish根据目录调查目标网站，并在递回爬取(recursive crawl)后产生一份具备互动crawl结果注释的网站图。该工具也能产生一份最终报告，作为软件安全评估的根据。
Zalewski表示，目前还有若干商业和开源的扫瞄工具，包括Nikto和Nessus，他建议用户选用适合自己的工具。不过，Skipfish速度很快，依据被测试的服务器性能，针对互联网目标每秒处理500次以上请求，针对LANs每秒处理2,000次以上请求。
Zalewski提醒，Skipfish无法抓出所有问题。该工具刻意不满足应用程序安全联盟之安全扫瞄评估准则(Wasc Web Application Security Scanner Evaluation Criteria)列出的所有要求。此外，Skipfish没有附带已知漏洞的延伸数据库。
Google请大家以负责的态度使用这项工具。Zalewski写道：首先要强调的是，请不要作恶。只针对你拥有的服务使用Skipfish，或者先取得测试许可。这项工具完全以C语言编写，授权采用Apache Licence 2.0。最新版本是Skipfish 1.33 beta
安装: 首先到下面给出的官方地址下载,目前只支持linux下安装然后进行解压编译:


这个时候一定要注意看这句话：See dictionaries/README-FIRST to pick a dictionary for the
tool
我们要,字典准备好！因为它决定你扫描结果的质量！cd  dictionaries进入这个目录 ,把其中的一个字典copy 到skipfish目录下面/，重新命名为：skipfish.wl
这个时候就可以扫描你想要扫描的站点 # ./skipfish -o output_dir http://www.google.com
然后在output_dir/index.html 查看结果即可！详细的用法大家可以
./skipfish –h 得到想要的帮助
下载:http://code.google.com/p/skipfish/downloads/list
wiki:http://code.google.com/p/skipfish/wiki/SkipfishDoc
]]></description>
			<content:encoded><![CDATA[<p>Google开发者Michal Zalewski在Skipfish wiki表示，这项工具可扫瞄网络应用程序是否含有一些难以处理的状况，如Blind SQL插入式攻击，或XML远端程序注入等瑕疵。Skipfish根据目录调查目标网站，并在递回爬取(recursive crawl)后产生一份具备互动crawl结果注释的网站图。该工具也能产生一份最终报告，作为软件安全评估的根据。</p>
<p><span id="more-3234"></span>Zalewski表示，目前还有若干商业和开源的扫瞄工具，包括Nikto和Nessus，他建议用户选用适合自己的工具。不过，Skipfish速度很快，依据被测试的服务器性能，针对互联网目标每秒处理500次以上请求，针对LANs每秒处理2,000次以上请求。<br />
Zalewski提醒，Skipfish无法抓出所有问题。该工具刻意不满足应用程序安全联盟之安全扫瞄评估准则(Wasc Web Application Security Scanner Evaluation Criteria)列出的所有要求。此外，Skipfish没有附带已知漏洞的延伸数据库。<br />
Google请大家以负责的态度使用这项工具。Zalewski写道：首先要强调的是，请不要作恶。只针对你拥有的服务使用Skipfish，或者先取得测试许可。这项工具完全以C语言编写，授权采用Apache Licence 2.0。最新版本是Skipfish 1.33 beta</p>
<p>安装: 首先到下面给出的官方地址下载,目前只支持linux下安装然后进行解压编译:</p>
<p><img class="alignnone size-full wp-image-3235" title="skipfish" src="http://www.helloyi.cn/index.php?feedimage=wp-content/uploads/2010/04/skipfish.jpg" alt="skipfish" width="600" height="501" /></p>
<p><img class="alignnone size-full wp-image-3236" title="skipfish1" src="http://www.helloyi.cn/index.php?feedimage=wp-content/uploads/2010/04/skipfish1.jpg" alt="skipfish1" width="632" height="406" /></p>
<p>这个时候一定要注意看这句话：<span style="color: #ff0000;">See dictionaries/README-FIRST to pick a dictionary for the<br />
tool</span></p>
<p>我们要,字典准备好！因为它决定你扫描结果的质量！cd  dictionaries进入这个目录 ,把其中的一个字典copy 到skipfish目录下面/，重新命名为：skipfish.wl<br />
这个时候就可以扫描你想要扫描的站点 # ./skipfish -o output_dir http://www.google.com</p>
<p>然后在output_dir/index.html 查看结果即可！详细的用法大家可以<br />
./skipfish –h 得到想要的帮助</p>
<p>下载:http://code.google.com/p/skipfish/downloads/list<br />
wiki:http://code.google.com/p/skipfish/wiki/SkipfishDoc</p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2010/04/23/google-skipfish/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>让PHP开发者事半功倍的十大技巧</title>
		<link>http://www.helloyi.cn/index.php/2010/04/19/php-developer-10-skills/</link>
		<comments>http://www.helloyi.cn/index.php/2010/04/19/php-developer-10-skills/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 11:53:42 +0000</pubDate>
		<dc:creator>好易阁</dc:creator>
				<category><![CDATA[WEB编程技术]]></category>

		<guid isPermaLink="false">http://www.helloyi.cn/?p=3227</guid>
		<description><![CDATA[为何说学习PHP的过程有别于任何其它语言？就其本质而言，如果你掌握了以PHP语言“做事”的方式，那么在使用它时就会得心应手，因此值得你去投入精力去了解这些方式。在PHP中，单纯按照自己思路去解决问题往往会是一种错误的办法。这并不是因为你是一个糟糕的程序员，而是因为如果你想写出好的可维护性强的代码，有些标准技巧是你必须要使用的。下面让我们一起看一下你需要知道的10大技巧。
1、如何正确的创建一个网站的Index页面
创建每一个网站时，建立网站的index页面是首要做的事情之一。如果你是一个PHP新手，在编写index页面时典型的做法是只对index页面所需的内容进行编程，其它链接创建另一个页面。不过，如果想学习一种更高效的方式来实现PHP编程，可以采用“index.php?page=home”模式，许多网站都在采用这种模式。
2、使用Request Global Array抓取数据
实际上我们没有任何理由使用$_GET和$_POST数组来抓取数值。$_REQUEST这个全局数组能够让你获取一个get或form请求。因此，多数情况下解析数据的更高效代码大体如下：

$action = isset&#40;$_REQUEST&#91;'action'&#93;&#41; ? $_REQUEST&#91;'action'&#93; : 0;

3、利用var_dump进行PHP代码调试
如果你在寻找php调试技术，我必须说var_dump应该是你要找的目标。在显示php信息方面这个命令可以满足你的所有需要。而调试代码的多数情况与得到PHP中的数值有关。
4、PHP处理代码逻辑，Smarty处理展现层
Smarty是一个使用PHP写出来的模板PHP模板引擎，是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容，提供了一种易于管理和使用的方法，用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲，目的就是要使PHP程序员同前端人员分离，使程序员改变程序的逻辑内容不会影响到前端人员的页面设计，前端人员重新修改页面不会影响到程序的程序逻辑，这在多人合作的项目中显的尤为重要。
5、的确需要使用全局数值时，创建一个Config文件
动辄创建全局数值是一种糟糕的做法，不过有时候实际情况的确又需要这么做。对于数据库表或数据库连接信息使用全局数值是一个不错的想法，但不要在你的PHP代码中频繁使用全局数值。另外，更好的一种做法是把你的全局变量存放在一个config.php文件中。
6、如果未定义，禁止访问！
如果你正确的创建了页面，那么任何其他人没有理由访问index.php或home.php之外的index.php页面。一旦index.php被访问后，你可以通过获得变量的方式来打开需要的页面。你的index页面应该包含类似的以下代码：

	define&#40;'yourPage',1&#41;;

然后，其它页面应该包含：

	if &#40;!defined&#40;'yourPage'&#41;&#41; die&#40;'Access Denied'&#41;;

这么做的目的是防止直接访问你的其它php页面。这样，任何试图不通过index.php访问其它网页的人，将得到“访问被拒绝”的消息。
7、创建一个数据库类
如果你正在进行数据库编程（在PHP中非常常见的任务），一个不错的想法是创建一个数据库类来处理任何数据库管理功能。示例代码如下：

public function dbExec&#40;$query&#41; &#123;          
  $result = $this-&#62;db-&#62;exec&#40;$query&#41;; 
if &#40;PEAR::isError&#40;$result&#41;&#41; 
  errorRedirect&#40;$result-&#62;getMessage&#40;&#41;, true&#41;;
else  
return $result;      
&#125;

这个函数仅接收一个查询语句并对其执行。它还处理可能出现的任何错误。你还可以在这儿包含审核代码，不过我更喜欢使用一个类似的审核函数：

// checks if arguments given are integer values not less than 0 [...]]]></description>
			<content:encoded><![CDATA[<p>为何说学习PHP的过程有别于任何其它语言？就其本质而言，如果你掌握了以PHP语言“做事”的方式，那么在使用它时就会得心应手，因此值得你去投入精力去了解这些方式。在PHP中，单纯按照自己思路去解决问题往往会是一种错误的办法。这并不是因为你是一个糟糕的程序员，而是因为如果你想写出好的可维护性强的代码，有些标准技巧是你必须要使用的。下面让我们一起看一下你需要知道的10大技巧。</p>
<p><span id="more-3227"></span><strong>1、如何正确的创建一个网站的Index页面</strong></p>
<p>创建每一个网站时，建立网站的index页面是首要做的事情之一。如果你是一个PHP新手，在编写index页面时典型的做法是只对index页面所需的内容进行编程，其它链接创建另一个页面。不过，如果想学习一种更高效的方式来实现PHP编程，可以采用“index.php?page=home”模式，许多网站都在采用这种模式。</p>
<p><strong>2、使用Request Global Array抓取数据</strong></p>
<p>实际上我们没有任何理由使用$_GET和$_POST数组来抓取数值。$_REQUEST这个全局数组能够让你获取一个get或form请求。因此，多数情况下解析数据的更高效代码大体如下：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$action</span> <span style="color: #339933;">=</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_REQUEST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'action'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> ? <span style="color: #000088;">$_REQUEST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'action'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>3、利用var_dump进行PHP代码调试</strong></p>
<p>如果你在寻找php调试技术，我必须说var_dump应该是你要找的目标。在显示php信息方面这个命令可以满足你的所有需要。而调试代码的多数情况与得到PHP中的数值有关。</p>
<p><strong>4、PHP处理代码逻辑，Smarty处理展现层</strong></p>
<p>Smarty是一个使用PHP写出来的模板PHP模板引擎，是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容，提供了一种易于管理和使用的方法，用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲，目的就是要使PHP程序员同前端人员分离，使程序员改变程序的逻辑内容不会影响到前端人员的页面设计，前端人员重新修改页面不会影响到程序的程序逻辑，这在多人合作的项目中显的尤为重要。</p>
<p><strong>5、的确需要使用全局数值时，创建一个Config文件</strong></p>
<p>动辄创建全局数值是一种糟糕的做法，不过有时候实际情况的确又需要这么做。对于数据库表或数据库连接信息使用全局数值是一个不错的想法，但不要在你的PHP代码中频繁使用全局数值。另外，更好的一种做法是把你的全局变量存放在一个config.php文件中。</p>
<p><strong>6、如果未定义，禁止访问！</strong></p>
<p>如果你正确的创建了页面，那么任何其他人没有理由访问index.php或home.php之外的index.php页面。一旦index.php被访问后，你可以通过获得变量的方式来打开需要的页面。你的index页面应该包含类似的以下代码：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">	<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'yourPage'</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>然后，其它页面应该包含：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'yourPage'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Access Denied'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>这么做的目的是防止直接访问你的其它php页面。这样，任何试图不通过index.php访问其它网页的人，将得到“访问被拒绝”的消息。</p>
<p><strong>7、创建一个数据库类</strong></p>
<p>如果你正在进行数据库编程（在PHP中非常常见的任务），一个不错的想法是创建一个数据库类来处理任何数据库管理功能。示例代码如下：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> dbExec<span style="color: #009900;">&#40;</span><span style="color: #000088;">$query</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>          
  <span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">db</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">exec</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$query</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>PEAR<span style="color: #339933;">::</span><span style="color: #004000;">isError</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> 
  errorRedirect<span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">else</span>  
<span style="color: #b1b100;">return</span> <span style="color: #000088;">$result</span><span style="color: #339933;">;</span>      
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>这个函数仅接收一个查询语句并对其执行。它还处理可能出现的任何错误。你还可以在这儿包含审核代码，不过我更喜欢使用一个类似的审核函数：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// checks if arguments given are integer values not less than 0 - has multiple arguments      function sanitizeInput()  {  </span>
    <span style="color: #000088;">$numargs</span> <span style="color: #339933;">=</span> <span style="color: #990000;">func_num_args</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000088;">$arg_list</span> <span style="color: #339933;">=</span> <span style="color: #990000;">func_get_args</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$numargs</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">is_numeric</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$arg_list</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #000088;">$arg_list</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>
  errorRedirect<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Unexpected variable value&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>      
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><strong>8、一个php文件处理输入，一个class.php文件处理具体功能</strong></p>
<p>不让代码变得混乱的一个重要方法是：获取用户输入后，将其重定向到其它函数来进行处理。原理非常简单，php文件获得我们需要的任何输入，然后将其执行重定向到类文件中的一个函数。举例来讲，假设有一个类似“index.php?page=profile&amp;action=display”的URL。由profile.php来检索该网址并得到操作是“display”。然后使用一个简单的switch函数，我们来执行真正的显示函数：
</pre>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">require_once</span> PROJECTROOT<span style="color: #339933;">.</span><span style="color: #0000ff;">'libs/messages.class.php'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$message</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Message<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #b1b100;">switch</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$action</span><span style="color: #009900;">&#41;</span>    <span style="color: #009900;">&#123;</span>        
<span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'display'</span><span style="color: #339933;">:</span>            
<span style="color: #000088;">$message</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">display</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
 <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>如上所示，我使用了一个消息类，然后开始进行switch检查。$message只是被类中的调用函数使用的一个对象。</p>
<p><strong>9、了解你的SQL语句，并总是对其审查（Sanitize）</strong></p>
<p>正如我以前所提到的，任何php网站中最重要的部分有99%的可能是数据库。因此，你需要非常熟悉如何正确的使用sql。学会关联表和更多高级技术。下面我将展示一个使用MySQL的函数示例，并使用本文第7条函数进行审查。</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> getSentMessages<span style="color: #009900;">&#40;</span><span style="color: #000088;">$id</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>     
    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">util</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sanitizeInput</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$id</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$pm_table</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'config'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'privateMsg'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$users</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'config'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'users'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$sql</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;SELECT PM.*, USR.username as name_sender FROM <span style="color: #006699; font-weight: bold;">$pm_table</span> PM, <span style="color: #006699; font-weight: bold;">$users</span> USR WHERE id_sender = '<span style="color: #006699; font-weight: bold;">$id</span>' AND sender_purge = FALSE AND USR.id = PM.id_receiver AND is_read = TRUE  ORDER BY date_sent DESC&quot;</span><span style="color: #339933;">;</span>      
<span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dbQueryAll</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sql</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
 <span style="color: #b1b100;">return</span> <span style="color: #000088;">$result</span><span style="color: #339933;">;</span>      
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>首先，我们对用户输入进行检查（通过一个GET变量传递消息id），然后我们执行我们的SQL命令。注意这儿SQL的用法。你需要了解如何使用别名和关联表。</p>
<p><strong>10、当你只需要一个对象时，使用单例模式</strong></p>
<p>在PHP中相当常见的一种情形时，我们只需要创建一个对象一次，然后在我们的整个程序中使用它。一个很好的例子就是smarty变量，一旦被初始化后就可以在任何地方使用。这种情形的一个很好实现方案就是单例模式。示例代码如下：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">function</span> smartyObject<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>  <span style="color: #009900;">&#123;</span> 
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'config'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'SmartyObj'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
     <span style="color: #000088;">$smarty</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> SmartyGame<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'config'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'SmartyObj'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$smarty</span><span style="color: #339933;">;</span> 
   <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
   <span style="color: #000088;">$smarty</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'config'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'SmartyObj'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
   <span style="color: #b1b100;">return</span> <span style="color: #000088;">$smarty</span><span style="color: #339933;">;</span> 
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>注意，我们拥有一个全局smarty变量（该示例中它在config.php中被初始化），如果它的值为0，我们将创建一个新smarty对象。否则，它意味着该对象已经被创建，我们只需要返回它。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.helloyi.cn/index.php/2010/04/19/php-developer-10-skills/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
