??xml version="1.0" encoding="utf-8" standalone="yes"?>丁香五月缴情综合网,亚洲欧美综合精品久久成人,久久一本综合http://www.aygfsteel.com/bourn/category/25513.html 反者道之动Q弱者道之用?  天下万物生于有,有生于无?/description>zh-cnThu, 08 Nov 2007 04:51:55 GMTThu, 08 Nov 2007 04:51:55 GMT60在基于Spring及Hibernate应用E序中用ETags降低带宽占用和服务器压力http://www.aygfsteel.com/bourn/articles/153572.htmlD|D|Wed, 17 Oct 2007 06:46:00 GMThttp://www.aygfsteel.com/bourn/articles/153572.htmlhttp://www.aygfsteel.com/bourn/comments/153572.htmlhttp://www.aygfsteel.com/bourn/articles/153572.html#Feedback0http://www.aygfsteel.com/bourn/comments/commentRss/153572.htmlhttp://www.aygfsteel.com/bourn/services/trackbacks/153572.html阅读全文

D| 2007-10-17 14:46 发表评论
]]>
cMGoogle构架的开源项目Hadoophttp://www.aygfsteel.com/bourn/articles/153544.htmlD|D|Wed, 17 Oct 2007 05:22:00 GMThttp://www.aygfsteel.com/bourn/articles/153544.htmlhttp://www.aygfsteel.com/bourn/comments/153544.htmlhttp://www.aygfsteel.com/bourn/articles/153544.html#Feedback0http://www.aygfsteel.com/bourn/comments/commentRss/153544.htmlhttp://www.aygfsteel.com/bourn/services/trackbacks/153544.html 作? Scott Delap译? 张v?/strong> 发布? 2007q??7?上午5?5?

Java
主题
|格计算,
集群与缓?/a>

cMGoogle构架的开源项?a id="lv:t" title="Hadoop" >Hadoop 已经存在一q多了,现在正受到来自开发社区的q泛x。下面是来自Hadoop官网 的消息:

Hadoop是一个Y件^収ͼ可以让你很容易地开发和q行处理量数据的应?#8230;…Hadoop?a id="txjs" title="MapReduce" >MapReduce 的实玎ͼ它用了Hadoop分布式文件系l(HDFSQ。MapReduce应用切分ؓ许多Q务块L行。出于保证可靠性的考虑QHDFS会ؓ数据块创建多个副本,q放|在的计算节点中,MapReduce在数据副本存放的地方进行处?#8230;…

Hadoop是由Java~写的,该项目已到得Yahoo的全面支持,目的领袖Doug Cutting?006q一月开始已l被Yahoo全职雇用于此目中。华盛顿大学也从那时开始了一个以Hadoop为基的分布式计算的课E,评相关的材料也 日期
节点?/strong>
耗时Q小Ӟ
四月 2006 188 47.9 五月 2006 500 42.0 十一? 2006 20 1.8 十一? 2006 100 3.3 十一? 2006 500 5.2 十一? 2006 900 7.8 七月
2007 20 1.2 七月 2007 100 1.3 七月 2007 500 2.0 七月 2007 900 2.5

Tim O'Reilly那些 转到cMHadoop和Amazon EC2q种针对大规模应用ƈ在不断发展的解决Ҏ(gu)的创业者和开发h员所面对的问题的角度Q对Hadoop提出了反Ҏ(gu)见:

Web 2.0的主要h(hun)值来自于׃多用L成的数据Q如del.ico.us、Digg、Facebook……它已l超了M个hq行大规模的服务器Y件的? 业意义,如Gmail、Google Search、Live、Y! Search……放荡不羁的极客们Ҏ(gu)׃会去那些大规模blob存储QS3QGoogle文gpȝQ,大规模结构化存储(Google? BigtableQ,q有在这U微架构之上q行代码的工PMapReductQDryadQ等{?#8230;…我也不知道Doug Cutting的这U类似的开源物在q条路上已经C多远——也许这是{案?#8230;…
查看英文原文Q?a title="Open Source Google-Like Infrastructure Project Hadoop Gains Momentum" >Open Source Google-Like Infrastructure Project Hadoop Gains Momentum

D| 2007-10-17 13:22 发表评论
]]>
AJAX应用的客L负蝲均衡问题探究http://www.aygfsteel.com/bourn/articles/153531.htmlD|D|Wed, 17 Oct 2007 04:49:00 GMThttp://www.aygfsteel.com/bourn/articles/153531.htmlhttp://www.aygfsteel.com/bourn/comments/153531.htmlhttp://www.aygfsteel.com/bourn/articles/153531.html#Feedback0http://www.aygfsteel.com/bourn/comments/commentRss/153531.htmlhttp://www.aygfsteel.com/bourn/services/trackbacks/153531.html 作? Gavin Terrill译? 王翔(Vision Wang) 发布? 2007q?0?0?下午8?8?

Architecture
主题
RIA,
性能和扩展?/a>

今天Q当我们选择负蝲均衡Ӟ大部分Web应用集群选择Z软g或硬件的服务器端Ҏ(gu)Q?a >《Digital Web Magazine?/a>最q发表的一文?/a>讨论了一家公司如何在EC2支持的应用中实现客户端负载均衡?/p>

文章从负载均衡方案的需求谈P

  • 需要在应用服务器集中分担负蝲Q?/li>
  • 温和地应对单个服务器的宕机;
  • 保在最l用L可以把这l服务器视ؓ一个单独的服务器?/li>
  • 作者朱(韌 Lei ZhuQ分析了我们常用的服务端负蝲均衡手段——@环DNSQ?a >Round Robin DNSQ,文中提到Q?/p>

    很不q,循环DNS的主要弱Ҏ(gu)不能满上面提到的第二个需求,当两台服务器中的一台宕机时QDNS服务器仍然会l箋把请求发l它Q这D一半用h法获得响应?/blockquote>

    他还指出集群前端软、硬件专用方案的不Q负载均衡器QLoad BalancerQ自己L一个响应数量上限,管可以通过循环DNS配合专用负蝲均衡器解册一问题Q但l护一个专用负载均衡器需要额外投入数万美元, 而且通常后备负蝲均衡器只有在主设备出现故障后才会发挥作用?/p>

    在客L负蝲均衡概念的介l中Q作者请读者考虑关于桌面应用如何负蝲均衡的问题:

    桌面E序随机选择一台服务器Q然后尝试获取数据,如果服务器不可用或没有在预设的时间内响应Q那么就选择另一台服务器Q直到可? 提取数据。桌面应用与Web应用不同的是Q前者是独立于服务器Q可以在客户端通过Ҏ(gu)务器讉K的负载均衡实现应用的可扩展性,而后者把客户端代? QJavaScript或Flash WSFQ保存在提供数据和资源的服务器上?/blockquote>

    Z把概念g伸到Web应用Q作者剖析了典型AJAX应用的关键组成:

  • 客户端代码:JavaScript/Flash客户端的SWFQ?/li>
  • 资源Q图片、联样式表、音频和视频文g、HTML文档Q?/li>
  • 服务端代码:用于反馈客户端所需数据的后台逻辑?/li>
  • 其中1?两类内容相对静止Q一般不像第3c那h负蝲均衡的需要。关注于W?cȝ成,作者徏议采用可靠的服务器或者像亚马?a >S3那样的服?/a>Q它描绘的策略如下:

    像桌面应用一P我们可以把一个应用服务器列表嵌到客户端代码里QWeb客户端包括一个称为Servers.XML的文Ӟ它保存了可用服务器的列表。客L通过AJAX或者Flash讉K列表中的每一个服务器Q直到找C台可响应的?/blockquote>

    管览器可以禁止客L代码向它所来源的那些服务器之外的服务器发v服务端调用,但作者还是徏议采用Flash或JavaScript的方案解册个问题。采用客L负蝲均衡有两个好处:

  • 不需要额外的服务器设备,“不需要专用负载均衡设备,无需配置负蝲均衡g或确认备份功能和主负载均衡器是否正常工作”Q?/strong>
  • 服务器可以被物理隔离Q?#8220;׃是客L选择服务器而不是由一个固定的负蝲均衡器重定向调用Q所以服务器的位|不受限?#8221;?/strong>
  • 文章l尾Q作者介l了上述技术如何在亚马逊的EC2和S3基础上构造一个叫VoxLite的具有高可用性和可扩展性的视频资讯应用Q不q作者ƈ没有架构Z个没有单Ҏ(gu)障的负蝲均衡Ҏ(gu)?/p>

    很多Web应用会面向特定区域,通过一个动态DNS支持的EC2实例实现调用的负载均衡。如果提供负载均衡的q个实例出现故障Q在动态DNS映像到另一个EC2实例前,整个pȝ׃可用了?/blockquote>

    Z克服q个问题QVoxLite通过向S3发vHTTP GET调用获得可用的服务器列表Q该列表由EC2实例的一pddl护Q?/p>

    1. 加蝲q解?a >http://s3.amazonaws.com/voxlite/?prefix=servers?/li>
    2. 如果当前q行实例没有被列出来Q就向一批EC2实例的关键服务器各发送一个空文gQ?/li>
    3. 通过试C马逊内部Web服务IP地址的连接情况,可以验证该批其他服务器的是否q行正常Q如果无法徏立连接就把该服务器从q批服务器的列表中删掉?/li>

    Ҏ(gu)你的需求,客户端负载均衡在l一负蝲均衡的架构下Q提供了一个有且具创新性的选择。作者ȝ道:

    通过在客L负蝲均衡中采用S3和EC2Q可以简化搭Z个具有弹性、扩展性、健壮性Web应用的工作?/blockquote>

    查看英文原文Q?/strong>Client side load balancing of Ajax applications



    D| 2007-10-17 12:49 发表评论
    ]]>你真的明白什么是可׾~性吗Q?/title><link>http://www.aygfsteel.com/bourn/articles/153532.html</link><dc:creator>D|</dc:creator><author>D|</author><pubDate>Wed, 17 Oct 2007 04:49:00 GMT</pubDate><guid>http://www.aygfsteel.com/bourn/articles/153532.html</guid><wfw:comment>http://www.aygfsteel.com/bourn/comments/153532.html</wfw:comment><comments>http://www.aygfsteel.com/bourn/articles/153532.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/bourn/comments/commentRss/153532.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/bourn/services/trackbacks/153532.html</trackback:ping><description><![CDATA[<p> 作? <strong>Gavin Terrill</strong>译? <strong>郭晓?/strong> 发布? 2007q?0??下午4?? </p> <dl><dt>C֌</dt><dd><a name="architecture" id="1,390" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">Architecture</a></dd><dt>主题</dt><dd><a name="performance-scalability" id="754" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">性能和扩展?/a></dd></dl> <p>“可׾~性(ScalabilityQ?#8221;是Y件厂商常常在新闻E中用到的一个词Q也是h们站在饮水机旁谈论的一个词Q,但这个词在很多情况下都被误解了。例如,很多起可伸羃性的时候其实指的是性能和高可用性。Royans K Tharakan试图回答“<a >什么是可׾~?/a>”q个问题Q他_ </p> <blockquote>可׾~性,单来_是以更大的规模来做你现在所做的事。展一个Web应用的规模在于让更多的h使用你的E序。如果你没法扑և Ҏ(gu)在展规模的同时提高性能Q没关系。而且只要你可以展规模来处理更大数量的用P那么有几个单Ҏ(gu)障(single point of failureQ也没关pR?br /> </blockquote> <p>Royans解释说如今我们在面对规模伸展的时候有两个选择Q?</p> <blockquote> <ul> <li><strong>U向的可伸羃?/strong>——在同一个逻辑单元内增加资源来提高处理能力。这L例子包括在现有服务器上增加CPUQ或者在现有的RAID/SAN存储中增加硬盘来提高存储量?</li> <li><strong>横向的可伸羃?/strong>——增加更多逻辑单元的资源,qo它们像是一个单元一样工作。大多数集群Ҏ(gu)、分布式文gpȝ、负载^衡都是在帮助你提高横向的可׾~性?</li> </ul> </blockquote> <p>架构师们都在到线性的可׾~性而挣扎,目的是让pȝ产出的增长与pȝ中投入资源的增长保持E_的比率。然而,增加资源会导致一般耗费 QoverheadQ的额外增长Q因此难以达到线性的可׾~性。Royans之UCؓ“伸羃性因?#8221;Qƈ用它来区分各U类型的伸羃能力Q?</p> <blockquote> <ul> <li>如果在你扩大规模的时候׾~性因子保持ؓ常数Q这U叫?strong>U性׾~?/strong>?</li> <li>但很可能有些lgq不像其他组仉么适应规模的增ѝ小?.0的׾~性因子叫?strong>ơ线性׾~?/strong>?</li> <li>话说回来Q也可能因ؓ增加更多lg而获得更佳的性能Q在RAIDpȝ中跨多个盘的I/OQ当盘多Q性能好Q。这U叫?strong>线性׾~?/strong> ?</li> <li>如果应用E序没有专门为可伸羃性而设计,有可能当规模扩大的时候情况会变糟。这U称?strong>负׾~?/strong>?</li> </ul> </blockquote> <p>跟Y件开发中的许多事物一Pq里也没?a >适合一切情形的银弹</a>可以解决你的伸羃性问题。Royans_“<strong>如果你急切需要可伸羃性,向纵向发展可能是最Ҏ(gu)?/strong>”Q但注意“<strong>不幸的是U向伸展会随着你的规模增长而越来越昂贵</strong>”Q而且“<strong>无穷的横向线性׾~性只是难以达刎ͼ而无ILU向伸羃性绝不可?/strong>”。他l箋_ </p> <blockquote>从另一斚w来说Q横向可伸羃性ƈ不要求你购买来昂늚服务器。它的本意是用普通的存储和服务器Ҏ(gu)来实现规模展。不q横向可伸羃性也不便宜。应用必M建造的最底层加以考虑才能在多台服务器上运行得像一台服务器一栗?</blockquote> <p>Royans最后徏议应该考虑所有的层次才能解决可׾~性问题: </p> <blockquote>对于一个成功的Web应用Q所有的层次都要同样能够应付规模的增ѝ包括存储层Q集文件系l、S3{)、数据库层(分区、联 合)、应用层Qmemcached、scaleout、terracota、tomcat clustering{等Q、Web层、负载^衡、防火墙{等。比如,如果你没办法实现多个负蝲q控制器来处理未来的网l流量,不管你在Web层的横向 伸羃性上扔下多少钱,都不会有什么效果。你的流量始l被限制在一个负载^衡控制器能够承受的程度?</blockquote> <p><strong>查看英文原文Q?/strong><a >Think you know what scalability is?</a> </p> <img src ="http://www.aygfsteel.com/bourn/aggbug/153532.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/bourn/" target="_blank">D|</a> 2007-10-17 12:49 <a href="http://www.aygfsteel.com/bourn/articles/153532.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>交互设计_Nhttp://www.aygfsteel.com/bourn/articles/146350.htmlD|D|Wed, 19 Sep 2007 01:57:00 GMThttp://www.aygfsteel.com/bourn/articles/146350.htmlhttp://www.aygfsteel.com/bourn/comments/146350.htmlhttp://www.aygfsteel.com/bourn/articles/146350.html#Feedback0http://www.aygfsteel.com/bourn/comments/commentRss/146350.htmlhttp://www.aygfsteel.com/bourn/services/trackbacks/146350.html

    12?22nd, 2006 by 奇遇

    书名原文Q?About Face 2.0: The Essentials of Interaction Design
    作者: [ ?]Alan Cooper Q?Robert M. Reimann 译者:詹剑锋、张知非

    推荐?/strong>
    本书是一本由一位在交互设计前沿有着10q设计咨询经验及25q计机工业界经验的卓越权威撰写的设计数字化产品行ؓ的启蒙书。它探烦了一个独特的设计? 域,卛_杂系l行为的设计——特别是软gȀzL术。本书论qCU具有革命意义的设计观念——hc驱动设计过E? 本书是一本难得的大师l典之作Q应该是一本品规划师、界面设计师以及可用性工E职业h员或者程序员都想得到的书?/p>

    uploads/200612/22_135419_aboutface2.jpg

    ?br /> 本书旨在为?zhn)提供一些有效而实用的工具来设计用L面( user interface Q。这些工具很明显分ؓ截然不同的两c:战术性工? (tactical) 和策略?(strategic) 工具。战术性工h使用和创建用L面的习惯用法 (user interface idioms) ——如对话?(dialog box) 和下压按?(push button) ——的提示Q?hint Q和技?(tip) 。而策略性工h思考用L面习惯用法的方式Q换a之,即用户与用户界面习惯用法的交互方式?br /> 虽然已经有了一些介l策略性或者战术性准则的书,我们的目标在于写一本能两者融Z体的书。在帮助(zhn)设计更有吸引力、更有效的对话框的同Ӟ本书q将帮助(zhn)理解用户如何了解?zhn)的YӞ以及与之交互的方式?br /> 设计有效的用户交互和界面之关键在于将{略性和战术性的Ҏ(gu)合二Z。例如,客观上不存在好的对话框——对话框的品质取决于具体的应用情形:用户? 谁,他们的背景和目标是什么。仅仅应用一pd的战术性说明( tactical dictum Q,会创徏用户界面变得更容易,但这q不能最l结果更好。同P对于用户应该如何与?zhn)的系l交互的深层ơ思考也不能改善软g本n。真正奏效的是:在策 略上对用户与特定软g的交互方式保持敏感的同时Q拥有一个可以在L情况下应用的在你掌握之中的战术工L Q?tactical toolbox Q? 。本书既会加深?zhn)对用L理解Q又教(zhn)如何把q些理解转变计理c?br /> 谁应该读q本?br /> ?1995 q?8 月,软g观念革命Q?About Face Q这本书W一ơ出版时Q?界面设计 (interface design) q是个未开垦的新领域。少Ch在Y件工E的影子下,勇敢C用户界面设计师的头衔工作Q正如机敏的哺乛_物在_暴的巨龙阴׃爬行。正如在软g观念革命 W一版中所指出的,软g设计被h们错误地理解和评仗过L怎么做的Q程序员就是怎么做的。很多处境不佳的文档工程?(documenters) 、培训者、技术支持h员,以及处于增长势?可用性工E职业h员( usability practitioners Q? 都意识到Q某些事情应该改变?br /> Web 令h吃惊的、似乎是一夜之间的发展和流行,驱动了这U改变。突焉Q易用性( ease Of use) 成了挂在每个人嘴边的术语。在 20 世纪 90 q代初期Q即多媒体短暂流行的期间Q涉x字品设计的传统设计师纷U{?Web 。表面上Q新的设计师头衔像杂草一h玎ͼ信息设计?(information designer) 、信息架构师 (information architect) 、用户体验策略师 (user experience strategist) Q以及交互设计师 (interaction designer) ?C U公司的首席职务Q首席用户体验官Q?user experience officer Q一开始就存在Q他的工作核心是创徏以用户ؓ中心的品。很多重点大学都争先恐后地开展这些理论的培训。与此同Ӟ可用性工E和人性因素( human factor Q职业h员的C也在提升Q现在被承认是推动更好品设计的领导者?br /> 虽然 Web 使得界面技术倒退了不止十q_但它无可争议地将用户需求永久地|于公司的雷达之上。作者坚信: .COM 的衰败只能得用户及光求的可见性,以及对它们的x在将来变得更加明显。h们一般对新技术感到厌倦。消费者传达了明确的信息,他们所需要的好技术是? 易用的Qƈ且能满他们需求的技术?br /> 因此Q作者很高兴地说Q新版本的读者群会大大地增大QQ何对用户与数字品的交互感兴的人都会在读这本书的过E中获得独特的能力洞察力。程序员、与 数字产品相关的设计者、可用性工E职业h员、项目经理都会从此书中受益匪。读q《Y件观念革命》( About Face Q? W一版或《Y件创C路》( The Inmates are running the Asylum Q? W一版的读者会在此发现更新颖且更详l的有关设计Ҏ(gu)和原理的详细信息?br /> Z么要做交互设?br /> 《Y件观念革命》的W一版描qC一门被UCؓ软g设计的学U,同时也可UCؓ用户界面设计。在q两个术语中Q用L面设计有更强的生命力。在本书里,我们仍会使用它,而且大多数是合适的?br /> 然而,W者很清楚Q本书所讨论的内容要q比用户界面设计的范围广。界面这个词意指表面Q本书所阐述的大多数设计问题要远q比 CRT 屏幕的表面问题深奥,它直接触及了“数字产品是什?#8221;Q以?#8220;数字产品要做什?#8221;{核心问题?br /> q些q来Q对于这c设计,Z已经提出了许许多多的术语。在 2000 q左叻I公司?Web 的兴达到顶Ҏ(gu)Q被UCؓ信息架构Q? information architecture Q?IA Q的学科g最l包含了此处q里讨论的这c设计。但是正?Web 在经方面的前景已经暗E一P IA 基本上也保留了它?Web Z心的狭隘视图Q如何组l和览面上的内容。随着新经的明显下滑Q?IA 产业的好q也逐渐消失?br /> 另一个近q来行的术语是 体验设计Q?experience design Q?。美国图形艺术研I所 (American Institute of Graphic Artists Q?AIGA) 特别提倡用这个术语来概括用于开发数字品和pȝ的不同设计与可用性工E学U。这个想法很有吸引力Q但它仍然回避了一个问题——什么样的设计才是交互式 pȝ设计的真正核心,交互式系l设计是一U明显不同于已有设计的崭新设计?br /> 体验设计q种x也有一定的问题。在W者看来,体验是h与h工制品(或者其他生物)交互的结果。体验出现在一定的上下文场?(context) 中,q一步由内部、心理的个h环境所调节Q这U个人环境由动机、过ȝ验、气质和多种认知因素形成?br /> 作ؓ设计者,我们不能声称能够设计一Uh工制品或者系l的用户体验Q但我们能够设计与h工制品交互的机制Q以改善用户体验。因为,我们怿体验发生? 人和人工制品交互的过E中Q我们已l选择?#8220;交互设计”q个术语来表C本书描q的q类设计Q该术语?Bill Moggridge ?Bill Verplank ?20 世纪 80 q代首创。你不能设计体验本nQ但你能设计调节和引g验的交互行ؓ?br /> 交互设计的定?br /> 单地_交互设计?人工制品 (artifact) 、环境和pȝ的行为,以及传达q种行ؓ?外Ş元素 (formal element) 的设计与定义。不像传l的设计学科主要x 形式 (form) Q最q则是关?内容和内?(content and meaning) Q而交互设计首先旨在规划和描述事物的行为方式,然后描述传达q种行ؓ的最有效形式Q参见图 1 Q?br /> 交互设计借鉴了传l设计、可用性工E及工程学科的理论和技术,它是一个具有独Ҏ(gu)法和实践的综合体Q而不只是部分的叠加。它也是一门工E学U,h不同于其他科学和工程学科的方法?br /> 交互设计是一门特别关注以下内容的学科Q?br /> ? 定义与品的行ؓ和用密切相关的产品形式
    ? 预测产品的用如何媄响品与用户的关p,以及用户对品的理解?br /> ? 探烦产品、h?上下?(context) Q物质、文化和历史Q之间的对话 (Riemann ?Forlizzi,2001)
    ? 交互设计从目标导?(goal-directed) 的角度解决品设计:
    ? 要Ş成对Z希望的品用方式,以及ZZ么想用这U品等问题的见解?br /> ? 重用户及其期望目标?br /> ? 对于产品特征与用属性,要有一个完全的形态,而不能太单?br /> ? 要看C品最l成品的样子Q它们目前的样子q不重要?br /> 设计的三l?br /> 交互设计着重于传统设计较少探烦的领域:行ؓ设计?br /> 所有的设计影响人类行ؓQ结构关于h们用空间的方式Q与形式和光U有兟뀂如果没人对张脓(chung)L表达的信息有所反应Q那张脓(chung)d有什么意义呢Q?br /> 引入交互技术——计机的礼节——来设计人工制品的行为,以及q种行ؓ如何影响和支持h的目标和期望Q已l成Z门值得x的学U?br /> 理解交互设计和传l设计关注点的不同方法之一是借助历史透镜。在 20 世纪的上半叶Q设计者主要关注Ş式。后来设计者逐渐x内涵Q例如,产品设计师和l构师在 20 世纪 70 q代引入了本土和怀旧Ş式。直C天,q种势仍在l箋Q诸?PT Cruiser 的怀旧风格的汽R。今天,信息设计师l关注内涵,包括可用内容的设计?br /> 在最q?15 q以来,来多的设计师开始谈为:软gȀzL?(software-enabled) 的品(或复杂的机械Q直接与用户交互的动态方式?br /> q些xQŞ式、内涵及行ؓQƈ不是怺排斥的。交互品必d包含各部分QY件应用关注更多的是行为和形式Q而对内容的需求较?yu)?Web 站点和公用信息亭x更多的是内容和Ş式,而较?yu)关注复杂的行ؓ?br /> 因ؓQ复杂系l的行ؓ通常不是一个审学 (aesthetics) 的问题,而是认知因素 (cognitive factor) 和逻辑q程 (logical processes) 的结合,交互设计应该采用pȝ化方法,且能从这U方法中受益匪浅?br /> 交互设计师应该,也是首先要做的,理解使用他们设计的h们的目标、动机和期望Q心智模?Q?mental model Q。这些最好能被理解ؓ“叙述” (narrative) ——时间u上的逻辑Q或者情感)q展?br /> 与这?#8220;叙述”盔R应Q所设计的h工制品必d有它们自q行ؓ叙述Q且q些行ؓ必须成功C用户的期望吻合。不像大多数机械制品Q只有简单的行ؓQ? 观察之下一切都一目了Ӟ软g和其他数字品因为其行ؓ潜在的复杂性,所以它们需要交互设计。Y件对于观察者是不透明的,然而它所表现出来的可能行为几? 是无限的?br /> 一些设计者,以设计的传统形式Q如视觉 (visual) 、声韻I audible Q、触?(tactile themes) Q模? (patterns) 、风?(style) Q以及习惯用?(idioms) 据,认ؓ交互元素应被视ؓ随着旉变化的感觉数据( sense data Q流Q类g动画 (motion picture) Q因此完全可以通过传统设计Ҏ(gu)来描q。然而,q种论点有严重的~陷Q尽交互设计面向Ş式的斚w非常重要Q但是,除非它们是通过有效和合适的行ؓl织 的,否则几乎没用。如果没有一个逻辑l构或流来帮助解决用L实际问题Q那么面向Ş式的交互设计Q?form-oriented interactive design Q本w只是隔靴搔痒,价值值得怀疑?br /> 换句话说Q如果没有条理化?#8220;叙述”Q感觉数据本w毫无意义。电(sh)׃能光有特效,叙述也很必不可少。这一点,对与数字产品的交互而言Q更有效Q因为对 话不在第三方可观察到的虚qd界中发生。相反,它是在h和设计的人工制品之间的交, Bill Buxton Q?1990 Q称之ؓ“非文字的自然语言”。这U对话(也就是行为)的期望和设计是交互设计的实质?br /> 本书的内涵和外g
    本书是一本有关交互设计(交互pȝ复杂且以用户Z心的行ؓ设计Q的原理和方法的参考书。本书的W一强?设计q程 (design process) Q以及对用户的系l理解;W?2 提供了{略原理和工PW?3 更深地ȝ战术性的问题?br /> 本书不打以 指南 Q?guide Q的姿态出玎ͼ或者提供一些界面标准。实际上Q你会在W?19 章了解到Z么那些工L使用是有限制的,而仅仅与特定环境相关。也是_在本书中描述的过E和原理是与你选择的风格指南相兼容的,它也是解决Q意这c? 问题的一本极好的配套书?指南 擅长于回{做什么,但无法回{ؓ什么这样做。本书打解决交互系l设计中未解决的问题?br /> 设计交互pȝ?4 个步骤:研究问题域( researching the domain Q,理解用户 (understanding with user) 及其需求;定义解决问题的框?(defining the framework of a solution) Q完善设计细?(filling in the design details) ?br /> 很多业内人士会加上第 5 个步骤:认Q?validation Q——让用户试Ҏ(gu)的有效性。他们这么做Q不会错。最后一步是众所周知UCؓ可用性学U的一部分?br /> 可用性工E方面的重要文献在持l增长,但有关交互设计的资料却相对很。本书专门关注交互设计的q程和原理,设计Ҏ(gu)的测试方法则留给出版的相兛_术著作。本书可以与可用性工E方法和实践的文献配套用。通过和谐地结合这两个学科Q你会获得最好的设计成果?br /> 译者注 作者定义的术语Q见W?2 章?br /> 译者注 作者定义的术语Q见W?6 章?/p>

    名家推荐
    ALAN COOPER 作者推?br /> 当我们被联系??写中文版的序aӞ我们非常兴奋Q因为我们有Z接触一Ҏ(gu)的而ؓC多的读者,包括学生Q设计h员,开发h员,以及人性因素专家等?br /> 在最q几q_中国不仅成ؓZ软g的数字?—?从计机、蜂H电(sh)话到家庭和个人娱乐系l?—? 的主要制造者,也成些品的日益重要的消费者。这意味着在中国数以百万的新用h在用Y件和数字产品Q其中不乏初学者。由此可见,对于用户界面? 和交互设计师来说Q这是一个独一无二的机会,他们的工作可以极大地改进q些数字产品的质量和合意性,q最l媄响数以百万计的h们的生活?br /> 和西方一P中国的开发者和刉商l过了一D|间才理解Q用L面和用户交互对于使得数字产品更有用和更成斚w所h的极端重要性。除了改善用L? z质量以外,Ҏ(gu)使用和理解,q且能够更好地满用户需求的产品有额外的潜力Qؓ生商增加利润和市场份额。我们希望本书将会ؓ市场引领一条通向更好的数 字品的道\Q也可以为本书的读者,不论学生Q设计h员,开发h员还是制造商Q带来更多的机遇?br /> 交互设计是设计中的一个新领域Q在q里是行为,而非形式成ؓ最为关键的因素。Ş式必L持行为,但是当用户和一个复杂的数字产品交互Ӟ用户所能感? 到的产品质量和从中获得的亲n体验均来自于产品的行为。不是基于Y件的产品不会有复杂的行ؓQ锤子只有单一而简单的行ؓQ除了样式以外不需要别的设计。然 而,蜂窝?sh)话、掌上电(sh)脑或者数码相机有很多复杂的行为,而这些行为需要仔l而专门的设计Ҏ(gu)? 本书试图描述行ؓ和交互式设计q一崭新而又令h兴奋的领域的基本原则Q我们预这一领域会成ؓ 21 世纪设计学中的一个主要领域?br /> 本书的大部分例子来源于桌面计机应用?WWW 。尽如此,书中几乎所有的内容也适用于别的数字设备?br /> 本书q不致力于阐q所有可能的设计Ҏ(gu)Q它也不包括用户界面标准的风格指南。事实上Q本书提供了一个独特的q程和框Ӟ借助它可以设计品和产品的行为,而这些行为真正地解决了用h核心的需求和意愿?br /> 书的W一描qCq一pȝ的过E?—?我们UC为目标导向设?—?q一部分有一个前提,是Q如果你对品的用户有深入了解,也了解他们用该产品的动机(他们的目的)Q那么你可以为最重要的用户需求开发界面?br /> 本书W二和W三提供了高层ơ和l节的设计原则,主要涉及如何选择产品行ؓQ既可以满用户需求,又可以ؓ用户消障,q无疑会提高用户的满意度? 生率。在q去?13 q里Q我们在全世界用了上面所说的Ҏ(gu)为小到刚hQ大到有上百亿美金的公司的数癄数字讑֤QY件品以及基?Web 的服务做了设计?br /> 自从该书 2003 q在国出版以来Q?在美国和Ƨ洲本书已被许多大学的计机U学和设计专业选ؓ教材 。尤其是人物角色的用(在第一所描述的刻ȝL一个强有力的工PQ几乎已l成为普遍采U的设计和h性因素的最优方法?br /> 无论在中国还是西方,交互式设计的未来都是光明的。我们希望本书能Ȁ发出中国C代数字品和服务中的杰出设计Q?/p>

    Robert Reimann
    Brookline , Massachusetts , USA
    Alan Cooper
    Menlo Park, California, USA
    2005 ?1

    叶展 人机交互分析?/p>

      ȝ典著作如同饮醇酒Q回味隽永。而给l典著作写序Q则如推销醇酒与hQ在别h的沉醉中分n快乐?br /> 摆在我面前的是一本经典著作,一本计机领域的经典著作。众所周知Q计机领域多的是应景之作,比如某某软g版本 X.0 的用指南之c,而少能经得v旉考验的经典著作。其原因一斚w是计机领域发展q猛Q知识更C谢极快;另一斚wQ则是计机领域应用重于理论Q所以有 思想深度的著作比较少?br /> 一本书要成为经典,L要两个条件。其一是著者是拥有深邃的思想Q且文笔畅。大师人物Q往往单从文字上的修养q得出。比如经界? George Stigler Q诺贝尔奖获得者,被誉为经学界一支笔Q和软g工程斚w?Frederick Brooks Q《神U的人月》著者)Q他们的著作拿v来阅dD,你马上就可以在行文中感到那种大家的雍定w度。而更重要的是Q大师们在书中所讲述的往往不是l枝末节 的技巧和技术,而是一U深邃的思想Ҏ(gu)Q可以给Z深层ơ的启发。那U风度和深度Q是难于模仿的?br /> 要成为经典的W二个条件是作者的思想要经得v旉的考验。对计算Zc来_L要能l过 10 q的考验。这个标准比之其他领域已l是很宽杄了,但在q个标准下大部分计算Zc会落马?br /> 以笔者来看,本书基本上符合前面的两个条gQ是一本计机领域的经怹作?br /> 本书的作?Alan Cooper Q是计算Z界一位成名高手。除了早期在 Visual Basic 斚w的工作外Q他被誉?Visual Basic 之父Q,更重要的是他曄C一个新领域的前沿,参与q媄响了软g开发领域一ơ深ȝ变革。而这个新领域Q就是hZ互( Human-Computer Interaction Q。这个变革,是Y件开发领域的W三ơ革命?br /> 在Y件开发领域出现过三次革命—?50 q代高语言的出玎ͼ使得软g开发从机器gQ机器语aQ的束缚中解脱出来,E序员能够从Q抽象+l构Q层ơ来q行思考。此为第一ơ革命?70 q代软g工程兴vQ得Y件开发的注意力由语言和编译器技术拓展到软g开发的q程Q?software process Q。h们意识到Q要提高一个Y件品最l的静态质量,必须提高q个产品产生q程的动态质量。此为第二次革命。?90 q代以来Q随着计算Y件和商业行ؓ的联p越来越紧密Q特别是互联|的兴vQh们进一步认识到QY件不是孤立的QY件的质量q不是仅由其本np军_的, 而是由(软gQ用Pq个大系l来军_的。Y件的成功Q在于是否它能够成功嵌入到用L商业zd中。对人的因素的重视,使得一门新的领域崛赗这是人机 交互。经q十几年发展QhZ互理论已l全面改观了一般商用Y件设计开发的程和方式,成ؓ业界的标准。是为第三次革命?br /> 每次革命或变革,都会有豪C士涌玎ͼ为改变旧的思想和宣传一U新的思想而摇旗呐喊,成ؓ领导变革的预a家和代言人。在 90 q代Q一批h物涌玎ͼ一批著作发表,ZhZ互理论在业界的应用打开了局面?Donald Norman ?1990 q出版了?The Design of Everyday Things 》, Jakob Nielsen ?1994 q出版了?Usability Engineering 》,本书作者在 1995 q出版了本书的第一版。这些h的著作,都是l受?10 q考验的,现在都成了经典。他们当时的思想Q现在已l成Z界的L。他们也自然而然地成Z人机交互领域举轻重的领D?br /> 阅读本书Q最重要的是了解作者所阐述的关于Y件设计开发的高层ơ理念和指导思想。因Z者是最CơY件开发思想变革的积极参与者,他亲自现w说法写 的书当是记录q个思想变革的宝늚W一手资料。正因ؓ如此Q笔者窃以ؓ本书的第一部分最是重要,乃ؓ全书的灵。这部分从了解用P了解用户需求讲P? 构徏用户模型Q到设计 scenario 来描qY件系l现在和未来的行为模式,到如何把对用L理解和行为模式{换ؓ设计Ҏ(gu)。作者不仅把软g设计的整个过E流畅清晰地描述出来Q而且真知D? 断涌C其中。下面随便列举一二:
    ? 软g的设计和开发,不要囫囵吞在一块,最好要分成两个单独的过E——设计过E和开发过E: 传统的Y件工E理论,是对整个软g设计开发的q程化研IӞ而更侧重~程试和项目规划部分,q且把设计和开发؜在一赗而现在hZ互理论,实际上是把Y 件设计这部分提出来,是对软g设计的过E化分析Q还借用了认知心理学和其他领域的成果。目前业界普遍认为:对商用Y件来_q两个阶D分开Q有助于软g? 量的提高?br /> ? 应当以用户ؓ中心去设计YӞ而不是以某项新技术或者技术h员ؓ中心d发YӞ q一Ҏ(gu)软g走出象牙塔,渗入人类生活和商业领域的必然后果。作者虽然是E序员出w,但对以程序员Q技术的代表Qؓ核心的Y件开发的局限性有清醒的认识, q指U方法再也不能适应开发Y件品的需要。基于用L设计Q?User-Centered Design Q是 90 q代以后?#8220;?#8221;的最火的一个词。它实际上是说在软g设计q程中要围绕用户和商业活动来q行Q是不是围绕技术和E序员来q行?br /> ? 军_软g成功与否的,不是一个Y件有多少个功能,而是q些功能是否有用和好用?br /> ? 设计软gQ重要的是设计用戯为: 作者所极力鼓吹的一个新的名词——交互设计( Interaction Design Q的含义是软g设计师设计的不是ȝ软gQ不是静止的界面Q而是zȝ行ؓQ是用户和Y件硬件环境之间的动态交互,q寻求动态的最优?br /> 需要指出的是:以上思想Q在 1995 q本书初版时乃ؓ革命Q与今则Z界常识——v码是国商用软g开发领域h所共奉的常识。现今但凡大一点的和Y件开发有关的公司Q其软g设计开发过E都? 作者所提出的思\改进q。从另一个角度讲Q这更体C 90 q代q场变革的媄响之p?br /> 在本书的W二部分Q?Alan Cooper 介绍了一大把新概念和新名词(众所周知Q?Alan Cooper 在业界有卖弄新名词的“不良”嗜好。业内h最爱开的玩W之一是传说在什么什么会议上 Alan Cooper 又发明了一个新的英文词。当然能够在计算Z内成U玩W的对象本np明这个h很有影响力。)q些新名词,׃是独此一Ӟ别无分号Q读者读来需要一 定的辨别力。需要记住的是:虽然q些名词比较新奇Q但其含义和基本思\应该是容易接受的?br /> 与前两部分比Q本书的W三部分完全是实用性的了,有诸多实际的设计案例和讨论,而且主要是基于现有图形用L面的格局?br /> ׃本书的这U结构——由抽象理念入手Q到具体的设计方法和案例Q得它适合各类读者阅诅RY件公司的领导者可以通过前两部分了解软g行业的最新? 潮,q以此ؓ指导思想来改q自己公司内部的软g开发流E。Y件开发h员,可以学习书中介绍的具体的Ҏ(gu)Q更可以从更实际的案例讨Z获得启发。对学生? _除了学习~程{?#8220;?#8221;技术外Q通过M了解一下Y件行?#8220;?#8221;的思想Q拓展眼界,受益会不浅?br /> 国内软g行业l过多年发展已经初具规模Q当然在发展的过E中也遇到诸多问题。目前的一个共识是中国软g业和外国比,最大的劣势q不是在具体某项技术或 者编E方面。中国的勤奋而又有天分的E序员,可以获得国业界的编E大奖。由此可见单打独斗中国h是可以的。但目一大v来,中国软g业的固有劣势显? 出来了。中国的传统弱项主要是在软g工程和Y件过E等斚w。而现在西方Y件行业又q了一步,在Y件工E的基础上搞Z人机交互理论Q又引发了一ơ革命。我 们目前对q场革命的了解还是很肤浅QhZ互领域在国内的科研、教学和应用都还在v步阶Dc这很有些旧的差距没有弥补上,新的差距又生了的危险。这? 书现在被介绍到国内来Q将有助于我们填补这斚w的差距。此其时也!

    叶展
    人机交互分析?br /> 2005 q?7 月于国芝加?/p>

      叶展Q清华大学自动化pLU毕业,后ʎ留学,先后取得伊州理工学院Q?Illinois Institute of TechnologyQ的计算机硕士学位和卡内基美隆大学(Carnegie Mellon UniversityQ的人机交互QHuman-Computer InteractionQ硕士学位,现在国BCS理和IT咨询N公司任职。叶展目前主要的研究和工作领域是人机交互理论在游戏设计中的应用、h机界 面设计与评测、以及Y件开发流E设计和理。是q些领域有一定媄响的专家Qƈ应邀在包括CHI{一pd重要国际会议上发表了论文和演讌Ӏ?/p>

    ???br /> 今天QhcM仅在认识世界Q也在创造着C界。Y件作ZhcL创造的最复杂的h工制品( artifact Q之一 Q? 已不仅仅是hcL慧和工具的g伸,而在某种E度上作拟世界新法则的执行者和实施者统ȝ我们。诺贝尔物理学奖获得者费曼曾l以q种方式描述qhcd? C物的q程Q我们创造新事物Q而被创造的C物按照某U规则又创造新的事物,H然某一瞬间Q不同于人类灵魂的事物出CQ它与hcȝE然不同,或许q? 有着恶意Q威胁着人类。一个智者以q种玄想的方式展C对hcd造物的恐惧?br /> 今天的Y件h工制品会以这U方式工作吗Q是否会威胁到我们的人类Q作Y件业的一名从业h员,译者深知以 0 或?1 为工作基的计机所有智慧来自于设计师和E序员的智慧Q本w不h恶意。然而,现实的情冉| “ 受不正确的设计观念媄响开发的软g已经开始威胁到大众用户 ” Q技术派甚至以 “ 计算机盲 ” 通常U这些和计算机工作者一样富有智慧的Z?br /> 请尊重你的用P Alan Cooper Q这位在囑Ş用户界面领域驰骋数十q的大师l出了如此的忠告。大师的忠告是中肯而辛辣的Q技术不能高高在上,而应该植根于土壤QY件工Z不能qZh? 服务的宗旨,否则p被革命了。新技术经的沉也许指示着新的机遇Qؓ大众用户服务Q采取全新的目标导向设计Ҏ(gu)?br /> q种Ҏ(gu)x用户的目标;认真地研I实际用户和潜在用户Q定义具体的原型用户 ( 人物角色 Q?persona) Q用h物角色作本提U?(scenarios) 的主要h物;人物角色作ؓ定义交互产品功能、行为和形式的主要工P遵@行ؓ设计的原理?br /> 在系l模型方面,作者精彩地辨析了程序员的实现模型和用户的心智模型之间的差异Q指出程序员通常ZҎ(gu)实现的私利牺牲用户利益,用实现模型取代用? 的心智模型,从而生了认知斚w的`沟,因此在交互设计领域有必要区分设计和编E的责Q。在用户分析斚wQ将用户分ؓ新手用户、中间用户和专家用户三类 Q?提出了没有用h意永q做新手用户Q只有少数用h会成Z家用P因此大多数用户都是永久的中间用户Q设计应该ؓ中间用户优化的精辟论解?br /> 在行为和形式设计斚wQ作者深d揭示了一些现象背后隐藏的本质。首先从行ؓ立场出发Q定义了软g姿态的概念Q将软g分ؓ独占、暂时、精灵和辅助四种 姿态。不同姿态的软g对应不同的用L型,如独占式应用的用h怹的中间用P应该在用整个屏q的情况下优化独占姿态的应用Q而暂时姿态应用应该简 单、清晰而切中要点,保持在一个窗口和视图内。在用户心理层次Q作者深d揭示了流状?Q?#8220; 深深的完全沉思状?” Q经?“ d的欢? ” Q能够让你忘记时间的逝。因此,软g交互应该促进和加强流状态,而不是打断或者干扰流状态。ؓ了创建高效的软gQ作者提Z附加工作的概念,分析了附? 工作产生的原因,指出只有消除附加工作Q用h会效率更高。在q种背景下,作者也详细地分析了囑Ş用户界面的导航问题,以及如何消除D中出现的附加? 作。另外,作者指惛_发效能高和用户用v来会愉?zhn)的YӞ软g必须能够体脓(chung)和够聪明。也正是从这个角度出发,作者详l地讨论了如何改善数据检索和 数据输入Q其体贴和_聪明?br /> 在讨论如何ؓ不同用户设计Ӟ作者指出有两个概念在根据不同的l验水^用L需求进行分cL面特别有用:命o向量和工作集。命令向量是允许用户向程 序发h令的Ҏ(gu)技术:下拉菜单、弹单和工具条控仉是命令向量的例子。好的用L面提供多U命令向量,q种冗余性让不同技能水q的用户和不同偏好的 用户Ҏ(gu)自己的意愿和能力向程序发起命令。因为每个用户都在无意识地记忆经怋用的命oQ持久的中间用户C了命令和功能的适度子集Q工作集。虽然严格的 说没有一个标准的工作集可以覆盖所有用L需求,但是用户和用模式的研究和徏模可以生一个较?yu)的功能子集。这个最工作集可以通过目标导向的设计方? 定Q利用脚本提U来发现你的人物角色所需求的功能。这些需求直接{化成最工作集的内宏V?br /> 作者也详细地阐qC视觉界面设计的一些基本原理,q在具体的背景下讨论了这些视觉界面设计原理的应用。如视觉界面必须Q?br /> ? 避免视觉噪音 (visual noise) 和杂?(clutter) Q?br /> ? 使用Ҏ(gu) (contrast) Q相似性( similarity Q与分层 (layering) 来区分和l织元素Q?br /> ? 在每一个组l层ơ提供视觉结构和;
    ? 使用紧凑、一致而场景合适的囑փQ?br /> ? 全面而有目的地结合风格和功能?br /> 在对L的三cȝ面范例:实现Z心( implementation-centric Q、隐?(metaphoric) 和习惯用? (idiomatic) 分析的基上,作者独特而精辟地指出隐喻的限Ӟ了习惯用法的力量Q深d指出 “ 所有的习惯用法都需要学习,而好的习惯用法只需要学一?” ?br /> 另外Q作者凭借渊博的知识和丰富的产业界经验,深刻全面地揭C和阐述了各U交互细节的本质、演化和蕴含的发展机遇,如直接操?(direct manipulation) 、选择、拖?(drag and drop) 。在囑Ş用户界面发展的历史背景下Q作者高屋徏瓴地详细讨论了各U控件和它们的行为?br /> 在译者学习和译q本书的q程中,深深地感受和体会C者的大师风范Q以及卓不的见解和深ȝ思想Qƈ且在具体的科研实践中受益。相信Q何一个读者只要用心读q本书,都会有同L感受Qƈ有丰富的收获?br /> 译者要感谢参与本书出版q程中的朱沭U编辑、孙学瑛~辑?蒋芳 奛_Q感谢她们的耐心、信d协作?/p>

    詹剑?( jfzhan@ncic.ac.cn ) 、张知非
    2005 q?3 ?1 ?/p>

    W一?了解你的用户
    W一部分 弥合差距
    1 目标导向设计
    2 实现模型和心智模?br /> 3 新手、专家和中间用户
    4 理解用户Q定性研I?br /> 5 用户建模Qh物角色和目标
    6 脚本提纲Q将目标转换?br /> 7 l合好的设计Q原理和模式
    W二?设计行ؓ和Ş?br /> W二部分
    8 软g姿?br /> 9 和谐与流
    10 消除附加工作
    11 D和调?br /> 12 理解撤销
    13 重新思?#8220; Files ”?#8220; Save ”
    W三部分 提供高效能和愉?zhn)?br /> 14 设计体脓(chung)的Y?br /> 15 设计的Y?br /> 16 改进数据?br /> 17 改进数据输入
    18 Z同的需要进行设?br /> W四部分 应用视觉设计原理
    19 外观设计
    20 隐喻、习惯用法和启示
    W三?交互l节
    W五部分 鼠标和操?br /> 21 直接操作和定点设?br /> 22 ??327
    23 ??336
    24 操作控g、对象和q接
    W六部分 控g及其行ؓ
    25 H口行ؓ
    26 使用控g
    27 菜单Q教学向?br /> 28 使用菜单
    29 使用工具条和工具提示
    30 使用对话?br /> 31 对话框礼?br /> 32 创徏更好的控?br /> W七部分 与用L交流
    33 消除错误
    34 通知和确?br /> 35 与用L其他交流方式
    36 安装q程
    W八部分 越桌面的设?br /> 37 Web 设计
    38 嵌入式系l的设计



    D| 2007-09-19 09:57 发表评论
    ]]>
    Code Engine使用手册V1.3http://www.aygfsteel.com/bourn/articles/143997.htmlD|D|Mon, 10 Sep 2007 06:47:00 GMThttp://www.aygfsteel.com/bourn/articles/143997.htmlhttp://www.aygfsteel.com/bourn/comments/143997.htmlhttp://www.aygfsteel.com/bourn/articles/143997.html#Feedback0http://www.aygfsteel.com/bourn/comments/commentRss/143997.htmlhttp://www.aygfsteel.com/bourn/services/trackbacks/143997.htmlVersion 1.3

    1.       基本l成Q?/span>

    a)         q行入口CodeEngineRunner?/span>mainQ)Q里面注册所有的GeneratorQ主要有Q?/span>IbatisGeneratorQ?/span>ControllerGeneratorQ?/span>JSPGenerator三个QQ意一个可以单独运行多ơ;

    b)        代码l构Q?/span>*Generator,用于生成domainQ?/span>manager?/span>sqlmapQ?/span>controller{文Ӟ在生成之后ؓ了保持系l的完整性,通常会调用一?/span>ModifierM攚w|文Ӟ׃每个Generator会单独再ơ访问配|文Ӟ所以可以单独和重复生成Q?/span>

    c)        主要的配|文件有2个,位于code_engine目录下,分别为:code-engine-config.xmlQ?/span>code-engine-gears.xmlQ但在实际用中Q我们经常要配置的是code-engine-gears.xmlQ前者一般在目开始的时候设定,后者用来生成和修改domainQ?/span>manager?/span>sqlmap, controllerQ?/span>jsp和相关的一些配|文Ӟ

    d)        模板文g位于template文g夹下面;可以Ld和调用;语法?/span>freemarkerQ但是,通常只需参照其他模板文gQ一般都可以写出新模板;

    e)         每次q行codeengine都会?/span>backup目录下面生成备䆾文gQ以备再ơ生成和修改Q?/span>

    f)         生成日志?/span>logs目录下;

    g)        Framework目录是框架目录,可重用部分,在生成新目时候拷贝用Q?/span>

    h)        Reference目录是一些开发组Ӟ主要是写jslgQ?/span>

    2. code-engine-config.xml 配置?/span>Q?/span>

           <?xml version="1.0" encoding="UTF-8"?>

    <codeEngineConfiguration>

        <context>

            <distDir path="D:"wiczone"trunk"wiczone" java="src" web="war"/>

            <!--<distDir path="D:"test"trunk"project" java="src" web="war"/>-->

            <!--<distDir path="build" java="src" web="war"/>-->

            <templateDir path="template"/>

            <i18nSupport>true</i18nSupport>

            <database classPath="lib"mysql-connector-java-3.1.7-bin.jar">

                <driverClass>org.gjt.mm.mysql.Driver</driverClass>

                <url>jdbc:mysql://localhost:3306/wiczone</url>

                <username>root</username>

                <password>root</password>

            </database>

            <package base="biz.wic" app="application">

            <!--<package base="biz.web" app="framework">-->

                <domain>domain</domain>

                <controller>web</controller>

                <manager>manager</manager>

                <service>service</service>

            </package>

            <web layoutComponent="tiles">

                <manager>WEB-INF"applicationContext-manager.xml</manager>

                <lucene>WEB-INF"applicationContext-lucene.xml</lucene>

                <servlet>WEB-INF"action-servlet.xml</servlet>

                <security>WEB-INF"applicationContext-acegi.xml</security>

                <sqlMapConfig>WEB-INF"sql-map-config.xml</sqlMapConfig>

                <messages>WEB-INF"classes"messages.properties</messages>

                <tiles>WEB-INF"defs</tiles>

                <jdbc>WEB-INF"jdbc.properties</jdbc>

            </web>

        </context>

        <!--

        IMPORTANT NOTES:

        1.in most cases, we no necessary to modify the <context/> part, since we have already set done;

        2.each of controller/jsp can be re-created alternatively.

        3.please becareful that metadata's character case.

        4.the basis rule is:

            if not existed we will created;

            if already existed we may overwrited;

        -->

    </codeEngineConfiguration>

    1Q?nbsp;如上所C,< database > 用于配置数据库的q接Q注意要保证driver能访问到Q?/span>

    2Q?nbsp;<Package>负责生成各种代码使用Q?/span>

    3Q?nbsp;<web>用于指定一些配|文Ӟ

    4Q?nbsp;以上文g通常在项目开始的时候设定;

    <context>详解

    aQ?/span><distDir path="build" java="src" web="war"/>

            <!--<distDir path="D:"dist_project" java="src" web="war"/>-->

            <templateDir path="template"/>

            <i18nSupport>true</i18nSupport>

    distDir@path指目标项目的路径Q?#8216;build’是相对\径; @java?/span>java source code的根目录Q?/span>

    @web?/span>web application的根目录Q?/span>

    templateDir@path?/span>freemarker template所在的目录Q这里设定的?/span>$Code_Engin$"template; 此目录下攄用于生成controller?/span>jsp的模板文Ӟ?/span>ftl为文件后~Q;

    template /lib/下面攄的一?/span>common.ftl为通用?/span>functionsQ已l用auto imports引入Q要调用common.ftl?/span>functionQ通常cMQ?/span><@ce.dosth param=paramObj />, ce?/span>namespaceQ用于限定引用;具体代码见(BaseGenerator.javaQ?/span>

    5Q?nbsp;i18nSupport是指?/span>jsp是否支持多语aQ一般设定ؓ支持的;

    <package base="biz.wic" app="application">

                <domain>domain</domain>

                <controller>web</controller>

                <manager>manager</manager>

                <service>service</service>

            </package>

    用于讑֮java code?/span>packageQ?/span>

           <web layoutComponent="tiles">

                <manager>WEB-INF"applicationContext-manager.xml</manager>

                <servlet>WEB-INF"jbcc-servlet.xml</servlet>

                <security>WEB-INF"applicationContext-acegi.xml</security>

                <sqlMapConfig>WEB-INF"sql-map-config.xml</sqlMapConfig>

                <messages>WEB-INF"classes"messages.properties</messages>

                <tiles>WEB-INF"defs</tiles>

    6Q?nbsp;        </web>

    3.code-engine-gears.xml配置详解Q?/span>

    <?xml version="1.0" encoding="UTF-8"?>

    <gears>

        <!--

        Generate model, related sqlmap manager file via abator, in most case we don't need modify the abator-config.xml;

        just add the following model node will work;

        and this model node can create more than one; model name should be unique;

        default extends is : biz.web.framework.domain.BaseEntity

        -->

        <model name="city_model" table="city" domain="City" usingLucene="false"

               extends="biz.web.framework.domain.BaseEntity" keyProperty="id"/>

        <!--

        Create *Controller and *MgrController, modify layout component like Tiles of Sitemesh;

        modify action-servlet.xml, applicationContext-*.xml

        defaultMethods@keyProperty default to "id"

        -->

        <controller name="City" springBeanDef="true" template="controller.ftl">

            <managers>CityMgr</managers>

            <!--<services support="MailService"></services>-->

            <defaultMethods refModel="city_model">

                <method name="index" style="form" view="list_city"/>

                <method name="listAll" style="ajax" />

                <method name="list" style="ajax" />

                <method name="get" style="ajax"/>

            </defaultMethods>

        </controller>

        <!-- using the option [extends] to generated Mgr controller,

            overwrite default to true;

            method view default to

            -->

        <controller name="CityMgr" springBeanDef="true" template="controller_mgr.ftl"

                    extends="City" overwrite="true">

            <!--<services support="CompassService"></services>-->

            <defaultMethods refModel="city_model">

                <method name="manager" style="form" view="list_mgr_city"/>

                <method name="update" style="form" view="edit_city"/>

                <method name="create" style="form" view="edit_city"/>

                <method name="save" style="form" view="edit_city"/>

                <method name="edit" style="form" view="edit_city"/>

                <method name="delete" style="ajax"/>

            </defaultMethods>

        </controller>

        <!-- overwrite default to true;

            jsp name attribute used for jsp file name, and also used for tiles definition

        -->

        <jsp name="list_mgr_city" refController="CityMgr" template="list_mgr_jsp.ftl" overwrite="false">

            <tiles>main_layout_4</tiles>

        </jsp>

        <jsp name="edit_city" refController="CityMgr" template="edit_jsp.ftl" overwrite="false">

            <!--<tinyMCE>content</tinyMCE>-->

            <!--<tiles>main_layout_4</tiles>-->

        </jsp>

        <!--<jsp name="detail_recommend" refController="City" template="detail_jsp.ftl" overwrite="false">-->

            <!--<tinyMCE>content</tinyMCE>-->

            <!--<tiles>main_layout_1</tiles>-->

        <!--</jsp>-->

        <!--overwrite default to true;-->

        <!--<jsp name="list_city" refController="City" template="list_jsp.ftl" overwrite="false">-->

            <!--<tiles>main_layout_2</tiles>-->

        <!--</jsp>-->

    </gears>

    1Q?/span><model> <controller><jsp> {节点用于生?/span>domainQ?/span>managerQ?/span>controller?/span>jspQ可配置0-n个;ơ序随意; 且每个节炚w有可选属?/span> overwrite Q?/span>true?/span>falseQ;

    overwrite指定当目?/span>controller文g存在Ӟ是否要覆写该文gQ否则就生成.generated为后~的文Ӟoverwrite属性是可选的Q默认ؓtrueQ?/span>

    2Q?/span><controller name="CityMgr" springBeanDef="true" template="controller_mgr.ftl"

                    extends="City" overwrite="true">

    <managers>CityMgr</managers>

            <!--<services support="CompassService"></services>-->

            <defaultMethods refModel="city_model">

                <method name="manager" style="form" view="list_mgr_city"/>

                <method name="update" style="form" view="edit_city"/>

                <method name="create" style="form" view="edit_city"/>

                <method name="save" style="form" view="edit_city"/>

                <method name="edit" style="form" view="edit_city"/>

                <method name="delete" style="ajax"/>

            </defaultMethods>

        </controller>

    q个配置看上L些复杂,是ؓ了提供更好的灉|性;name用于?/span>code engine中标?/span>controllerQ同时用于生成的controller.java的命名;在配|文件中应该是唯一的;

    springBeanDef用于指出是否在相关的配置文g中添?/span>spring bean的定义,比如xxx-servlet.xml{;否则只是生成controller?/span>javaQ?/span>

    template指定freemarker模板Q?/span>

    managers指定要注?/span>manager定义Q如果有多个用逗号分割Q可选;

    services指定要注?/span>service定义Q如果有多个用逗号分割Q?/span>@support用于指定framework下的common serviceQ比?/span>mailQ?/span>compass{;可选;

    defaultMethods里面用于指定生成?/span>controller里面的方法;refModel 指参照的model定义Q?/span> method@name用于指定Ҏ(gu)名,比如listQ而且listҎ(gu)是预定义写在模板里面?/span>; method@style指定代码风格Q可选有formQ?/span>ajax两种Q这个风g同时影响cotroller部分?/span>jsp部分Q?/span>

    method@view指方法返回的tiles定义视图Q当然这个属性在style?/span>form的时候有效;可选;

    eQ?/span> <jsp name="edit_user" refController="UserMgr" template="edit_jsp.ftl" >

            <tinyMCE>Description</tinyMCE>

            <tiles>main_layout_1</tiles>

        </jsp>

    Jsp?/span>name用于生成?/span>jsp面的文件名Q同时还?/span>tiles的定义,在生?/span>controller时候也是有用的Q?/span>

    refController是指明jsp所参照?/span>controller定义Q通过q个refControllerQ?/span>jsp可以扑ֈdefault_methods?/span>styleQ?/span>refModel{信息;

    Template指明所使用?/span>freemarker模板Q?/span>

    q里省略?/span>overwrite属性,overwrite属性是可选的Q默认ؓtrueQ?/span>

    tinyMCE指定要加?/span>tinyMCE支持Q同Ӟ所理的属性ؓ‘Description’Q?/span> 可选属性;

    tiles属性定义了Q此jspextend?/span>layoutQ可选属性;

    f)

    <model name="city_model" table="city" domain="City" usingLucene="false"

               extends="biz.web.framework.domain.BaseEntity" keyProperty="id"/>

    用于生成domainQ?/span>managerQ和sqlmapQ可以配|多个;

    luceneSupport可选,如ؓtrue代表在domain?/span>manager以及配置文g中加?/span>lucene的支持;

    4.创徏新项?/span>

    A.?/span>codeEngineRunner开始执?/span>createNewProjectQ?#8220;distProject”Q;Q将copy必需的框架文件到目标目录Q同时修?/span>jdbc.properties{文Ӟ同时初始化abator-config.xmlQ)

    BQ分别用CJDBCPropertiesModifier?/span>CodeEngineInitModifierQ?/span>

    CQ执行目标工E?/span>project目录下的initdb.bat;初始化数据库Q加载初始系l表和数据;当然执行此步骤之前要先创建数据库Q?/span>

    DQ利?/span>codeEngineRunner的从数据库表Q生成相应的文g后,使用project目录?/span>build.bat~译文gQ?/span>



    D| 2007-09-10 14:47 发表评论
    ]]>
    开发出高性能的网站,W三部分Q压~和其他服务器端的技? http://www.aygfsteel.com/bourn/articles/142715.htmlD|D|Tue, 04 Sep 2007 10:09:00 GMThttp://www.aygfsteel.com/bourn/articles/142715.htmlhttp://www.aygfsteel.com/bourn/comments/142715.htmlhttp://www.aygfsteel.com/bourn/articles/142715.html#Feedback0http://www.aygfsteel.com/bourn/comments/commentRss/142715.htmlhttp://www.aygfsteel.com/bourn/services/trackbacks/142715.html

    ? 会被服务器用刎ͼq而决定将适当的内定w过内容协商QContent NegotiationQ发回来—这是非常有用的功能Q它可以让网站服务器q回不同的语a、字W集、甚臌可以Ҏ(gu)使用者的习惯q回不同的技术。关于内? 协商的讨论很多,我们q就不再多讲。我们主要来看看和服务器端压~有关的一些东ѝ?code>Accept-Encoding表明了浏览器可接受的除了U文本之外的内容~码的类型,比如gzip压羃q是deflate压羃内容?/p>

    我们下面来看看IE发出的请求headersQ我们可以看到类似的Accept-Encoding|

    GET / HTTP/1.1
    Host: www.google.com
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)
    Accept: image/gif,image/x-xbitmap,image/jpeg,image/pjpeg, application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword, application/x-shockwave-flash,*/*
    Accept-Encoding: gzip,deflate
    Accept-Language: en-us
    Connection: keep-alive

    假设当今L的每U浏览器都支持gzip和deflate~码(那些不支持的也不会发?code>Accept-Encoding)Q我们可以简单的修改一下网站服务器Q从而返回压~内容到q些览器上Qƈq回标准Q也是没有压羃的)内容到其他的览器上。在下例中,如果我们的浏览器告诉Google它不接受内容~码Q我们会取回3,358字节的数据;如果我们发出Accept-EncodingQ再加上应答header告诉我们Content-Encoding: gzipQ我们则会取回仅?,213字节 。用览器的查看源代码功能来看源代码Q我们看不出什么差异,但如果用网l跟t的话,我们׃发现其响应是不同的?/p>

    图一: Google压羃 / 非压~对?/strong>

    上例中,虽然文g不大Q但是效果依然很明显—压~后比原来小?4%。再加上我们前面两部分谈到的HTML、CSS、和JavaScript代码优化QGoogle在提升网站性能上的成果非常惊h—它的一个网居然可以放在一个TCP响应包里?/p>

    ? 然Google在带宽上的考虑也远q超出其他一般的|站QHTTP内容~码q一步让HTML、CSS、和JavaScript{瘦w?0%甚至更多。不? 的地Ҏ(gu)QHTTP内容~码Q词?#8216;压羃’?#8216;内容~码’在本文中基本上是一个意思) 基本上针Ҏ(gu)本内容很有效Q对于图像和其他二进制文件的压羃效果׃般了Q有时可能根本没有效果,但ȝ来说Q即使有很多二进制文件的时候,整体上可以瘦 w?5%?0%那么多?/p>

    HTTP内容~码的服务器端支?/strong>

    如果你现在认同HTTP压羃? 价|下一个大问题是:你如何来实施Q在Apache|站服务器上Q可以用mod_deflate来进行HTTP内容的编码。在微Y的IIS上,有? ȝ了。虽然IIS 5可以支持gzip的编码压~,但实施v来还是超U麻烦,其考虑到因为各U浏览器中细微差异来q行各种l致参数调整的时候。所以在IIS 5上,q是要考虑W三方的采用ISAPIqo器的压羃插gQ比?a >httpZip 是最好的一U。IIS 6上集成了压羃功能Q也更快更灵z,但是q是配置h比较复杂?a >ZipEnable 带给我们W一个专为IIS 6集成压羃l致理的工具—ƈ且还有浏览器兼容情况监测功能?/p>

    服务器内容编码的实质

    ? 实施HTTP压羃Ӟ要^衡考虑一些因素;如果服务器配置?#8216;输出’的内容压~方式,虽然可以降低带宽的用,但同时却增加了CPU的开销。多数情? 下,q不是什么大问题Q尤其当|站服务器所作工作很的时候。不q,在网l浏览很J重的网站服务器上,q行相当多的动态内容就可能会达到CPU工作的极 限,q时再进而进行压~的话,CPU可能会超负荷q行了。通过d而外的服务器g资源Q当然可能会减轻q种问题Qƈ让我们n受通过压羃而节省下来的? 宽, 但最后带宽和CPU的问题还是要看哪个成本更高?/p>

    说到底,pȝ理员和|站开发者是否对HTTP的压~有兴趣Q还是要看最 后的效果如何。当我们明显的发现带宽的负蝲下来了,那么讉K者也可能会明显感觉{载网늚速度慢了。因为,压羃产生和解压羃会带来的CPU负蝲Q? TTFB (time to first byte)也通常会增加,q样览器渲染网늚速度也会降下来,但这q算是很好的qQ因为数据压~后传输的包变小了、变了Q提交的速度会变快,q个? 速回补偿|页渲染的慢速。然而,对于宽带用户来说Q这L改善可能׃明显了。不q,q两U情况下Q对于网站徏设者来_都可以节省一些网l上的投资。当 Ӟ如果可感知的反应旉Ҏ(gu)|站来说是主要目标,q且|站的访问者很多都q用拨号上|,那么本文的第二部分钟所讲的~冲控制是比较好的性能提高{? 略?/p>

    最后,HTTP内容~码的另一个潜在问题是和由脚本产生的网带来的服务器负载有关的Q比如PHP和ASP。在此种情况下, 主要的问题是Q网内Ҏ(gu)ơ请求可能会被再压羃Q这样就会给服务器增加更多的负蝲Q相对压~静态内Ҏ(gu)_。如果,|站中所有的|页都是在请求时生成? 话,那么使用HTTP内容~码得格外心了。还好,很多商业上用的压羃插gQ直到如何对内容q行~冲Q但业余Q较便宜的)的压~工具可能就没有q些? 性了?/p>

    动态网:立即生成Q还是稍后生成?

    有趣的是Q很多的开发者都是在|站被访问时开 始动态的生成很多甚至全部他们|站的网c比如,http://www.domain.com/article.php?id=5是一个通用的URLQ? 它暗CZ某个|页是由数据库查询时或填充模版生成的。这U常用方法的问题是,在很多情况下Q在h旉生成一个网|pointless的,因ؓ很多时? q个主要的静态的Q所谓的静态的动态网c或脚本|页Q,其内容很长时间也不变化,q显然对于提高网装载速度没有什么帮助。实际上Q在一个高负荷的网? q种方式会严重的降低服务期的性能?/p>

    要避免不必要的动态网늚生成Q有一个方法是Q每ơ有变化Ӟ则预先生成有内容的静? html|页。如果这些生成的.html|页Q还是经q了代码优化Q在本文W一部分中过q些描述Ҏ(gu)Q,则更好。这不仅会让服务器交付这些网|快变得更 Ҏ(gu)Q而且q些技术还会搜烦引擎更友好?/p>

    不幸的是Q在很多情况下,单的生成动态的HTML|页q不太容易,也ؓ很多|页只有 在网被讉K时才能够正确的生成动态内宏V在q种情况下,你最好是对网进?#8216;烘焙’生成快速执行的形式。在ASP .NET的情况下Q这UŞ式则是二q制代码Q在服务器端执行的特别快。不好的地方是,在用戯问之前,服务器需要先执行q些|页强制执行q些字节代码。还 好,在ASP .NET 2.0中,q些问题得到改善。在PHP中,一些诸如Zend{的优化软g是不错的投资?/p>

    对于提交静? 和动态网c或者HTML和图像的不同需要来_考虑一下针对物理服务器或其他的g上的加速可能,也是比较明智的选择。ؓ了网加速而加强硬件方面的? 入的另一个方法是专业化—不同的部gq行不同的工作,q样产生出最大的效率。虽Ӟ本文是从代码和网站服务器校对来说明如何提高网站的性能的,我们也不? 讨论讨论其他相关的元素?/p>

    对网站服务器q行涡轮增压

    加速网站要考虑的一个重Ҏ(gu)服务器Y 件和服务器硬件。先谈YӞ|站pȝ理员不太可能来回因为易用性问题、性能问题、安全问题等在Apache和IIS之间切换来切换去。简a之,|站服务 器和其底层的操作pȝ之间的关p错l复杂、互相媄响,再进行系l或服务q移则更是繁重且有风险的工作。所以,你如果真的考虑攑ּ一U网站服务器而用另一 U的话,你必M肃认真的好好考虑q个问题Q而如果速度是考虑的第一要素的话Q徏议你考虑一下Zeus?/p>

    再谈gQ如果要考虑? U硬Ӟ则先仔细分析一下服务器上的主要d。在静态网站上Q主要的工作是调整网l连接和把文件从盘拯到网l上。要加速这L型的|站Q你得把注意? 攑֜高速硬盘子pȝ和高速网l子pȝ上,另外q得有够多的内存来处理q发h。实际上Q你可能得给服务器添加大量的内存Q从而ؓl常使用的对象尽可能? 增加内存~冲来减ȝ盘的存取。有的是,CPU的速度在这里却不是十分关键。虽然不能否认CPU对网站的整体性能有媄响,但瓶颈主要发生在盘上。但 是,当网站处理动态网和静态网差不多一样多的时候,处理器就昑־很关键了Q但即便如此高速磁盘或双网卡还是更有效一些。另一U情况下Q除了要处理动? |页Q还要处理其他占用CPU的操作(比如SSL和HTTP压羃{)的时候,CPU显得十分关键了。换句话_要加速网站服务时Q服务器具体所作的工作 军_着什么类型的g资源更需要增强?/p>

    当你没有那么多增加服务器g或Y件的预算Ӟq有一些物h(hun)廉的解决Ҏ(gu)。比如,你可? Ҏ(gu)务器的TCP/IP讄q行优化Q这样依赖TCP/IP|络的HTTP便可以最优运行。TCP/IP的设|优化里Q有一Ҏ(gu)TCP的接受窗口,可以? 它调整成最适合应用或者最适合|络q接的,或者是针对保TCPq接的一些参敎ͼ如ACK或TCP_NODELAY{)q行调整Q根据具体情况设|成使用 或不使用。还有一些参敎ͼ比如TIME_WAIT旉{,也是可以q行调整的。但要记住,不管怎么调整q些|站服务或操作系l的参数Q都必须q行真实的加 载试验以验证你的调整会不会反而减慢用戯问的服务或带来新的问题。此外,一定要弄懂q些参数之后Q再q行调整?/p>

    通过分工q行加?/strong>

    |站加速还可以考虑的一个出发点是,不同的网站内容可能会拥有不同的提交特性。考虑C同的内容Q其Ҏ(gu)也不同Q我们可以用多个服务器,每个服务器来执行不同的内容处理,q样可能比用服务器池Qserver farmQ中的每一个服务来处理同样的Q务要好得多?/p>

    ? 们来看一个分工进行加速的单例子。当你的商务|站l购物R或外部网使用SSL加密的时候,你会发现当有多个用户同时讉K的时候,SSL加密带来 HTTPSD늚明显负蝲会你的服务器的性能会急剧下降。这U情况下Q把量分配l另一台服务器Q其意义十分明显了。比如,把你的主站点攑֜ www.domain.com上,把结账的处理部分攑֜shop.domain.com上。这个shop.domain.com是一个专门处理SSL? 量的服务器,可能会用到SSL加速卡。采取分工的方式Q可以让你专心处理结账的用户的SSL量Q而不至于像以往SSL的处理会D服务器整体性能的下 降。对于图像和其他重量U的二进制的比如PDF文档?exe文档Q服务器处理其下载可能要׃力气Q这些连接通常持箋的时间比一般的q接都长Q会消耗大 量宝늚TCP/IP资源。进而,对于q些媒体资源(PDF?exe、图像等)的处理,我们也ƈ不需要把它们和文本资源(HTML、CSS? JavaScript{){同对待处理。在q种情况下,让处理文本资源的服务器有高性能的CPUQ让处理媒体资源的服务器有大带宽Q是有的攄的解决之 道?/p>

    分工q可以进一步应用到|页的生成上。我们可以考虑把生成网늚工作单独攑֜一个服务器上,把处理静态内容的工作攑֜另一? 服务器上。现在已然有很多|站是采取这L模式了,q其中很多网站会使用一个叫做Squid的反向代理(reverse proxyQ。在讄q程中,代理服务器专门提供静态的内容Q速度很快Q而后台的服务器则可以专心处理在访问时才会产生的动态内宏V缓冲控制策略和规则Q? 我们在第二部分中谈到q,在这时的讄q程中就昑־十分重要了;我们得确保代理服务器的缓冲中储存的内容在׃n~冲中是安全的?/p>

    Z争夺市场而提?/strong>

    ? 们刚才谈的那些东西主要是一些低成本的加速技术,在我们本文即结束的时候,我们来看看一些需要Yg成本很高但收益可观的Ҏ(gu)。目前市Z提供有一些需 要花些钱的独特加速设备,它们可以q行比如|络q接分流、压~、缓册Ӏ和其他{技术,从而达到加速的目的? 如果你不在乎投资高带宽的话,q些解决Ҏ(gu)十分有效,但是大多数的|站q是更喜Ƣ我们先前介l过的物h(hun)廉的Ҏ(gu)Q比如代码优化、缓册Ӏ和HTTP~码 {?/p>

    q你有很多资金Q可以投资一个服务器池(server farmQ、ƈd最高档的加速设备,也用压~和~冲技术等Q但你还是会最后达C个极限。要惌一步再提速,q有最后一招:把内Ҏ(gu)在离讉K者最q的 地方Q有可能的话Q在那个地方再实施上q各cL术(如压~、缓冲等Q。你肯定注意q,有些|站提供镜像服务器等Q这样世界各地的讉K者就可以p讉K所需 内容。不q,q有比这个更有地理分布意义的Ҏ(gu)Qƈ且可以透明的让讉K者用。内容分发网l(Content Distribution Network – CDNQ,比如AkamaiQ就可以让我们把重型内容Q如图象和其他二q制内容{)搬移到离讉K者更q的地方Q这样通过内容分发|站在世界各地的边缘~? Ԍ讉K者访问v来就会更快。这U方式带来了性能上极大提高,目前世界U的一些大|站都在使用。虽然这不上是l济实用的方法,但作些方法的最后补 充,攑֜q里以飨读者?/p>

    Thomas A. Powell 是PINT公司的创始hQ也是加州大学San Diego分校计算机科学系的讲师,以及一些网开发书c的作者,其所著书目包括《HTML & XHTML: The Complete Reference》和 《JavaScript: The Complete Reference》等?

    Joe Lima 是Port80软g公司的首席构架师(architect)Q同时教授UCSD 扩展的服务器技术?/p>

    Port80软g公司
    Port80 Software, Inc. 是微?Internet Information Services (IIS) |络服务的领先的开发商. 公司同时提供w3compiler, 一套优化代码的桌面应用软g。Port80 Software 是微软认证合作商(MCP ISV)。它位于San Diego, CA. 更多信息误公司|站 www.port80software.com.




    D| 2007-09-04 18:09 发表评论
    ]]>利用开源组件开发高性能(Scalability and High Performance)的网站_1http://www.aygfsteel.com/bourn/articles/142712.htmlD|D|Tue, 04 Sep 2007 10:00:00 GMThttp://www.aygfsteel.com/bourn/articles/142712.htmlhttp://www.aygfsteel.com/bourn/comments/142712.htmlhttp://www.aygfsteel.com/bourn/articles/142712.html#Feedback0http://www.aygfsteel.com/bourn/comments/commentRss/142712.htmlhttp://www.aygfsteel.com/bourn/services/trackbacks/142712.html利用开源组件开发高性能(Scalability and High Performance)的网?/span>

    1.       Ҏ(gu)Q?/span>

    a)         Load balancer +reverse proxy server + server clusterQ?/span>

    图一是整体的l构图;思\很清楚;q种的结构的|站pȝ可以提高pȝ的响应能力;

           图一

    bQ细节问题:

           iQ?/span>web server 是否可以是非同质?/span>serverQ比如有的负?/span>mailQ有的负?/span>web面Q?/span>

    有的负责文g上传Q?/span>

                 ii)用户?/span>session信息如何在不同的server之间同步Q?/span>

                  iiiQ如果用数据库集群的话Q则有的dbserver只负责读数据Q有的则d都做Q?/span>

                         如何实现Q?/span>Replaication ?/span>mysql中的支持正在研究Q?/span>

           cQ加?/span>reverse proxy server; 图二昄了如何在架构中加?/span>reverse proxy serverQ?/span>

                  q里选择?/span>proxy server?/span>squid Q?/span>http://www.squid-cache.orgQ,Q至于ؓ什么选它Q?/span>

    因ؓ很多人都用它Q本人奉行拿来主义)Q?/span>squid用来cache静态的文gQ?/span>jsQ?/span>imageQ?/span>

    css{;squid可以?/span>tomcatQ?/span>apache{集成;

    图二

    dQ谁来做load balancer呢,如果你?/span>linux操作pȝ的话Q那么一定要试试Linux Virtual ServerQ?/span>www.linuxvirtualserver.org/ http://zh.linuxvirtualserver.org/ Q?/span>, 我国的章文嵩博士L的开源项目,TelTel的首席科学家Q?/span>

    IBM 的介l资料:

    http://www-128.ibm.com/developerworks/cn/linux/cluster/lvs/part1/index.html

    http://www-128.ibm.com/developerworks/cn/linux/cluster/lvs/part2/index.html

    http://www-128.ibm.com/developerworks/cn/linux/cluster/lvs/part3/index.html

    http://www-128.ibm.com/developerworks/cn/linux/cluster/lvs/part4/index.html

    图三



    D| 2007-09-04 18:00 发表评论
    ]]>
    Code Engine基本技术demo2http://www.aygfsteel.com/bourn/articles/142384.htmlD|D|Mon, 03 Sep 2007 09:12:00 GMThttp://www.aygfsteel.com/bourn/articles/142384.htmlhttp://www.aygfsteel.com/bourn/comments/142384.htmlhttp://www.aygfsteel.com/bourn/articles/142384.html#Feedback0http://www.aygfsteel.com/bourn/comments/commentRss/142384.htmlhttp://www.aygfsteel.com/bourn/services/trackbacks/142384.html关于如何生成字段的编辑页面;

    1.       首先应该ddomain对象Q从而获?/span>field列表Q?/span>

        /**

         * getDomainFields via jsp name, and should remove the super fields, like lastUpdatedBy, lastUpdatedDate

         * @param name of jsp

         * @return list of field

         */

        public static List<Field> getDomainFields(String name) {

            List<Field> ret = new ArrayList<Field>();

            try {

                Class clz = Class.forName(CodeEngineConfig.getDomainPackage() + "." +

                        CodeEngineConfig.getControllerDomain(CodeEngineConfig.getJspRef(name)));

                for (Field field : clz.getDeclaredFields()) {

                    if(!"lastUpdateDate".equalsIgnoreCase(field.getName())

                            && !"lastUpdateBy".equalsIgnoreCase(field.getName())){

                    ret.add(field);

    //                System.out.println("field.getName() + field.getType() = " + (field.getName() + field.getType()));

                    }

                }

            } catch (Exception e) {

                e.printStackTrace();

            }

            return ret;

        }

    2.       ?/span>Field List传递给freemarker模板Q之所以要传?/span>field而不仅仅?/span>name的原因是Q因为希望在模板里根?/span>field?/span>typeQ从而生成不同的htmlQ比?/span>date可以生成使用js calendar的,boolean生成radioQ或checkboxQ其他的生成textQ?/span>

    a)         定义macroQ?/span>

    <#macro getHtml field>

     <#if field.type?ends_with('Boolean')>

    <input type="radio" id="${field.name}" name="${field.name}" class="inp_txt_30" size="80" value="${'$'}{${domain?uncap_first + '.' + field.name}}">

     <#elseif field.type?ends_with('Date')>

    <input type="text" id="${field.name}" name="${field.name}" readonly="readonly" class="inp_txt_30" size="17" value="<fmt:formatDate value="${'$'}{${domain?uncap_first + '.' + field.name}}" pattern="yyyy-MM-dd hh:mm"/>">

    <button id="${field.name}Btn" class="button" >...</button>

    <script type="text/javascript">

    Calendar.setup(

    {

    inputField : "${field.name}",      // id of the input field

    ifFormat    : "%Y-%m-%d %H:%M",       // the date format

    showsTime: true,

    button      : "${field.name}Btn"    // id of the button

    }

    );

    </script>

     <#elseif field.type?ends_with('Text')>

    <textarea id="${field.name}" name="${field.name}" rows="15" cols="80" style="width: 100%">${'$'}{${domain?uncap_first + '.' + field.name}}</textarea>

     <#else>

    <input type="text" id="${field.name}" name="${field.name}" class="inp_txt_30" size="80" value="${'$'}{${domain?uncap_first + '.' + field.name}}">

     </#if>

    </#macro>

           bQ调?/span>macro生成htmlQ?/span>

                <#list fields! as field>

                  <tr>

                      <td class="txt_tit_s" ><spring:message code="${lbl + '.' + domain?uncap_first + '.' + field.name}"/></td>

                      <td><@getHtml field=field/></td>

                  </tr>

                </#list>



    D| 2007-09-03 17:12 发表评论
    ]]>
    开源框架的选型http://www.aygfsteel.com/bourn/articles/142111.htmlD|D|Sun, 02 Sep 2007 11:23:00 GMThttp://www.aygfsteel.com/bourn/articles/142111.htmlhttp://www.aygfsteel.com/bourn/comments/142111.htmlhttp://www.aygfsteel.com/bourn/articles/142111.html#Feedback0http://www.aygfsteel.com/bourn/comments/commentRss/142111.htmlhttp://www.aygfsteel.com/bourn/services/trackbacks/142111.html如果你想用开源框架来开?/span>web目Q选择一套适用的组件是很关键的Q?/span>

    不光要考虑开发的单,q要考虑日后的升U;

    甚至_充分的文档资料支持;q有现有团队的技术能力;以及目旉{;

    MVCQ第一要素我个得是要简单,因ؓ在这个部分的中的代码量,通常相对后端是很多的Q一个容易上手,q且大家都熟(zhn)ƈ且不讨厌Q?/span>

               SpringMVCQ我个h觉得是很完备?/span>mvcQ有着很D的灵zL,但正是这U灵zL,让很多h无所适从Q?/span>

               Struts 1 标签很糟p;form对象很别扭,J琐的配|;

               Struts2 没有用过Q如果他q有form我就不打用Q?/span>

    学习springsideQ以前)使用Spring ?/span>MultiActionControllerQ减了很多没有必要的配|;在一?/span>controller里面可以写多?/span>ActionQ?/span>MultiActionControllerq可以很灉|的从request中绑?/span>Domain对象Q非常的方便Q?/span>

    MultiActionController ?/span> Controller可以满全部的需要;

    JSP部分使用spring form tagQ?/span>

    Tiles ?/span> sitemeshQ?/span> 考虑C?/span>AjaxQ?/span>sitemesh是利?/span>filter来修饎ͼ选择TilesQ?/span>

    ORM?/span>ibatis,当前最实用Q简单的ORMQ而且可以自动生成Q又Ҏ(gu)理解Q何乐而不为;

    FullTextSearchQ?/span> compass + luceneQ?/span>

    OthersQ?/span>ActiveMQ + ApacheCXF

    Form/Ajax Request > Controller > Manager/Service > GenericDao

    其他辅助工具Q?/span>

    EMS for mysqlQ?/span>

    SVN as version controlQ?/span>

    DB/web serverQ?/span>mysql/resin



    D| 2007-09-02 19:23 发表评论
    ]]>
    վ֩ģ壺 | | ʯ| | | | ˳| ¬| ɽ| | ̽| | ͼʲ| ٰ| ɽ| | | ʲ| | | | | ٽ| ɽ| ɿ| | | | ν| | | ɽ| | | ˫Ѽɽ| Ƽ| | ɶ| | | Ӣɽ|