ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>久久精品人人做人人爽电影,亚洲AV无码成人网站久久精品大,精品久久久久久久久免费影院http://www.shnenglu.com/woaidongmao/archive/2009/05/25/85708.html肥仔肥仔Mon, 25 May 2009 07:29:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2009/05/25/85708.htmlhttp://www.shnenglu.com/woaidongmao/comments/85708.htmlhttp://www.shnenglu.com/woaidongmao/archive/2009/05/25/85708.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/85708.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/85708.htmlCSS+DIV布局已ç»å˜æˆç™½èœä¸€æ ·äº†åQŒåˆ°å¤„都æ˜?span lang=EN-US>CSS+DIV布局åQŒåŽ»é¢è¯•一个嚾|‘页的公å¸ï¼Œè‚¯å®šä¼šé—®åQŒä½ ä¼?span lang=EN-US>CSS+DIV布局ä¸ã€‚到底啥æ˜?span lang=EN-US>CSS+DIV布局呢?传统上都是以ç”?span lang=EN-US>TABLE布局的,TABLE布局的è¦ç‚ÒŽ˜¯æœ‰ä¸¤ä¸ªï¼Œ½W¬ä¸€åQšé€‚当的地方åˆòq¶è¡Œå’Œåˆ—åQŒç¬¬äºŒï¼šæ‡?span lang=EN-US>TABLE嵌套Tableã€?span lang=EN-US>
而且˜q˜å¯ä»¥ç›´æŽ¥åœ¨™åµé¢ä¸ŠæŽ§åˆ?span lang=EN-US>Table的高度长度ã€?span lang=EN-US>TABLE布局最大的¾~ºç‚¹åQŒé™¤äº†æ²‰é•¿çš„TR,TD之外åQŒè¨€è®ºæœ€å¤šçš„ž®±æ˜¯SEO里对Table布局的鄙视。大部分SEO人都会觉å¾?span lang=EN-US>Table布局ä¸åˆ©äº?span lang=EN-US>SEO优化。这ç‚V€‚。到真是有点关系åQŒæˆ‘试过两个完全一æ ïLš„¾|‘ç«™åQŒä¸€ä¸ªæ˜¯ç”?span lang=EN-US>Table布局的,我是ç”?span lang=EN-US>CSS+DIV布局的,òq‰™€‚当的ä‹É用了H标记åQŒåœ¨GOOGLEæœçƒ¦ä¸Šï¼Œæˆ?span lang=EN-US>CSS+divå¸ƒå±€çš„ç½‘ç«™è¦æ¯?span lang=EN-US>Table布局的è¦é å‰ã€‚ã€‚ã€‚è‡³äºŽäØ“ä»€ä¹ˆï¼Œé‚£ä¸ªä¸æ˜¯æœ¬æ–‡çš„é‡ç‚V€‚。忽略掉ã€?span lang=EN-US>

   CSS+DIV布局最大的特点ž®±æ˜¯HTMLæ–‡äšg里的代ç ç›¸å¯¹æ¯”较ž®‘,但是也造æˆäº†æµè§ˆå™¨å¸ƒå±€é—®é¢˜ã€‚。网上很多äh都在è¯ß_¼Œæˆ‘布局åœ?span lang=EN-US>IE里显½Cºæ­£å¸¸ï¼Œåœ?span lang=EN-US>FF下全部å˜å½¢äº†ã€‚其实造战q™æ ·é—®é¢˜çš„原因是你写çš?span lang=EN-US>CSSòq¶ä¸æ ‡å‡†åQŒå¯ä»¥è¯´ä½ å†™çš?span lang=EN-US>CSS都是根ç»IE的标准æ¥å†™çš„åQŒè€Œä¸æ˜?span lang=EN-US>CSS2.0的国际标准,无论æ˜?span lang=EN-US>IE˜q˜æ˜¯FFåQ?span lang=EN-US>3.0版å‰çš„æˆ‘没留æ„)都是支æŒCSS2.0的,但是在技术上åQ?span lang=EN-US>IE有写模糊功能åQŒå¯ä»¥ä×oåˆ°éžæ ‡å‡†çš?span lang=EN-US>CSS布局也能正确解æžåQŒä¸€ä¸‹æ˜¯æˆ‘写CSS代ç çš„äº”ä¸ªä¹ æƒ¯ï¼Œæˆ‘ä¸æ•¢è¯´æˆ‘这五个习惯都是好习惯,臛_°‘我写çš?span lang=EN-US>CSS布局ä¸ä¼šäº§ç”Ÿä¸è‰¯æ•ˆæžœåQŒä¹Ÿž®±æ˜¯æˆ‘写çš?span lang=EN-US>CSS有跨l‹¹è§ˆå™¨èƒ½åŠ›ã€?span lang=EN-US>

½W¬ä¸€åQšå®¹å™¨ç±»DIVå¿…é¡»è¦æœ‰5个东è¥?span lang=EN-US>{marginåQ?span lang=EN-US>paddingåQ?span lang=EN-US>widthåQ?span lang=EN-US>heightåQ?span lang=EN-US>overflow}åQŒä»€ä¹ˆå«å®¹å™¨¾c»ï¼Œž®±æ˜¯˜q™ä¸ªDIVåªæ˜¯ç”¨æ¥æ”‘Ö†…部的DIV的,也å¯ä»¥è¯´æ˜¯ä¸€ä¸ªå®šä½çš„div..例如åQšæˆ‘ä»¬ç»å¸æ€‹É用居中,一般是˜q™æ ·åšçš„

body
{ }{
    font-size
: 12px;
    margin
: 0px;
    padding
: 0px;
    height
: 100%;
        width
: 100%;
    overflow
: auto;
    text-align
: center;
    display
: block;
}
/**//*---bodyæˆ‘æ˜¯ä½œäØ“æœ€™å¶å±‚容器çš?span lang=EN-US>---所以它具备了我需è¦çš„æ‰€æœ‰ä¸œè¥¿ï¼Œå®žçŽ°çš„æ•ˆæžœæ˜¯å±…ä¸­åQŒæˆ‘加上äº?span lang=EN-US>display: block;虽然˜q™ä¸ªæ˜¯ä¸€ä¸ªé»˜è®¤å±žæ€§ï¼Œä½†æ˜¯æˆ‘们ä¸èƒ½ä¿è¯æ‰€æœ‰æµè§ˆå™¨éƒ½æ˜¯é»˜è®¤åQŒï¼ˆå¦‚果是所有æµè§ˆå™¨éƒ½é»˜è®¤çš„åQŒæˆ‘自己写个‹¹è§ˆå™¨çš„默认ä¸?span lang=EN-US>none的给你è€ï¼‰*/
#body_Div
{ }{
    margin
: 0px auto;
    padding
: 0px;
    text-align
: left;
    width
: 1003px;
    height
:100%;
    overflow
:auto;
}
/**//*˜q™ä¸ªæ˜¯æ ¸å¿ƒå±‚åQŒå¤šæœ‰çš„元素基本都是在这个层里的åQŒè¿™ä¸ªå±‚也具备了我想è¦çš„属性,text-align: left; å› äØ“åœ¨ä¸Šå±‚æˆ‘æŠŠæ–‡æœ¬å¯¹é½æˆä¸ºå±…ä¸­ï¼Œæ‰€ä»¥è¿™ä¸ªå±‚æˆ‘è¦æŠŠå®ƒ˜q˜åŽŸä¸ºå·¦å¯šw½margin: 0px auto; ä¸€èˆ?span lang=EN-US>IEçš?span lang=EN-US>CSS¾~–写者ä¸ä¼šæœ‰˜q™ä¸ªauto值的åQŒåœ¨IE会自动,但是åœ?span lang=EN-US>FF如果ž®‘了auto你将会å‘çŽ?span lang=EN-US>FFé‡Œä½ çš„æ ¸å¿ƒéƒ¨åˆ†ä¸æ˜¯å±…中的。所以è¦åšåˆ°é€šç”¨åQŒæˆ‘们就必须è¦åŠ ä¸?span lang=EN-US>autoå€û|¼ŒIE也支æŒ?span lang=EN-US>autoå€?span lang=EN-US>*/


½W¬äºŒåQšæÕQ动对象,都拥有独立的çˆ?span lang=EN-US>DIVåQ›å…³äºŽè¿™ç‚V€‚。有æ„è§çš„ähå¯èƒ½ä¸å°‘åQŒæŒæœ‰çš„观点ž®±æ˜¯åQ?span lang=EN-US>“你这样åšåªä¼šä»?span lang=EN-US>DIV˜q‡åˆ†çš„多åQŒè¿‡äºŽå¤æ?span lang=EN-US>”åQŒå…¶å®žï¼Œæˆ‘ä¹Ÿä¸æƒ³˜q™æ ·åšï¼Œä½†æ˜¯- -åQ?span lang=EN-US>IE对于‹¹®åŠ¨å¯¹è±¡çš?span lang=EN-US>{marginåQ?span lang=EN-US>padding}存在BUGæ‰€ä»¥äØ“äº†å‡ž®‘一切å¯èƒ½çš„出错åQŒæˆ‘唯有多花费一点代ç ï¼Œè¯´å®žåœ¨çš„æˆ‘åªæ˜¯æƒ³å®ƒæ›´å¥åº·ã€‚这个父DIV主è¦ä½œç”¨å…¶å®žž®±æ˜¯ä»¤åˆ°å†…部‹¹®åŠ¨å¯¹è±¡æ›´å¯æŽ§åˆ¶åQŒè¿™ä¸ªçˆ¶DIVž®±æ˜¯ä¸€ä¸ªå•¾U¯çš„容器DIV

½W¬ä¸‰åQšæ‰€æœ‰çš„‹¹®åŠ¨éƒ½éœ€è¦é—­åˆï¼›˜q™ä¸ªæœ‰ç»éªŒçš„人都知é“。。用完æÕQåŠ¨ä½ è‚¯å®šéœ€è¦æŠŠå®ƒé—­åˆæŽ‰çš„ï¼Œä¸é—­åˆï¼Œå¯èƒ½ä¸åŒ‹¹è§ˆå™¨åœ¨è§£æžçš„æ—¶å€™ä¼šæŠŠä½ çš„æÕQåŠ¨å˜æˆå‘下默认,åQˆå¯ä»¥è¿™æ ¯‚§£æžï¼šž®±æ˜¯å…ƒç´ å†…部的å­å…ƒç´ éƒ½é»˜è®¤å…·æœ‰æÕQ动属性)

½W¬å››åQšä¸€ä¸ªè¡Œå‘æÕQ动如果超˜q?span lang=EN-US>3个那么请使用ULæ¥å®žçްæÕQåŠ?span lang=EN-US>

½W¬äº”åQšçµ‹zÖM‹É用类选择åQŒæˆ‘个ähçš„åšæ³•是åQŒæ‰€æœ‰çš„id选择器都是用于布局的,¾c»é€‰æ‹©å™¨éƒ½æ˜¯ç”¨äºŽå‘ˆçŽ°æ•ˆæžœçš„åQŒè¿™æ ·åšçš„好处就是,当你惌™¦çš„æ•ˆæžœå‡ºçŽ°é—®é¢˜çš„æ—¶å€™ï¼Œæ›´å¿«é€Ÿåœ°æ‰‘Öˆ°é”™è¯¯ã€‚这个是我有æ„识的把架构å’?span lang=EN-US>“内容分离ã€?/span>



肥仔 2009-05-25 15:29 å‘表评论
]]>
cmd 使用javac¾~–译åQŒå¦‚果改å˜äº†çŽ¯å¢ƒå˜é‡åQŒéœ€è¦cmdé‡å¼€æ‰å¯http://www.shnenglu.com/woaidongmao/archive/2009/05/24/85623.html肥仔肥仔Sun, 24 May 2009 09:53:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2009/05/24/85623.htmlhttp://www.shnenglu.com/woaidongmao/comments/85623.htmlhttp://www.shnenglu.com/woaidongmao/archive/2009/05/24/85623.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/85623.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/85623.htmlž®?环境å˜é‡CLASSPATHåQŒå˜æ›´äº†ä¸€ä¸‹ï¼Œä½†æ˜¯ä¸é‡æ–°å¼€ä¸€ä¸ªcmd½H—å£åQŒè¿ç”¨javac¾~–译的è¯åQŒç¼–译æ€ÀL˜¯å¤ÞpÓ|åQŒé‡æ–°å¼€ä¸€ä¸ªå޾~–译åQŒåˆ™æˆåŠŸ

.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\lib\servlet-api.jar;
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;D:\apache-tomcat-6.0.18\lib\servlet-api.jar



肥仔 2009-05-24 17:53 å‘表评论
]]>
JSP从å°åˆ°å¤§çš„应用方æ³?/title><link>http://www.shnenglu.com/woaidongmao/archive/2009/04/29/81468.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Wed, 29 Apr 2009 09:23:00 GMT</pubDate><guid>http://www.shnenglu.com/woaidongmao/archive/2009/04/29/81468.html</guid><wfw:comment>http://www.shnenglu.com/woaidongmao/comments/81468.html</wfw:comment><comments>http://www.shnenglu.com/woaidongmao/archive/2009/04/29/81468.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/woaidongmao/comments/commentRss/81468.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/woaidongmao/services/trackbacks/81468.html</trackback:ping><description><![CDATA[<p><a href="http://www.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/JSP_F466/image_2.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="480" alt="image" src="http://www.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/JSP_F466/image_thumb.png" width="841" border="0"></a></p><img src ="http://www.shnenglu.com/woaidongmao/aggbug/81468.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/woaidongmao/" target="_blank">肥仔</a> 2009-04-29 17:23 <a href="http://www.shnenglu.com/woaidongmao/archive/2009/04/29/81468.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item><item><title>Tomcatçš„reloadable讄¡½®http://www.shnenglu.com/woaidongmao/archive/2009/04/29/81450.html肥仔肥仔Wed, 29 Apr 2009 08:00:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2009/04/29/81450.htmlhttp://www.shnenglu.com/woaidongmao/comments/81450.htmlhttp://www.shnenglu.com/woaidongmao/archive/2009/04/29/81450.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/81450.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/81450.html 

修改文äšgåQšC:\jakarta-tomcat-5.0.28\conf\server.xml

æ’å…¥ä½ç½®åQ?/font>

<Host name="localhost" debug="0" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
     <Context path="/myapp"  docBase="C:/jakarta-tomcat-5.0.28/webapps/myapp"  debug="0" reloadable="true"/>

 

å‚考URL

http://hi.baidu.com/net_plz/blog/item/966ee6dc25f908a5cc116635.html

http://blog.163.com/jianhuren2005@126/blog/static/1715817120071015115620650/



]]>
Tomcat+JSP¾lå…¸é…置实例http://www.shnenglu.com/woaidongmao/archive/2009/04/27/81224.html肥仔肥仔Mon, 27 Apr 2009 08:44:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2009/04/27/81224.htmlhttp://www.shnenglu.com/woaidongmao/comments/81224.htmlhttp://www.shnenglu.com/woaidongmao/archive/2009/04/27/81224.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/81224.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/81224.html  ¾l常看到jspçš„åˆå­¦è€…é—®tomcat下如何酾|?span lang=EN-US>jspã€?span lang=EN-US>servletå’?span lang=EN-US>bean的问题,于是æ€È»“了一下如ä½?span lang=EN-US>tomcat下酾|?span lang=EN-US>jspã€?span lang=EN-US>servletå’?span lang=EN-US>benåQŒå¸Œæœ›å¯¹é‚£äº›åˆå­¦è€…有所帮助ã€?span lang=EN-US>
  
  一ã€å¼€å‘环境酾|?/strong>
  
  ½W¬ä¸€æ­¥ï¼šä¸‹è²j2sdkå’?span lang=EN-US>tomcatåQšåˆ°sun官方站(http://java.sun.com/j2se/1.5.0/download.jspåQ?span lang=EN-US>下è²j2sdkåQŒæ³¨æ„?span lang=EN-US>下è²ç‰ˆæœ¬ä¸?span lang=EN-US>Windows Offline Installationçš?span lang=EN-US>SDKåQŒåŒæ—¶æœ€å¥½ä¸‹è½?span lang=EN-US>J2SE 1.5.0 DocumentationåQŒç„¶åŽåˆ°tomcat官方站点åQ?span lang=EN-US>http://jakarta.apache.org/site/downloads/downloads_tomcat-5.cgiåQ‰ä¸‹è½?span lang=EN-US>tomcatåQˆä¸‹è½½æœ€æ–?span lang=EN-US>5.5.9版本çš?span lang=EN-US>tomcatåQ‰ï¼›
  
  ½W¬äºŒæ­¥ï¼šå®‰è£…和酾|®ä½ çš?span lang=EN-US>j2sdkå’?span lang=EN-US>tomcatåQ𿉧è¡?span lang=EN-US>j2sdkå’?span lang=EN-US>tomcat的安装程åºï¼Œç„¶åŽæŒ‰é»˜è®¤è®¾¾|®è¿›è¡Œå®‰è£…å³å¯ã€?span lang=EN-US>
  
  1.安装j2sdk以åŽåQŒéœ€è¦é…¾|®ä¸€ä¸‹çŽ¯å¢ƒå˜é‡ï¼Œåœ¨æˆ‘的电è„?span lang=EN-US>->属æ€?span lang=EN-US>->高çñ”->环境å˜é‡->¾pÈ»Ÿå˜é‡ä¸­æ·»åŠ ä»¥ä¸‹çŽ¯å¢ƒå˜é‡?span lang=EN-US>(å‡å®šä½ çš„j2sdk安装åœ?span lang=EN-US>c:\j2sdk1.5.0åQ‰ï¼š
  
  JAVA_HOME=c:\j2sdk1.5.0
  classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;åQ?span lang=EN-US>.;一定ä¸èƒ½å°‘åQŒå› ä¸ºå®ƒä»£è¡¨å½“å‰è·¯å¾„)
  path=%JAVA_HOME%\bin
  
  接ç€å¯ä»¥å†™ä¸€ä¸ªç®€å•çš„java½E‹åºæ?span lang=EN-US>‹¹‹è¯•J2SDK是å¦å·²å®‰è£…æˆåŠŸï¼š
  
  public class Test{
  public static void main(String args[]){
  System.out.println("This is a test program.");
  }
  }
  
  ž®†ä¸Šé¢çš„˜q™æ®µ½E‹åºä¿å­˜ä¸ºæ–‡ä»¶åä¸?span lang=EN-US>Test.java的文件ã€?span lang=EN-US>
  
ã€€ã€€ç„¶åŽæ‰“开命ä×oæç¤º½W¦çª—å£ï¼ŒcdåˆîC½ çš?span lang=EN-US>Test.java所在目录,然åŽé”®å…¥ä¸‹é¢çš„命ä»?span lang=EN-US>
  
  javac Test.java
  java Test
  
  此时如果看到打å°å‡ºæ¥This is a test program.çš„è¯è¯´æ˜Žå®‰è£…æˆåŠŸäº†ï¼Œå¦‚æžœæ²¡æœ‰æ‰“å°å‡ø™¿™å¥è¯åQŒä½ éœ€è¦ä»”¾l†æ£€æŸ¥ä¸€ä¸‹ä½ çš„é…¾|®æƒ…å†üc€?span lang=EN-US>
  
  2.安装TomcatåŽï¼Œåœ¨æˆ‘的电è„?span lang=EN-US>->属æ€?span lang=EN-US>->高çñ”->环境å˜é‡->¾pÈ»Ÿå˜é‡ä¸­æ·»åŠ ä»¥ä¸‹çŽ¯å¢ƒå˜é‡?span lang=EN-US>(å‡å®šä½ çš„tomcat安装åœ?span lang=EN-US>c:\tomcat)åQ?span lang=EN-US>
  
  CATALINA_HOME=c:\tomcat
  CATALINA_BASE=c:\tomcat
  
  然åŽä¿®æ”¹çŽ¯å¢ƒå˜é‡ä¸­çš„classpathåQŒæŠŠtomat安装目录下的common\lib下的(å¯ä»¥æ ÒŽ®å®žé™…˜q½åŠ )servlet.jar˜q½åŠ åˆ?span lang=EN-US>classpath中去åQŒä¿®æ”¹åŽçš?span lang=EN-US>classpath如下åQ?span lang=EN-US>
  
  classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\lib\servlet-api.jar;
  
  接ç€å¯ä»¥å¯åЍtomcatåQŒåœ¨IE中访é—?span lang=EN-US>http://localhost:8080åQŒå¦‚果看åˆ?span lang=EN-US>tomcat的欢˜qŽé¡µé¢çš„è¯è¯´æ˜Žå®‰è£…æˆåŠŸäº†ã€?span lang=EN-US>
  
  ½W¬ä¸‰æ­¥ï¼šå»ºç«‹è‡ªå·±çš?span lang=EN-US>jsp app目录
  
  1.åˆ?span lang=EN-US>Tomcat的安装目录的webapps目录åQŒå¯ä»¥çœ‹åˆ?span lang=EN-US>ROOTåQ?span lang=EN-US>examples, tomcat-docs之类Tomcat自带的的目录åQ?span lang=EN-US>
  2.åœ?span lang=EN-US>webapps目录下新å»ÞZ¸€ä¸ªç›®å½•,起åå?span lang=EN-US>myappåQ?span lang=EN-US>
  3.myapp下新å»ÞZ¸€ä¸ªç›®å½?span lang=EN-US>WEB-INFåQŒæ³¨æ„,目录å称是区分大ž®å†™çš„ï¼›
  4.WEB-INF下新å»ÞZ¸€ä¸ªæ–‡ä»?span lang=EN-US>web.xmlåQŒå†…容如下:
  
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE web-app
  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  "http://java.sun.com/dtd/web-app_2_3.dtd">
  <web-app>
  <display-name>My Web Application</display-name>
  <description>
  A application for test.
  </description>
  </web-app>
  
  5.åœ?span lang=EN-US>myapp下新å»ÞZ¸€ä¸?span lang=EN-US>‹¹‹è¯•çš?span lang=EN-US>jsp™åµé¢åQŒæ–‡ä»¶åä¸?span lang=EN-US>index.jspåQŒæ–‡ä»¶å†…容如下:
  <html><body><center>
  Now time is: <%=new java.util.Date()%>
  </center></body></html>
  
  6.é‡å¯Tomcat
  
  7.打开‹¹è§ˆå™¨ï¼Œè¾“å…¥http://localhost:8080/myapp/index.jsp çœ‹åˆ°å½“å‰æ—‰™—´çš„è¯è¯´æ˜Žž®±æˆåŠŸäº†ã€?span lang=EN-US>
  
  ½W¬å››æ­¥ï¼šå»ºç«‹è‡ªå·±çš?span lang=EN-US>ServletåQ?span lang=EN-US>
  
  1.用你最熟悉的编辑器åQˆå¾è®®ä‹É用有语法‹‚€æŸ¥çš„java ideåQ‰æ–°å»ÞZ¸€ä¸?span lang=EN-US>servlet½E‹åºåQŒæ–‡ä»¶åä¸?span lang=EN-US>Test.javaåQŒæ–‡ä»¶å†…容如下:
  
  package test;
  import java.io.IOException;
  import java.io.PrintWriter;
  import javax.servlet.ServletException;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  public class Test extends HttpServlet {
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
  PrintWriter out=response.getWriter();
  out.println("<html><body><h1>This is a servlet test.</h1></body></html>");
  out.flush();
  }
  }
  
  2 .¾~–译
  ž®?span lang=EN-US>Test.java攑֜¨c:\test下,使用如下命ä×o¾~–译åQ?span lang=EN-US>
  
  C:\Test>javac Test.java
  
  然åŽåœ?span lang=EN-US>c:\Test下会产生一个编译åŽçš?span lang=EN-US>servletæ–‡äšgåQ?span lang=EN-US>Test.class
  
  3 .ž®†ç»“æž?span lang=EN-US>test\Test.class剪切åˆ?span lang=EN-US>%CATALINA_HOME%\webapps\myapp\WEB-INF\classes下,也就是剪切那ä¸?span lang=EN-US>test目录åˆ?span lang=EN-US>classes目录下,如果classes目录ä¸å­˜åœ¨ï¼Œž®±æ–°å»ÞZ¸€ä¸ªã€‚现åœ?span lang=EN-US>webapps\myapp\WEB-INF\classes下有test\Test.class的文件目录结æž?span lang=EN-US>
  
  4 .修改webapps\myapp\WEB-INF\web.xmlåQŒæ·»åŠ?span lang=EN-US>servletå’?span lang=EN-US>servlet-mapping
  
  ¾~–辑åŽçš„web.xml如下所½Cºï¼Œ¾U¢è‰²ä¸ºæ·»åŠ çš„å†…å®¹:
  
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE web-app
  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  "http://java.sun.com/dtd/web-app_2_3.dtd">
  <web-app>
  <display-name>My Web Application</display-name>
  <description>
  A application for test.
  </description>
  <servlet>
  <servlet-name>Test</servlet-name>
  <display-name>Test</display-name>
  <description>A test Servlet</description>
  <servlet-class>test.Test</servlet-class>
  </servlet>
  <servlet-mapping>
  <servlet-name>Test</servlet-name>
  <url-pattern>/Test</url-pattern>
  </servlet-mapping>
  </web-app>
  
  ˜q™æ®µè¯ä¸­çš?span lang=EN-US>servlet˜q™ä¸€ŒDµå£°æ˜Žäº†ä½ è¦è°ƒç”¨çš?span lang=EN-US>ServletåQŒè€?span lang=EN-US>servlet-mapping则是ž®†å£°æ˜Žçš„servlet"映射"到地å€/Testä¸?span lang=EN-US>
  
  5 .好了åQŒé‡å¯åЍTomcatåQŒå¯åЍæµè§ˆå™¨åQŒè¾“å…?span lang=EN-US>http://localhost:8080/myapp/Test 如果看到输出This is a servlet test.ž®Þp¯´æ˜Žç¼–写的servletæˆåŠŸäº†ã€?span lang=EN-US>
  
  注æ„åQšä¿®æ”¹äº†web.xmlä»¥åŠæ–°åŠ äº?span lang=EN-US>classåQŒéƒ½è¦é‡å?span lang=EN-US>Tomcat
  
  ½W¬å››æ­¥ï¼šå»ºç«‹è‡ªå·±çš?span lang=EN-US>BeanåQ?span lang=EN-US>
  
  1.用你最熟悉的编辑器åQˆå¾è®®ä‹É用有语法‹‚€æŸ¥çš„java ideåQ‰æ–°å»ÞZ¸€ä¸?span lang=EN-US>java½E‹åºåQŒæ–‡ä»¶åä¸?span lang=EN-US>TestBean.javaåQŒæ–‡ä»¶å†…容如下:
  
  package test;
  public class TestBean{
  private String name = null;
  public TestBean(String strName_p){
  this.name=strName_p;
  }
  public void setName(String strName_p){
  this.name=strName_p;
  }
  public String getName(){
  return this.name;
  }
  }
  
  2 .¾~–译
  
  ž®?span lang=EN-US>TestBean.java攑֜¨c:\test下,使用如下命ä×o¾~–译åQ?span lang=EN-US>
  
  C:\Test>javac TestBean.java
  
  然åŽåœ?span lang=EN-US>c:\Test下会产生一个编译åŽçš?span lang=EN-US>beanæ–‡äšgåQ?span lang=EN-US>TestBean.class
  
  3 .ž®?span lang=EN-US>TestBean.classæ–‡äšg剪切åˆ?span lang=EN-US> %CATALINA_HOME%\webapps\myapp\WEB-INF\classes\test下,
  
  4 .æ–°å¾ä¸€ä¸?span lang=EN-US>TestBean.jspæ–‡äšgåQŒæ–‡ä»¶å†…容䨓åQ?span lang=EN-US>
  
  <%@ page import="test.TestBean" %>
  <html><body><center>
  <%
  TestBean testBean=new TestBean("This is a test java bean.");
  %>
  Java bean name is: <%=testBean.getName()%>
  </center></body></html>
  
  5 .好了åQŒé‡å?span lang=EN-US>TomcatåQŒå¯åЍæµè§ˆå™¨åQŒè¾“å…?span lang=EN-US>http://localhost:8080/myapp/TestBean.jsp 如果看到输出Java bean name is: This is a test java bean.ž®Þp¯´æ˜Žç¼–写的BeanæˆåŠŸäº†ã€?span lang=EN-US>
  
  ˜q™æ ·ž®±å®Œæˆäº†æ•´ä¸ªTomcat下的jspã€?span lang=EN-US>servletå’?span lang=EN-US>javabean的酾|®ã€‚接下æ¥éœ€è¦åšçš„事情就是多看书ã€å¤šè¯Õdˆ«äººçš„好代ç ï¼Œè‡ªå·±å¤šåŠ¨æ‰‹å†™ä»£ç ä»¥å¢žå¼ø™‡ªå·±åœ¨˜q™æ–¹é¢å¼€å‘的能力了ã€?span lang=EN-US>
  
  jvm应填写到
  c:\j2sdk\bin
  
  ¾l™ä½ ä¸€ä¸ªç®€å•çš„é…ç½®åQšï¼šåQšï¼š
  
  JSP环境é…置心得
  
  首先è¦è¯´çš„æ˜¯åQŒä‹Éç”?span lang=EN-US>jdk+tomcat完全å¯ä»¥é…置我们çš?span lang=EN-US>jspæœåŠ¡å™?/span>åQŒä¸å†éœ€è¦å…¶å®žä“Q何东东,有很多文章介¾l了ApacheåQŒå…¶å®žæ ¹æœ¬ç”¨ä¸ç€åQŒä¸€èˆ¬çš„学习调试tomcat完全å¯ä»¥èƒœä“Q了ã€?span lang=EN-US>
  
  安装jdkåŽï¼Œtomcat在安装之å‰ä¼šè‡ªåŠ¨æ‰‘Öˆ°jdk的安装èµ\径,一路点å‡?span lang=EN-US>"下一æ­?span lang=EN-US>"åQŒç»˜q‡ä¸€ŒD‰|—¶é—´çš„æ–‡äšgå¤åˆ¶åQŒæœ€å?span lang=EN-US>"close"åQŒå®Œæˆ?span lang=EN-US>comcat的安装ã€?span lang=EN-US>
  
  您最好去下è²ä¸€ä¸ªç‰ˆæœ¬è¾ƒé«˜çš„tomcatåQŒæ¯”å¦?span lang=EN-US>4.1ä»¥ä¸Šçš„ï¼Œå› äØ“å®ƒä¸éœ€è¦è®¾¾|®å¤ªå¤šçš„¾pÈ»Ÿå˜é‡åQŒå³å‡?span lang=EN-US>"我的电脑"åQŒé€‰æ‹©"属æ€?span lang=EN-US>"->"高çñ”"->"环境å˜é‡"->"¾pÈ»Ÿå˜é‡"åQŒæ–°å»ÞZ¸€ä¸?span lang=EN-US>TOMCAT_HOMEåQŒå€ÆD®¾¾|®æˆä½ çš„tomcat所在的路径åQŒæ¯”如:D:\Program Files\Apache Group\Tomcat 5.5åQŒé…¾|®å®Œæˆã€?span lang=EN-US>
  
  从开始èœå•中扑ֈ°tomcat选项åQŒä¸€èˆ¬æ‰“å¼€™åºåºæ˜¯ï¼šå¼€å§?span lang=EN-US>->½E‹åº->Apache Tomcat 5.5åQŒé€‰æ‹©"Start Tomcat"åQŒè®©jspæœåŠ¡å™?/span>开始è¿è¡Œï¼Œæ­¤æ—¶ä¼šæ‰“开一个类ä¼?span lang=EN-US>Dos的窗å£ï¼Œä¼šæ˜¾½CÞZ¸€äº›ç›¸å…³çš„ä¿¡æ¯ã€?span lang=EN-US><



]]>
40 个轻é‡çñ” JavaScript åº?/title><link>http://www.shnenglu.com/woaidongmao/archive/2009/03/06/75790.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Fri, 06 Mar 2009 15:36:00 GMT</pubDate><guid>http://www.shnenglu.com/woaidongmao/archive/2009/03/06/75790.html</guid><wfw:comment>http://www.shnenglu.com/woaidongmao/comments/75790.html</wfw:comment><comments>http://www.shnenglu.com/woaidongmao/archive/2009/03/06/75790.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/woaidongmao/comments/commentRss/75790.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/woaidongmao/services/trackbacks/75790.html</trackback:ping><description><![CDATA[<p><a title="http://www.comsharp.com/GetKnowledge/zh-CN/TeamBlogTimothyPage_K741.aspx" >http://www.comsharp.com/GetKnowledge/zh-CN/TeamBlogTimothyPage_K741.aspx</a></p> <p>‹¹è¡Œçš?JavaScript 库ä¸èƒœæžšä¸¾ï¼ŒjQuery, MooTools, Prototype, Dojo, YUI。这äº?JavaScript 库功能丰富,加上它们的æ’ä»Óž¼Œå‡ ä¹Žèƒ½èƒœä»ÖM“Q何工作,然而这是有代ä­h的,˜q™äº›åº“往往坯D‡´ä½ çš„¾|‘页ž®ºå¯¸è‡ƒè‚¿ã€‚在æŸäº›åœºåˆåQŒå¦‚æžœä½ åªæƒ³å®Œæˆç‰¹å®šçš„工作,å¯ä»¥ä½¿ç”¨ä¸€äº›åŠŸèƒ½æ›´ä¸“ä¸€çš„è½»é‡åº“åQŒæœ¬æ–‡ä»‹¾l了40个éžå¸¸å‡ºè‰²çš„轻釾U?JavaScript 库ã€?<p>˜q™æ˜¯æœ¬æ–‡çš„第一部分åQŒç¬¬äºŒéƒ¨åˆ†è¯·å‚阅<a >40 个轻é‡çñ” JavaScript 库(下)</a>ã€?<h4>1. 表å•相关</h4> <p><a ><strong>wForms</strong></a><br>一个低调的开æºé¡¹ç›®ï¼Œ½Ž€åŒ–了¾l大多数常用 JavaScript 表å•功能åQŒåŒ…å«å¯ä»¥ç›´æŽ¥ä‹É用的表å•验è¯åŠŸèƒ½åQŒå¦å¤–,˜q˜åŒ…å«å¼ºå¤§çš„表å•åŒæ­¥ä»¥åŠè¡¨å•æ¡äšg判断功能ã€?<p><a ><img height="116" alt="wForms" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-05/wforms.gif" width="480" border="0"></a> <p><a ><strong>Validanguage</strong></a><br>åˆä¸€ä¸ªä½Žè°ƒçš„ JavaScript 表å•éªŒè¯æ¡†æž¶ã€‚它拥有集æˆé€»è¾‘åQŒä¸€äº›è®¾¾|®å¯ä»¥é’ˆå¯¹å…¨å±€åQŒå•ä¸ªè¡¨å•æˆ–å•个对象。æä¾›ä¸¤ä¸ªAPIåQŒé›†æˆ?AJAX 支æŒåQŒç¼“存,以åŠå›žè°ƒå‡½æ•°ã€‚它æä¾›¾cÖM¼¼ HTML çš?API 语å¥åQŒä»¥åŠé¢å‘对象的 JavaScript API ã€?<p><a ><img height="116" alt="Validanguage" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-05/validanguage.gif" width="480" border="0"></a> <p><a ><strong>LiveValidation</strong></a><br>一个轻é‡çš„表å•验è¯åº“。除了传¾lŸçš„验è¯åŠŸèƒ½åQŒè¿˜æä¾›å®žæ—¶éªŒè¯åQŒå¯ä»¥ä¸€è¾¹è¾“入一é验è¯ã€?strong>Ruby on Rails</strong> 用户å¯èƒ½ä¼šå‘现这个库éžå¸¸å¥½ç”¨åQŒå› ä¸ÞZ»–们的命åè§„åˆ™å’Œå‚æ•°å分近伹{€‚è¯¥åº“æ—¢æœ‰ç‹¬ç«‹ç‰ˆæœ¬ï¼Œåˆæœ‰ä¸€ä¸?Prototype 版本ã€?<p><a ><img height="116" alt="LiveValidation" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-05/live-validation.gif" width="480"></a> <p><a ><strong>yav</strong></a><br>一个强大,ç‰|´»åQŒå¯æ‰©å±•的表å•验è¯åº“。支æŒå„¿U场åˆï¼Œä»Žç®€å•的如日期,电å­é‚®äšg地å€ä»¥åŠæ•´æ•°çš„验è¯ï¼Œåˆ°å¤æ‚çš„åQŒå¦‚正则表达å¼ã€‚内¾|?AJAX 支æŒåQŒè¾“出的错误消æ¯å¯ä»¥å®šä½åˆ°å¯¹è±¡çñ”ã€?<p><a ><strong>qForms</strong></a><br>处ç†è¡¨å•的整套方案。功能包括儿U验è¯è§„则,防止多次å‘布的机åˆÓž¼Œä»¥åŠé”定或解é”制定输入框ã€?<p><a ><strong>formreform</strong></a><br>ä¸åŸºäº?table 的多æ è®¾è®¡å‘æ¥æ˜¯ä¸€ä¸ªæŒ‘战。这个微型库ž®†ä¼ ¾lŸçš„表å•å˜æˆæ¼‚亮的多æ åÅžå¼ã€?a ><img height="116" alt="formreform" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-05/formreform.gif" width="480" border="0"></a> <h4>2. 动画相关</h4> <p><a ><strong>$fx()</strong></a><br>一个用æ¥è®© HTML 对象˜q动的轻é‡åº“。你å¯ä»¥åœ¨ä¸€ä¸ªæ—¶é—´èáu上改å˜ä“Qä½?CSS å±žæ€§ï¼Œå¯¹äºŽå¤æ‚动画åQŒä½ å¯ä»¥ž®†å„¿U效果结åˆè“væ¥ï¼Œž®†å¯¹è±¡åˆ†¾l„ï¼Œè®©å®ƒä»¬åÆˆè¡Œè¿åЍã€?<p><a ><img height="116" alt="$fx() JavaScript Animation Library" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-05/fx-javascript-animations.jpg" width="480" border="0"></a> <p><a ><strong>JSTweener</strong></a><br>一个生æˆä¸­é—´å“áçš?JavaScript 库,它的 API ¾cÖM¼¼è‘—å的中间å“á引擎 <a >Tweener</a>。你å¯ä»¥æŒ‡å®šåŠ¨ç”»æ—‰™—´åQŒå®šä¹‰åˆ‡æ¢æ•ˆæžœä»¥åŠæ—¶å»¶ã€‚在几乎ä»ÖM½•炚wƒ½å¯ä»¥è§¦åŠ¨äº‹äšgã€?<p><a ><img alt="JSTweener" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-05/jstweener.gif" border="0"></a> <p><a ><strong>Facebook Animation</strong></a><br>一个强大的åQŒç”¨æ¥åˆ›å»ºå¯å®šåˆ¶çš„,åŸÞZºŽ CSS 的动甅R€‚在 Facebook 动画中,几行代砞®±å¯ä»¥æ”¹å–?UI。语法和 FBJS åQˆç”¨äº?Facebook 的库åQ‰ä¸€æ —÷€?<p><a ><strong>FX</strong></a><br>一个语法类ä¼?YUI 的轻é‡?JavaScript 库,å¯ä»¥ä¸ºå‡ ä¹Žä“Qä½?CSS 属性创å»ÞZ¸­é—´å“á。支æŒé¢œè‰²å’Œæ»šåŠ¨åŠ¨ç”»åQŒäؓ对象讄¡½® to å’?from 值就å¯ä»¥äº†ã€?<h4>3. 视觉与图形效æž?/h4> <p><a ><strong>JS charts</strong></a><br>æ”¯æŒæŸÞqŠ¶å›¾ï¼Œåœ†é¥¼å›¾ä»¥åŠç®€å•的曲线图。直接将˜q™ä¸ªåº“æ’入网™åµï¼Œç„¶åŽä»?XML æ–‡äšgæˆ?JavaScript 数组å˜é‡è°ƒç”¨æ•°æ®ã€‚PNG æ ¼å¼åQŒå…¼å®Òމ€æœ‰ä¸»è¦æµè§ˆå™¨ã€?<p><a ><img height="116" alt="JS Charts" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-05/js-charts.jpg" width="480" border="0"></a> <p><a ><strong>Canvas 3D JS Library (C3DL)</strong></a><br><strong>C3DL</strong> ä½?3D ½E‹åºçš„编写å˜å¾—简å•。æä¾›ä¸€å¥—数学,场景ä¸?3D 对象¾c»ï¼Œå¯ä»¥ç›´æŽ¥åœ¨æµè§ˆå™¨ä¸­å¼€å?3D 内容åQŒä¸éœ€è¦å¾ˆæ·Þqš„ 3D 知识ã€?<p><a ><img height="116" alt="C3DL" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-05/c3dl.jpg" width="480" border="0"></a> <p><a ><strong>Processing.js</strong></a><br>˜q™æ˜¯ <a >Processing 语言</a>åœ?JavaScript 的移æ¤ã€?D输出功能丰富。æä¾›äº†¾l˜å›¾åQŒè‰²å½©å¤„ç†ï¼Œå­—体åQŒå¯¹è±¡ç­‰å¤„ç†å‡½æ•°ã€?<p><a ><img height="116" alt="Processing.js" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-05/processing-js.gif" width="480" border="0"></a> <p><a ><strong>Rapha?l</strong></a><br>一个让人惊å¹çš„ JavaScript 库,å¯ä»¥åœ?Web 上实现矢é‡å›¾ã€‚ä‹Éç”?SVG, VML 创å¾çš„图形å¯ä»¥è¢«æ›´æ”¹æˆ–绑定事件。功能æžå…¶ä¸°å¯Œï¼ŒåŒ…括旋è{åQŒåŠ¨ç”»ï¼Œ¾~©æ”¾½{‰ã€?<p><a ><img height="116" alt="Raphael: Vectors With JavaScript" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-05/raphael-js.jpg" width="480" border="0"></a> <p><a ><strong>ImageFX</strong></a><br>è¯?JavaScript åº“äØ“å›„¡‰‡æ·ÕdŠ æ•ˆæžœåQŒå¦‚虚化åQŒé”化,‹¹®é›•åQŒåŠ äº®ç­‰ã€‚ImageFX 使用ç”Õd¸ƒå¯¹è±¡å®žçް˜q™äº›æ•ˆæžœåQŒå…¼å®Òމ€æœ‰ä¸»‹¹æµè§ˆå™¨ã€‚这个库éžå¸¸å®ÒŽ˜“使用åQŒåªè¦å°† .js 库文件æ’入网™åµï¼Œè°ƒç”¨é‚£äº›å‡½æ•°å›_¯ã€?<p><a ><img height="116" alt="Imagefx" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-05/imagefx.jpg" width="480" border="0"></a> <p><a ><strong>Pixastic</strong></a><br><strong>Pixastic</strong> 使用 HTML5 ç”Õd¸ƒå¯¹è±¡åQŒå…许对原始åƒç´ ˜q›è¡Œæ“作。效果包括去饱和度,ç°åº¦¾U§ï¼Œåè{åQŒäº®åº¦ï¼Œå¯Òޝ”度调æ•ß_¼Œè‰²è°ƒåQŒé¥±å’Œåº¦è°ƒæ•´åQŒä»¥åŠæÕQ雕,虚化½{‰æ•ˆæžœã€‚因为用åˆîCº† HTML 5 的画布对象,因此˜q˜æ— æ³•å…¼å®Òމ€æœ‰æµè§ˆå™¨ã€?<p><a ><strong>Reflection.js</strong></a><br>一个很低调çš?JavaScript è‡ªåŠ¨å®žçŽ°å€’åª„æ•ˆæžœã€‚å€’åª„çš„é«˜åº¦ï¼Œé€æ˜Žåº¦å¯ä»¥è°ƒæ•´ã€‚æ”¯æŒæ‰€æœ‰ä¸»‹¹æµè§ˆå™¨åQŒæ–‡ä»¶å°ºå¯¸å°äº?Kã€?<p><a ><img height="116" alt="Reflection.js" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-05/reflection-js.jpg" width="480" border="0"></a> <h4>4. æ•°æ®åº?/h4> <p><a ><strong>Taffy DB</strong></a><br>一ä¸?JavaScript 库,å¯ä»¥çœ‹ä½œ‹¹è§ˆå™¨ä¸­çš?SQL ServeråQŒæˆ–高çñ”数组½Ž¡ç†å™¨ã€‚在使用äº?AJAX 的程åºä¸­åQŒå¯ä»¥ç”¨ä½œæ•°æ®åº“层,å¯ä»¥åˆ›å¾åQŒè¯»å–,¾~–辑åQŒåˆ é™¤æ•°æ®ï¼Œä½¿ç”¨å¾ªçޝåQŒæŽ’åºä»¥åŠé«˜¾U§æŸ¥è¯¢ã€?<p><a ><strong>ActiveRecord.js</strong></a><br>˜q™ä¸ªåº“支æŒ?Google Gears ä»¥åŠ ChromeåQŒAptana Jaxer, Adobe AIR 以åŠä»ÖM½•æ”¯æŒ HTML 5 SQL ¾l†åˆ™çš„åã^åŽÍ¼ˆç›®å‰æœ?Webkit ä»¥åŠ iPhoneåQ‰ã€‚å¯ä»¥è‡ªåŠ¨åˆ›å»ø™¡¨åQŒéªŒè¯å’ŒåŒæ­¥æ•°æ®ã€?<p><img height="116" alt="ActiveRecord.js" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-05/activerecord-js.gif" width="480"> <p> </p> <p> </p> <p><a title="http://www.comsharp.com/GetKnowledge/zh-CN/TeamBlogTimothyPage_K742.aspx" >http://www.comsharp.com/GetKnowledge/zh-CN/TeamBlogTimothyPage_K742.aspx</a></p> <p>‹¹è¡Œçš?JavaScript 库ä¸èƒœæžšä¸¾ï¼ŒjQuery, MooTools, Prototype, Dojo, YUI。这äº?JavaScript 库功能丰富,加上它们的æ’ä»Óž¼Œå‡ ä¹Žèƒ½èƒœä»ÖM“Q何工作,然而这是有代ä­h的,˜q™äº›åº“往往坯D‡´ä½ çš„¾|‘页ž®ºå¯¸è‡ƒè‚¿ã€‚在æŸäº›åœºåˆåQŒå¦‚æžœä½ åªæƒ³å®Œæˆç‰¹å®šçš„工作,å¯ä»¥ä½¿ç”¨ä¸€äº›åŠŸèƒ½æ›´ä¸“ä¸€çš„è½»é‡åº“åQŒæœ¬æ–‡ä»‹¾l了40个éžå¸¸å‡ºè‰²çš„轻釾U?JavaScript 库ã€?<p>˜q™æ˜¯æœ¬æ–‡çš„第二部分,½W¬ä¸€éƒ¨åˆ†å‚è§<a >40 个轻é‡çñ” JavaScript åº?åQˆä¸ŠåQ?/a>ã€?<h4>5. 字符串与数学函数</h4> <p><a ><strong>Date.js</strong></a><br>和日期打交é“䏿˜¯ä»¶å®¹æ˜“事åQŒæœ‰å¾ˆå¤šæ ¼å¼è¦å¤„ç†ã€?strong>Datejs</strong> å¯ä»¥å¾ˆå¥½åœ°å¤„ç†ç®€å•æˆ–å¤æ‚的日期函数。å¯ä»¥å°†æ—¥æœŸè§£æžå‡ø™¯¸å¦‚“Next thursdayâ€ï¼Œâ€?2 yearsâ€ä¸€¾cÈš„æ ¼å¼åQŒä¹Ÿæ”¯æŒæ‰€æœ‰æ—¥æœŸåÅžå¼ï¼Œå¦?2009.01.08, 12/6/2001ã€?<p><a ><img height="116" alt="Datejs" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-06/datejs.jpg" width="480" border="0"></a> <p><a ><strong>Sylvester</strong></a><br>一个处ç†çŸ¢é‡å’Œç‚šw˜µçš„æ•°å­?JavaScript 库,包å«å¤šç»´çŸ¢é‡å’Œç‚¹é˜µå¾æ¨¡ç±»åQŒä»¥åŠåœ¨3D½Iºé—´çš„一些模型ã€?<p><a ><img height="116" alt="Sylvester" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-06/sylvester.gif" width="480" border="0"></a> <p><a ><strong>Pretty Date</strong> </a><br>ä¸€ä¸ªå¾ˆå‡ø™‰²çš?JavaScript 库,用一¿U很漂亮åQŒå¾ˆå‹å¥½çš„æ–¹å¼æ˜¾½Cºæ—¥æœŸï¼Œå¦‚下图所½Cºã€?<p><a ><img height="116" alt="Pretty Date" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-06/pretty-date.gif" width="480"></a> <p><a ><strong>XRegExp</strong></a><br>JavaScript 中的 RegExp å¯¹è±¡å·²ç»æ”¯æŒæ­£åˆ™è¡¨è¾¾å¼ï¼Œ<strong>XRegExp</strong> å¢žåŠ äº†æ›´å¤šæœªæ¥æµè§ˆå™¨å¯èƒ½åŒ…å«çš„功能(ECMAScript 4 - ES4åQ‰ã€‚该库对 RegExp 对象˜q›è¡Œ¾~“å­˜åQŒé‡ç”¨åƈ增加了众多新功能ã€?<p><a ><strong>JavaScript URL Library</strong></a><br>一个用æ¥å¤„ç?URL çš?JavaScript 库,å¯ä»¥å¯?URL 中的ä»ÀL„部分˜q›è¡Œå¤„ç†ã€?<h4>6. Fonts</h4> <p><a ><strong>typeface.js</strong></a><br>˜q™ä¸ªåº“å¯ä»¥è®©ä½ åœ¨¾|‘页中ä‹É用ä“Qæ„字体,但和 <a >sIFR</a> ä»¥åŠ <a >FLIR</a> ˜q™äº›åŸÞZºŽ Flash 的方案ä¸ä¸€æ øP¼Œ<strong>typeface.js</strong> 100% åŸÞZºŽ JavaScriptåQŒåªéœ€ž®†ä½ çš„字体文件上传到一ä¸?a >åŸÞZºŽ Web 的生æˆå™¨</a>那里åQŒå†ž®†ç”Ÿæˆçš„ JavaScript æ–‡äšg下è²å›žæ¥åŒ…å«åˆ°ç½‘™åµä¸­å›_¯ã€?<p><a ><img height="116" alt="Typeface.js" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-06/typeface-js.gif" width="480" border="0"></a> <p><a ><strong>CufÙQn</strong></a><br>å’?typeface.js 很相åƒï¼Œ<strong>CufÙQn</strong> 也å¯ä»¥è®©ä½ åœ¨¾|‘页中ä‹É用ä“Qæ„å­—ä½“ï¼ŒåŒæ ·åQŒå®ƒä¹Ÿæ˜¯ä½¿ç”¨ä¸€ä¸ªç”Ÿæˆå™¨åQŒå°†å­—ä½“è½¬æ¢æˆ?VMLåQŒå°†ç”Ÿæˆçš?.js æ–‡äšg包å«åˆ°ç½‘™åµå³å¯ã€?<h4>7. 调试与记å½?/h4> <p><a ><strong>Blackbird</strong></a><br>äºÞZ»¬¾l常使用 Alert() 调试 JavaScript ½E‹åºåQ?strong>Blackbird</strong> æä¾›äº†ä¸€ä¸ªæ¼‚亮的控制å°è®°å½•,查看åQŒè¿‡æ»¤ç¨‹åºçš„˜q行ã€?<p><a ><img height="116" alt="Blackbird" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-06/blackbird.jpg" width="288" border="0"></a> <p><a ><strong>NitobiBug</strong></a><br>åŸÞZºŽ‹¹è§ˆå™¨çš„è·¨æµè§ˆå™¨ javaScript 对象记录与检查工兗÷€?<p><a ><img height="116" alt="NitobiBug" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-06/nitobibug.jpg" width="480" border="0"></a> <p><a ><strong>Firebug Lite</strong></a><br>ç›®å‰æœ€å¥½çš„ JavaScript 调试工具é?<strong>Firebug</strong> 莫属åQŒç„¶è€Œè¯¥å·¥å…·åªæ”¯æŒ?FireFoxåQŒå°† <strong>Firebug Lite</strong> .js æ–‡äšgæ’入你的¾|‘页åQŒå°±å¯ä»¥åœ¨æ‰€æœ‰æµè§ˆå™¨éƒ½å®žçŽ?FireBug 功能ã€?<p><a ><img height="116" alt="Firebug Lite" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-06/firebug-lite.jpg" width="480" border="0"></a> <h4>8. 其它</h4> <p><a ><strong>swfobject</strong></a><a ></a><br>˜q™æ˜¯ä¸€ä¸ªæœ€å—欢˜qŽçš„å¯?Flash 对象˜q›è¡Œå¼•用的方法。å¯ä»¥ç”Ÿæˆæ ‡å‡?swf 引用代ç åQŒåƈ探测用户播放器版本。如果用æˆïL‰ˆæœ¬ä¸æ”¯æŒåQŒä¼šæ˜„¡¤ºå¤‡ç”¨å†…容ã€?<p><a ><img height="116" alt="swfobject" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-06/swjobject.jpg" width="480" border="0"></a> <p><a ><strong>sorttable</strong></a><strong> ä¸?</strong><a ><strong>dragtable</strong></a><br>ä¸ç®¡ä½ å–œ‹Æ¢ä¸Žå¦ï¼Œtable ä»ç„¶æ˜¯æœ€å¥½çš„表现数æ®çš„æ–¹å¼ï¼Œä½†å¯ä»¥æ›´å¥½åœ°åˆ©ç”¨ã€?strong>sorttable</strong> å¯ä»¥è®©è¡¨æ ¼æ•°æ®æŽ’åºï¼Œåªéœ€åœ?table 上加一ä¸?class="sortable" 标志åQŒè¿˜å¯ä»¥æŽ’除指定的æ ã€?strong>dragtable</strong> 让表格的æ å¯ä»¥æ‹–动,在表æ ég¸ŠåŠ ä¸Š class="dragable" 标志å›_¯åQŒè¿™ä¸¤ä¸ª¾cÕd¯ä»¥ç»“åˆè“væ¥ä‹É用,åªéœ€åŠ ä¸Š class="sortable dragtable" å›_¯ã€?<p><a ><strong>DD_roundies</strong></a><strong> ä¸?</strong><a ><strong>DD_belatedPNG</strong></a><br><strong>DD_roundies</strong> å¯ä»¥ä¸ä¾èµ–图片实现圆角功能,åªé¢å?IEåQ?通过 VML 实现åQŒå…¶å®ƒæµè§ˆå™¨ä¼šè¢«ç•¥è¿‡åQŒå› ä¸ºé‚£äº›æµè§ˆå™¨æœ¬èínæ”¯æŒ CSS 圆角ã€?<p><a ><img height="116" alt="JavaScript Rounded Corners" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-06/javascript-round-corners.jpg" width="480" border="0"></a> <p><strong>DD_belatedPNG</strong> æ˜¯äØ“äº†è§£å†?IE6 å¯?PNG 支æŒä¸å¥½é—®é¢˜è€Œå¼€å‘çš„åQŒä¸½Ž?PNG 囄¡‰‡ç”¨äºŽ src ˜q˜æ˜¯ background-imageåQ?strong>DD_belatedPNG</strong> 都能æä¾›ä¿®è¡¥ã€?<p><a ><strong>Custom JavaScript Dialog Boxes</strong></a><br>ä¸€ä¸ªåªæœ?4.5K 的轻é‡?JavaScript 库,å¯ä»¥åˆ›å¾ç”¨æˆ·å®šåˆ¶å¯¹è¯æ¡†ï¼Œå¯æ˜¾½C?¿Uç±»åž‹çš„æ¶ˆæ¯æ¡†ï¼Œalerts, warnings, prompts, success。å¯ä»¥è®¾å®šæ¶ˆæ¯æ¡†æ ‡é¢˜åQŒå†…容,以劘q‡å¤šé•¿æ—¶é—´æ˜¾½Cºã€?<p><a ><img height="116" alt="Custom Dialog Boxes" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-06/custom-dialog-boxes.jpg" width="480" border="0"></a> <p><a ><strong>GameJS</strong></a><br><strong>GameJS</strong> 是微软的 <a >XNA æ¸¸æˆæ¡†æž¶</a>åœ?JavaScript 上的¿UÀL¤åQŒä‹Éç”?canvas å¯¹è±¡ä½œäØ“è¾“å‡ºè®‘Ö¤‡ã€‚JavaScript 䏿˜¯æœ€ä½Ïx¸¸æˆåã^åŽÍ¼Œä½†å¯¹é‚£äº›å¸§çŽ‡è¾ƒä½Žçš„æ¸¸æˆä¹Ÿæ²¡æœ‰é—®é¢˜ã€?<p><a ><img height="116" alt="GameJS" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-06/gamejs.jpg" width="480" border="0"></a> <p><a ><strong>Shortcuts.js</strong></a><br>ä»?Google Reader å’?Gmail 开始,Web ½E‹åºä¸­çš„å¿«æ·é”®å¼€å§‹æµè¡Œè“væ¥ã€?strong>Shorcuts.js</strong> 让快æ·é”®çš„处ç†å˜å¾—简å•ã€?<p><a ><strong>Mapstraction</strong></a><br>有丞®‘地图æä¾›å•†éƒ½æä¾›ä¸å?APIåQŒå¦‚æžœä½ è¦æ›´æ¢æä¾›å•†åQŒæ¯”如从 Google Maps åˆ?MapQueståQŒéœ€è¦æ›´æ–îC»£ç ï¼Œ<strong>Mapstraction</strong> æä¾›äº†å¸¸ç”¨åœ°å›¾æä¾›å•†çš?APIåQŒåªéœ€è¯¥ä¸€è¡Œä»£ç å°±èƒ½å®Œæˆè{æ¢ã€?<p><a ><img height="116" alt="Mapstraction" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-06/mapstraction.jpg" width="480" border="0"></a> <p><a ><strong>Amberjack</strong></a><br>ä¸€ä¸ªåªæœ?4K 的微åž?JavaScript 库,å¯ä»¥ä¸ÞZ½ çš„网站添加漂亮的教程功能åQŒä¸€ä¸ªæ¨¡å¼çª—å£ä¼šä»¥æ•™½E‹çš„形弿˜„¡¤ºä»ÀL„内容åQŒæ•™½E‹ä¸­çš„æ­¥éª¤å¯ä»¥é€šè¿‡æ‰‹å·¥¾~–ç å®žçްæˆ?a >在线自动生æˆ</a>。å¯ä»¥ä‹Éç”?a >主题</a>æˆ?CSS 控制内容的格å¼ã€?<p><a ><img height="116" alt="Amberjack" src="http://www.comsharp.com/Writable/Resource/_random_/2009-03-06/amberjack.jpg" width="480" border="0"></a> <p><a ><strong>JsLoad</strong></a><br>JsLoad å¯ä»¥ä»?Google server ˜qœç¨‹åŠ è²å„ç§ JavaScript 库,å¯ä»¥è‡ªåŠ¨åŠ è²å„ç§ç‰ˆæœ¬çš„æ”¯æ’‘库ã€?/p><img src ="http://www.shnenglu.com/woaidongmao/aggbug/75790.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/woaidongmao/" target="_blank">肥仔</a> 2009-03-06 23:36 <a href="http://www.shnenglu.com/woaidongmao/archive/2009/03/06/75790.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item><item><title>page rank 介ç»http://www.shnenglu.com/woaidongmao/archive/2009/01/05/71206.html肥仔肥仔Mon, 05 Jan 2009 02:39:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2009/01/05/71206.htmlhttp://www.shnenglu.com/woaidongmao/comments/71206.htmlhttp://www.shnenglu.com/woaidongmao/archive/2009/01/05/71206.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/71206.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/71206.html  PageRankæ˜?span lang="EN-US">Google½Ž—法的é‡è¦å†…å®V€?span lang="EN-US">2001òq?span lang="EN-US">9月被授予¾ŸŽå›½ä¸“利åQŒä¸“利ähæ˜?span lang="EN-US">Google创始äºÞZ¹‹ä¸€æ‹‰é‡ŒÂ·ä½©å¥‡åQ?span lang="EN-US">Larry PageåQ‰ã€‚因此,PageRank里的page䏿˜¯æŒ‡ç½‘™åµï¼Œè€Œæ˜¯æŒ‡ä½©å¥‡ï¼ŒåŒ™¿™ä¸ªç­‰¾U§æ–¹æ³•是以佩奇æ¥å‘½åçš„ã€?span lang="EN-US">

  Googleçš?span lang="EN-US">PageRankæ ÒŽ®¾|‘站的外部链接和内部链接的数é‡å’Œè´¨é‡ä¿©è¡¡é‡ç½‘站的价倹{€?span lang="EN-US">PageRank背åŽçš„æ¦‚忉|˜¯åQŒæ¯ä¸ªåˆ°™åµé¢çš„链接都是对该页é¢çš„一‹Æ¡æŠ•¼œ¨ï¼Œè¢«é“¾æŽ¥çš„­‘Šå¤šåQŒå°±æ„味ç€è¢«å…¶ä»–网站投¼œ¨è¶Šå¤šã€‚这个就是所谓的â€?/span>链接‹¹è¡Œåº?span lang="EN-US">â€â€”â€?/span>è¡¡é‡å¤šå°‘人愿æ„将他们的网站和你的¾|‘站挂钩ã€?span lang="EN-US">PageRank˜q™ä¸ªæ¦‚念引自学术中一½‹‡è®ºæ–‡çš„被引˜q°çš„频度—â€?/span>匙¢«åˆ«äh引述的次数越多,一般判断这½‹‡è®ºæ–‡çš„æƒå¨æ€§å°±­‘Šé«˜ã€?span lang="EN-US">

  Google有一套自动化æ–ÒŽ³•æ¥è®¡½Ž—这些投¼œ¨ã€?span lang="EN-US">Googleçš?span lang="EN-US">PageRank分å€ég»Ž0åˆ?span lang="EN-US">10åQ?span lang="EN-US">PageRankä¸?span lang="EN-US">10表示最佻I¼Œä½†éžå¸¸å°‘è§ï¼Œ¾cÖM¼¼é‡Œæ°éœ‡çñ”åQ?span lang="EN-US">Richter scaleåQ‰ï¼ŒPageRank¾U§åˆ«ä¹Ÿä¸æ˜¯çº¿æ€§çš„åQŒè€Œæ˜¯æŒ‰ç…§ä¸€¿U指数刻度。这是一¿U奇特的数学术语åQŒæ„æ€æ˜¯PageRank4䏿˜¯æ¯?span lang="EN-US">PageRank3好一¾U?span lang="EN-US">—â€?/span>而å¯èƒ½ä¼šå¥?span lang="EN-US">6åˆ?span lang="EN-US">7å€ã€‚因此,一ä¸?span lang="EN-US">PageRank5的网™åµå’ŒPageRank8的网™åµä¹‹é—´çš„å·®è·ä¼šæ¯”ä½ å¯èƒ½è®¤ä¸ºçš„è¦å¤§çš„多ã€?span lang="EN-US">

  PageRank较高的页é¢çš„æŽ’åå¾€å¾€è¦æ¯”PageRank较低的页é¢é«˜åQŒè€Œè¿™å¯ÆD‡´äº†äh们对链接的瀙ì”。在整个SEO½C‘ÖŒºåQŒäh们忙于争夺ã€äº¤æ¢ç”šè‡³é”€å”®é“¾æŽ¥ï¼Œå®ƒæ˜¯˜q‡å޻几年æ¥äh们关注的焦点åQŒä»¥è‡³äºŽGoogle修改了他的系¾lŸï¼Œòq¶å¼€å§‹æ”¾å¼ƒæŸäº›ç±»åž‹çš„链接。比如,被äh们广泛接å—的一æ¡è§„定,æ¥è‡ª¾~ÞZ¹å†…容çš?span lang="EN-US">“link farmâ€?/span>åQˆé“¾æŽ¥å·¥åŽ‚ï¼‰¾|‘站的链接将ä¸ä¼šæä¾›™åµé¢çš?span lang="EN-US">PageRankåQŒä»ŽPageRank较高的页é¢å¾—到链接但是内容ä¸ç›¸å…³åQˆæ¯”如说æŸä¸ª‹¹è¡Œçš„æ˜Oç”ÖM¹¦¾|‘站链接åˆîC¸€ä¸ªå‰è½¦è§„范页é¢ï¼‰åQŒä¹Ÿä¸ä¼šæä¾›™åµé¢çš?span lang="EN-US">PageRankã€?span lang="EN-US">Google选择é™ä½Žäº?span lang="EN-US">PageRankå¯ÒŽ›´æ–°é¢‘率,以便ä¸é¼“åŠ×ƒh们䏿–­çš„对其˜q›è¡Œç›‘测ã€?span lang="EN-US">

  Google PageRank一般一òq´æ›´æ–°å››‹Æ¡ï¼Œæ‰€ä»¥åˆšä¸Šçº¿çš„æ–°¾|‘ç«™ä¸å¯èƒ½èŽ·å¾?span lang="EN-US">PR倹{€‚你的网站很å¯èƒ½åœ¨ç›¸å½“长的时间里é¢çœ‹ä¸åˆ°PR值的å˜åŒ–åQŒç‰¹åˆ«æ˜¯ä¸€äº›æ–°çš„网站ã€?span lang="EN-US">PR值暂时没有,˜q™ä¸æ˜¯ä»€ä¹ˆä¸å¥½çš„事情åQŒè€å¿ƒ½{‰å¾…ž®±å¥½äº†ã€?span lang="EN-US">

  为您的网站获å–外部链接是一件好事,但是无视其他SEO领域的工作而进行急迫的链接å¾è®‘Ö°±æ˜¯æµªè´ÒŽ—¶é—ß_¼Œè¦æ—¶åˆÖM¿æŒä¸€ä¸ªæ•´ä½“æ€èµ\òq¶è®°ä½ä»¥ä¸‹å‡ ç‚¹ï¼š

  ·Google的排åç®—æ³•åÆˆä¸æ˜¯å®Œå…¨åŸÞZºŽå¤–部链接çš?span lang="EN-US">

  ·é«?span lang="EN-US">PageRankòq¶ä¸èƒ½ä¿è¯?span lang="EN-US">Google高排å?span lang="EN-US">

  ·PageRank值更新的比较慢,今天看到çš?span lang="EN-US">PageRank值å¯èƒ½æ˜¯ä¸‰ä¸ªæœˆå‰çš„å€?span lang="EN-US">

  因此我们ä¸é¼“励刻æ„的去追æ±?span lang="EN-US">PageRankåQŒå› ä¸ºå†³å®šæŽ’å的因素å¯ä»¥æœ‰ä¸Šç™„¡§ã€‚å°½½Ž¡å¦‚此,PageRank˜q˜æ˜¯ä¸€ä¸ªç”¨æ¥äº†è§?span lang="EN-US">Googleå¯ÒŽ‚¨çš„网站页é¢å¦‚何评ä»ïLš„相当好的指示åQŒå¾è®®ç½‘站设计者è¦å……分认识PageRankåœ?span lang="EN-US">Google判断¾|‘站质é‡ä¸­çš„é‡è¦ä½œç”¨åQŒä»Žè®¾è®¡å‰çš„è€ƒè™‘åˆ°åŽæœŸç½‘站更新都è¦ç»™äº?span lang="EN-US">PageRank­‘›_¤Ÿçš„分æžï¼Œå¾ˆå¥½çš„利用。我们覞®?span lang="EN-US">PageRank看作是一¿Uä¸šä½™çˆ±å¥½è€Œä¸æ˜¯ä¸€¿Uä¿¡ä»°ã€?span lang="EN-US">

  ---------------------------------------------------------------------------------------------------------------------

  通过对由­‘…过 50,000 万个å˜é‡å’?span lang="EN-US"> 20 äº¿ä¸ªè¯æ±‡¾l„æˆçš„æ–¹½E‹è¿›è¡Œè®¡½Ž—,PageRank 能够对网™å늚„é‡è¦æ€§åšå‡ºå®¢è§‚的评ä­hã€?span lang="EN-US">PageRank òq¶ä¸è®¡ç®—直接链接的数é‡ï¼Œè€Œæ˜¯ž®†ä»Ž¾|‘页 A 指呾|‘页 B çš„é“¾æŽ¥è§£é‡ŠäØ“ç”Þq½‘™å?span lang="EN-US"> A 对网™å?span lang="EN-US"> B 所投的一¼œ¨ã€‚è¿™æ øP¼ŒPageRank 会根æ®ç½‘™å?span lang="EN-US"> B 所收到的投¼œ¨æ•°é‡æ¥è¯„估该页的é‡è¦æ€§ã€?span lang="EN-US">

  此外åQ?span lang="EN-US">PageRank ˜q˜ä¼šè¯„ä¼°æ¯ä¸ªæŠ•票¾|‘页的é‡è¦æ€§ï¼Œå› äØ“æŸäº›¾|‘页的投¼œ¨è¢«è®¤äØ“å…ähœ‰è¾ƒé«˜çš„ä­hå€û|¼Œ˜q™æ ·åQŒå®ƒæ‰€é“¾æŽ¥çš„网™åµå°±èƒ½èŽ·å¾—è¾ƒé«˜çš„ä»·å€¹{€‚é‡è¦ç½‘™åµèŽ·å¾—çš„ PageRankåQˆç½‘™å‰|Ž’å)较高åQŒä»Žè€Œæ˜¾½Cºåœ¨æœçƒ¦¾l“果的顶部ã€?span lang="EN-US">Google 技术ä‹É用网上å馈的¾l¼åˆä¿¡æ¯æ¥ç¡®å®šæŸä¸ªç½‘™å늚„é‡è¦æ€§ã€‚æœç´¢ç»“果没有äh工干预或æ“纵åQŒè¿™ä¹Ÿæ˜¯ä¸ÞZ»€ä¹?span lang="EN-US"> Google 会æˆä¸ÞZ¸€ä¸ªå¹¿å—用户信赖ã€ä¸å—付è´ÒŽŽ’å媄å“ä¸”å…¬æ­£å®¢è§‚çš„ä¿¡æ¯æ¥æºã€?span lang="EN-US">

  åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQ?span lang="EN-US">

  其实½Ž€å•说ž®±æ˜¯æ°‘主表决。打个比方,å‡å¦‚æˆ‘ä»¬è¦æ‰¾æŽå¼€å¤åšå£«ï¼Œæœ‰ä¸€ç™¾ä¸ªäºÞZ‹D手说自己是æŽå¼€å¤ã€‚é‚£ä¹ˆè°æ˜¯çœŸçš„å‘¢åQŸä¹Ÿè®¸æœ‰å¥½å‡ ä¸ªçœŸçš„,但å³ä½¿å¦‚æ­¤è°åˆæ˜¯å¤§å®¶çœŸæ­£æƒÏx‰¾çš„å‘¢åQ?span lang="EN-US">:-) 如果大家都说åœ?span lang="EN-US"> Google å…¬å¸çš„那个是真的åQŒé‚£ä¹ˆä»–ž®±æ˜¯çœŸçš„ã€?span lang="EN-US">

  在互è”网上,如果一个网™åµè¢«å¾ˆå¤šå…¶å®ƒ¾|‘页所链接åQŒè¯´æ˜Žå®ƒå—到普é的承认和信赖åQŒé‚£ä¹ˆå®ƒçš„æŽ’å就高。这ž®±æ˜¯ Page Rank çš„æ ¸å¿ƒæ€æƒ³ã€?当然 Google çš?span lang="EN-US"> Page Rank ½Ž—法实际上è¦å¤æ‚得多。比如说åQŒå¯¹æ¥è‡ªä¸åŒ¾|‘页的链接对待ä¸åŒï¼Œæœ¬èín¾|‘页排å高的链接更å¯é ï¼ŒäºŽæ˜¯¾l™è¿™äº›é“¾æŽ¥äºˆè¾ƒå¤§çš„æƒé‡ã€?span lang="EN-US">Page Rank è€ƒè™‘äº†è¿™ä¸ªå› ç´ ï¼Œå¯æ˜¯çŽ°åœ¨é—®é¢˜åˆæ¥äº†ï¼Œè®¡ç®—æœçƒ¦¾l“果的网™å‰|Ž’å过½E‹ä¸­éœ€è¦ç”¨åˆ°ç½‘™å‰|œ¬íw«çš„æŽ’ååQŒè¿™ä¸æˆäº†å…ˆæœ‰é¸¡˜q˜æ˜¯å…ˆæœ‰è›‹çš„问题了å—åQ?span lang="EN-US">

  Google 的两个创始äh拉里·佩奇åQ?span lang="EN-US">Larry Page åQ‰å’Œè°¢å°”ç›?span lang="EN-US">·布林 (Sergey Brin) æŠŠè¿™ä¸ªé—®é¢˜å˜æˆäº†ä¸€ä¸ªäºŒ¾l´çŸ©é˜ëŠ›¸ä¹˜çš„问题åQŒåƈ且用˜q­ä»£çš„æ–¹æ³•解决了˜q™ä¸ªé—®é¢˜ã€‚他们先å‡å®šæ‰€æœ‰ç½‘™å늚„æŽ’åæ˜¯ç›¸åŒçš„åQŒåƈ且根æ®è¿™ä¸ªåˆå§‹å€û|¼Œ½Ž—出å„个¾|‘页的第一‹Æ¡è„P代排å,然åŽå†æ ¹æ®ç¬¬ä¸€‹Æ¡è„P代排å算出第二次的排å。他们两äºÞZ»Žç†è®ºä¸Šè¯æ˜Žäº†ä¸è®ºåˆå§‹å€¼å¦‚何选å–åQŒè¿™¿U算法都ä¿è¯äº†ç½‘™å‰|Ž’åçš„ä¼°è®¡å€ÆDƒ½æ”¶æ•›åˆîC»–们的真实倹{€‚值得一æçš„事,˜q™ç§½Ž—法是完全没有ä“Q何äh工干预的ã€?span lang="EN-US">

  ç†è®ºé—®é¢˜è§£å†³äº†ï¼Œåˆé‡åˆ°å®žé™…问题。因ä¸ÞZº’è”网上网™å늚„æ•°é‡æ˜¯å·¨å¤§çš„åQŒä¸Šé¢æåˆ°çš„二维矩阵从ç†è®ÞZ¸Šè®²æœ‰¾|‘页数目òqÏx–¹ä¹‹å¤šä¸ªå…ƒç´ ã€‚如果我们å‡å®šæœ‰å亿个网™åµï¼Œé‚£ä¹ˆ˜q™ä¸ªçŸ©é˜µž®±æœ‰ä¸€ç™¾äº¿äº¿ä¸ªå…ƒç´ ã€‚这样大的矩é˜ëŠ›¸ä¹˜ï¼Œè®¡ç®—釿˜¯éžå¸¸å¤§çš„。拉里和谢尔盖两人利用稀ç–矩阵计½Ž—的技巧,大大的简化了计算é‡ï¼Œòq¶å®žçŽîCº†˜q™ä¸ª¾|‘页排彎—法。今å¤?span lang="EN-US"> Google 的工½E‹å¸ˆæŠŠè¿™ä¸ªç®—法移æ¤åˆ°òq¶è¡Œçš„计½Ž—机中,˜q›ä¸€æ­¥ç¾ƒçŸ­äº†è®¡ç®—æ—‰™—´åQŒä‹É¾|‘页更新的周期比以å‰çŸ­äº†è®¸å¤šã€?span lang="EN-US">

ã€€ã€€æˆ‘æ¥ Google åŽï¼Œæ‹‰é‡Œ (Larry) 在和我们几个新员工åñ”谈时åQŒè®²èµ·ä»–当年和谢ž®”ç›–(Sergey) 是怎么惛_ˆ°¾|‘页排彎—法的。他è¯ß_¼š"当时我们觉得整个互蔾|‘å°±åƒä¸€å¼ å¤§çš„图 åQ?span lang="EN-US">Graph)åQŒæ¯ä¸ªç½‘站就åƒä¸€ä¸ªèŠ‚ç‚¹ï¼Œè€Œæ¯ä¸ªç½‘™å늚„链接ž®±åƒä¸€ä¸ªå¼§ã€‚我惻I¼Œäº’蔾|‘å¯ä»¥ç”¨ä¸€ä¸ªå›¾æˆ–者矩阉|˜qŽÍ¼Œæˆ‘也许å¯ä»¥ç”¨˜q™ä¸ªå‘现åšä¸ªåšå£«è®ºæ–‡ã€?span lang="EN-US">" 他和谢尔盖就˜q™æ ·å‘明äº?span lang="EN-US"> Page Rank 的算法ã€?span lang="EN-US">

  ¾|‘页排å的高明之处在于它把整个互è”网当作了一个整体对待。它无æ„识中½W¦åˆäº†ç³»¾lŸè®ºçš„è§‚ç‚V€‚相比之下,以å‰çš„ä¿¡æ¯æ£€ç´¢å¤§å¤šæŠŠæ¯ä¸€ä¸ªç½‘™åµå½“作独立的个体对待åQŒå¾ˆå¤šäh当åˆåªæ³¨æ„了¾|‘页内容和查询语å¥çš„相关性,忽略了网™åµä¹‹é—´çš„关系ã€?

  今天åQ?span lang="EN-US">Google æœçƒ¦å¼•擎比最åˆå¤æ‚ã€å®Œå–„了许多。但是网™å‰|Ž’å在 Google 所有算法中ä¾ç„¶æ˜¯è‡³å…³é‡è¦çš„。在学术ç•?span lang="EN-US">, ˜q™ä¸ª½Ž—æ³•è¢«å…¬è®¤äØ“æ˜¯æ–‡çŒ®æ£€ç´¢ä¸­æœ€å¤§çš„è´¡çŒ®ä¹‹ä¸€åQŒåÆˆä¸”è¢«å¾ˆå¤šå¤§å­¦å¼•å…¥äº†ä¿¡æ¯æ£€ç´¢è¯¾½E?span lang="EN-US"> (Information Retrieval) 的教½E‹ã€?

  如何æé«˜ä½ ç½‘™å늚„ PR å€û|¼Ÿ

  什么是PR值呢? PR值全¿UîCØ“PageRankåQ?span lang="EN-US">PR是英æ–?span lang="EN-US">Pagerank 的羃写åÅžå¼ï¼ŒPagerankå–自Google的创始ähLarryPageåQŒå®ƒæ˜?span lang="EN-US">Google排å˜q算法则åQˆæŽ’åå…¬å¼ï¼‰çš„一部分åQ?span lang="EN-US">Pagerankæ˜?span lang="EN-US">Google对网™åµé‡è¦æ€§çš„评估åQŒæ˜¯Google用æ¥è¡¡é‡ä¸€ä¸ªç½‘站的好å的唯一标准ã€?span lang="EN-US">PageRank(¾|‘页¾U§åˆ«)æ˜?span lang="EN-US">Google用于评测一个网™å?span lang="EN-US">â€?/span>é‡è¦æ€?span lang="EN-US">â€?/span>的一¿U方法。在æ‰åˆäº†è¯¸å¦?span lang="EN-US">Title标识å’?span lang="EN-US">Keywords标识½{‰æ‰€æœ‰å…¶å®ƒå› ç´ ä¹‹åŽï¼ŒGoogle通过PageRankæ¥è°ƒæ•´ç»“果,佉K‚£äº›æ›´å…?span lang="EN-US">â€?/span>é‡è¦æ€?span lang="EN-US">â€?/span>的网™åµåœ¨æœçƒ¦¾l“果中妾|‘站排å获得æå‡åQŒä»Žè€Œæé«˜æœç´¢ç»“果的相关性和质é‡ã€?span lang="EN-US"> PR值的¾U§åˆ«ä»?span lang="EN-US">1åˆ?span lang="EN-US">10¾U§ï¼Œ10¾U§äؓ满分ã€?span lang="EN-US">PR倯D¶Šé«˜è¯´æ˜Žè¯¥¾|‘页­‘Šå—‹Æ¢è¿Žã€?span lang="EN-US">Google把自å·Þqš„¾|‘ç«™çš?span lang="EN-US">PR值定åˆ?span lang="EN-US">10åQŒè¿™è¯´æ˜ŽGoogle˜q™ä¸ª¾|‘站是éžå¸¸å—‹Æ¢è¿Žçš„,也å¯ä»¥è¯´˜q™ä¸ª¾|‘ç«™éžå¸¸é‡è¦ã€?span lang="EN-US">Google大å—é’ççš„å¦ä¸€ä¸ªåŽŸå› å°±æ˜¯å®ƒçš„ç½‘ç«™çƒ¦å¼•é€Ÿåº¦ã€‚å‘Googleæäº¤ä½ çš„¾|‘站直到ä¸?span lang="EN-US">Google收录åQŒä¸€èˆ¬åªéœ€ä¸¤ä¸ªæ˜ŸæœŸã€‚如果你的网站已¾l䨓Google收录åQŒé‚£ä¹ˆé€šå¸¸Googleä¼šæ¯æœˆä¸€‹Æ¡é历和更新(釿–°ç´¢å¼•)ä½ çš„¾|‘站信æ¯ã€‚丘q‡å¯¹äºŽé‚£äº?span lang="EN-US">PRå€?span lang="EN-US">(Pagerank)较高的网站,Google索引周期会相应的短一些。一ä¸?span lang="EN-US">PRå€égØ“1的网站表明这个网站ä¸å¤ªå…·æœ‰æµè¡Œåº¦åQŒè€?span lang="EN-US">PRå€égØ“7åˆ?span lang="EN-US">10则表明这个网站éžå¸¸å—‹Æ¢è¿Žã€?span lang="EN-US">PRå€¼æœ€é«˜äØ“10åQŒä¸€èˆ?span lang="EN-US">PR倯D¾¾åˆ?span lang="EN-US">4åQŒå°±½Ž—是一个ä¸é”™çš„¾|‘站了。那ä¹?span lang="EN-US">PR值都å—那些因素媄å“å‘¢åQŸä¸‹é¢æˆ‘们一èµäh¥çœ‹çœ‹ã€?span lang="EN-US">

  ½W¬ä¸€åQšç½‘站外部链接的数é‡å’Œè´¨é‡?span lang="EN-US">

  在计½Ž—ç½‘ç«™æŽ’åæ—¶åQ?span lang="EN-US">Pagerank会将¾|‘站的外部链接数考虑˜q›åŽ»ã€‚åÆˆä¸èƒ½è¯´ä¸€ä¸ªç½‘站的外部链接数越多其PR值就­‘Šé«˜åQŒå¦‚果这æ ïLš„è¯ï¼Œä¸€ä¸ªç½‘站尽å¯èƒ½èŽ·å¾—æœ€å¤šçš„å¤–éƒ¨é“¾æŽ¥ž®?span lang="EN-US">OK了,有这¿U想法是错误的ã€?span lang="EN-US">Google对一个网站上的外部链接数的é‡è§†ç¨‹åº¦åÆˆä¸æ„味ç€ä½ å› æ­¤å¯ä»¥ä¸æ±‚策略地与ä“Q何网站å¾ç«‹è¿žæŽ¥ã€‚这是因ä¸?span lang="EN-US">Googleòq¶ä¸æ˜¯ç®€å•地ç”Þp®¡½Ž—网站的外部链接数æ¥å†›_®šå…¶ç­‰¾U§ã€?span lang="EN-US">Googleçš?span lang="EN-US">Pagerank¾pÈ»Ÿä¸å•考虑一个网站的外部链接质é‡åQŒä¹Ÿä¼šè€ƒè™‘å…¶æ•°é‡ã€‚这个问题看æ¥å¾ˆæœ‰å¤æ‚。首先让我们æ¥è§£é‡Šä¸€ä¸‹ä»€ä¹ˆæ˜¯é˜Õd°¼å› æ•°(damping factor)。阻ž®¼å› ç´ å°±æ˜¯å½“你投¼œ¨æˆ–链接到å¦å¤–一个站ç‚ÒŽ—¶æ‰€èŽ·å¾—çš„å®žé™?span lang="EN-US">PR分倹{€‚阻ž®¼å› æ•îC¸€èˆ¬æ˜¯0.85。当然比起你¾|‘站的实é™?span lang="EN-US">PRå€û|¼Œå®ƒå°±æ˜‘Ö¾—微中‘³é“了ã€?

  现在让我们æ¥çœ‹çœ‹˜q™ä¸ªPR分值的计算公å¼åQ?span lang="EN-US">PR(A)=(1-d)+d(PR(t1)/C(t1)+...+PR(tn)/C(tn)) å…¬å¼è§£é‡ŠåQšå…¶ä¸?span lang="EN-US">PR(A)表示的是从一个外部链接站ç‚?span lang="EN-US">t1ä¸Šï¼Œä¾æ®Pagerank?¾pÈ»Ÿ¾l™ä½ çš„网站所增加çš?span lang="EN-US">PR分å€û|¼›PR(t1)表示该外部链接网站本íw«çš„PR分å€û|¼›C(t1)则表½Cø™¯¥å¤–部链接站点所拥有的外部链接数é‡ã€‚大家è¦è°¨è®°åQšä¸€ä¸ªç½‘站的投票æƒå€¼åªæœ‰è¯¥¾|‘ç«™PR分值的0.85åQ?

  那么åQŒæ˜¯ä¸æ˜¯è¯´å¯¹ä¸€ä¸ªç½‘站而言åQŒå®ƒæ‰€æ‹¥æœ‰çš„较高网站质é‡å’Œè¾ƒé«˜PR分值的外部链接数釭‘Šå¤šž®Þp¶Šå¥½å‘¢åQŸé”™åQŒå› ä¸ºï¼Googleçš?span lang="EN-US">Pagerank¾pÈ»Ÿä¸å•考虑一个网站的外部链接质é‡åQŒä¹Ÿä¼šè€ƒè™‘å…¶æ•°é‡?span lang="EN-US">.比方è¯ß_¼Œå¯¹ä¸€ä¸ªæœ‰ä¸€å®?span lang="EN-US">PR值的¾|‘ç«™Xæ¥è¯´åQŒå¦‚果你的网ç«?span lang="EN-US">Y是它的唯一一个外部链接,那么Googlež®Þq›¸ä¿¡ç½‘ç«?span lang="EN-US">Xž®†ä½ çš„网ç«?span lang="EN-US">Y视åšå®ƒæœ€å¥½çš„一个外部链接,从而会¾l™ä½ çš„网ç«?span lang="EN-US">Y更多的分倹{€‚坿˜¯ï¼Œå¦‚æžœ¾|‘ç«™X上已¾l有49个外部链接,那么Googlež®Þq›¸ä¿¡ç½‘ç«?span lang="EN-US">Xåªæ˜¯ž®†ä½ çš„网站视åšå®ƒ½W?span lang="EN-US">50个好的网站。因而你的外部链接站点上的外部链接数­‘Šå¤šåQŒä½ æ‰€èƒ½å¤Ÿå¾—到çš?span lang="EN-US">PR分值å而会­‘Šä½ŽåQŒå®ƒä»¬å‘ˆå比关系ã€?span lang="EN-US">

  说它å¯ÒŽ˜¯å› äØ“åQ一般情况下åQŒä¸€ä¸?span lang="EN-US">PR分值大于等äº?span lang="EN-US">6çš„å¤–éƒ¨é“¾æŽ¥ç«™ç‚¹ï¼Œå¯æ˜¾è‘—æå‡ä½ çš?span lang="EN-US">PR分倹{€‚但如果˜q™ä¸ªå¤–éƒ¨é“¾æŽ¥ç«™ç‚¹å·²ç»æœ?span lang="EN-US">100个其它的外部链接æ—Óž¼Œé‚£ä½ èƒ½å¤Ÿå¾—到çš?span lang="EN-US">PRåˆ†å€¼å°±å‡ ä¹Žä¸ºé›¶äº†ã€‚åŒæ øP¼Œå¦‚果一个外部链接站点的PRå€ég»…ä¸?span lang="EN-US">2åQŒä½†ä½ å´æ˜¯å®ƒçš„唯一一个外部链接,那么你所获得çš?span lang="EN-US">PR倯D¦˜qœè¿œå¤§äºŽé‚£ä¸ªPRå€égØ“6åQŒå¤–部链接数ä¸?span lang="EN-US">100的网站ã€?

  而且˜q™ä¸ª0.85çš„æƒå€¼åã^å‡åˆ†é…给光™“¾æŽ¥çš„æ¯ä¸ªå¤–éƒ¨¾|‘ç«™ã€?

  ½W¬äºŒåQ?span lang="EN-US">Google在你的网站抓å–çš„™åµé¢æ•?span lang="EN-US">

  Google在你的网站抓å–çš„™åµé¢æ•ŽÍ¼Œæ•°ç›®­‘Šå¤šåQ?span lang="EN-US">Pagerank倯D¶Šé«˜ã€‚但通常Googleòq¶ä¸ä¼šä¸»åŠ¨æŠ“å–你的网站的所有页é¢ï¼Œž®¤å…¶æ˜¯ç½‘å€é‡Œå¸¦æœ?span lang="EN-US">â€?â€?/span>的动æ€é“¾æŽ¥ï¼ŒGoogleä¸ä¸»åŠ¨ï¼Œé‚£å°±è¦æˆ‘们主动了åQŒæœ€½W¨çš„办法是把¾|‘站所有的™åµé¢éƒ½æäº¤ç»™GoogleåQŒä½†æˆ‘想没有è°çœŸä¼šè¿™ä¹ˆåšåQŒä½†™åµé¢ä¸å¤šçš„è¯å¯ä»¥è¯•è¯•ã€‚æ›´å¥½çš„åŠžæ³•æ˜¯åˆ¶ä½œä¸€ä¸ªé™æ€?span lang="EN-US">Html™åµé¢åQŒé€šå¸¸è¢«ç§°ä½?span lang="EN-US">â€?/span>¾|‘站地图â€?/span>æˆ?span lang="EN-US">â€?/span>¾|‘ç«™å¯ÆDˆªâ€?/span>åQŒå®ƒé‡Œé¢åŒ…å«ä½ è¦æ·ÕdŠ çš„æ‰€æœ‰ç½‘å€åQŒç„¶åŽæŠŠ˜q™ä¸ªé™æ€é¡µé¢æäº¤ç»™Googleã€?span lang="EN-US">

  ½W¬ä¸‰åQšç½‘站被世界三大知å¾|‘ç«™ DMOZåQ?span lang="EN-US">Yahooå’?span lang="EN-US">Looksmart 收录

  众所周知åQ?span lang="EN-US">Googleçš?span lang="EN-US">Pagerank¾pÈ»Ÿå¯šw‚£äº›é—¨æˆïL½‘¾lœç›®å½•如DMOZåQ?span lang="EN-US">Yahooå’?span lang="EN-US">Looksmartž®¤äؓ器é‡ã€‚特别是å¯?span lang="EN-US">DMOZ。一个网站上çš?span lang="EN-US">DMOZ链接å¯?span lang="EN-US">Googleçš?span lang="EN-US">Pagerank?æ¥è¯´åQŒå°±å¥½åƒä¸€å—金å­ä¸€æ ïLè´üc€‚å¦‚æžœä½ çš„ç½‘ç«™äØ“ODP收录åQŒåˆ™å¯æœ‰æ•ˆæå‡ä½ çš„页é¢ç­‰¾U§ã€‚å‘ODPæäº¤ä½ çš„站点òq¶äؓ它收录,其实òq¶ä¸æ˜¯ä¸€ä»‰™š¾äº‹ï¼Œåªæ˜¯è¦å¤šèŠÞq‚¹æ—‰™—´è€Œå·²ã€‚åªè¦ç¡®ä¿ä½ çš„网站æä¾›äº†è‰¯å¥½çš„内容,然åŽåœ?span lang="EN-US">ODPåˆé€‚的目录下点å‡?span lang="EN-US">"增加站点"åQŒæŒ‰ç…§æ½CÞZ¸€æ­¥æ­¥æ¥å°±OK了。至ž®‘è¦ä¿è¯ä½ çš„索引™å?span lang="EN-US">(INDEX PAGE)被收录进厅R€‚所以,如果你的¾|‘站内容涉åŠå®Œå…¨ä¸åŒçš„几å—内容,你å¯ä»¥æŠŠæ¯ä¸ªå†…容的网™åµåˆ†åˆ«å‘ODPæäº¤åQ丘q‡è¯·è®îC½"‹Æ²é€Ÿåˆ™ä¸è¾¾"。等åˆ?span lang="EN-US">Google对其目录更新åŽï¼Œä½ å°±èƒ½çœ‹åˆîC½ çš?span lang="EN-US">PRå€ég¼šæœ‰ä»€ä¹ˆå˜åŒ–äº†ã€‚å¦‚æžœä½ çš„ç½‘ç«™äØ“Yahooå’?span lang="EN-US">Looksmart所收录åQŒé‚£ä¹ˆä½ çš?span lang="EN-US">PRå€ég¼šå¾—到显著æå‡ã€‚如果你的网站是éžå•†ä¸šæ€§è´¨çš„æˆ–几乎完全是éžå•†ä¸šæ€§è´¨çš„内容,那么你å¯ä»¥é€šè¿‡zeall.comä½¿ä½ çš„ç½‘ç«™äØ“è‘—å的网¾lœç›®å½?span lang="EN-US">Looksmart所收录ã€?span lang="EN-US">Looksmart也是ä»?span lang="EN-US">Zeal¾|‘络目录获得éžå•†ä¸šæœç´¢åˆ—表ã€?

  Google PR值的更新周期是多长时é—ß_¼Ÿ

  一般情况下PR值更新的周期æ˜?span lang="EN-US">2.5ï½?span lang="EN-US">3个月åQ最˜q‘一‹Æ?span lang="EN-US">PRæ›´æ–°æ˜?span lang="EN-US">2008òq?span lang="EN-US">1月中旬ã€?

  PageRank相关½Ž—法æ€È»“åQ?span lang="EN-US">

  1.PageRank

ã€€ã€€åŸºæœ¬æ€æƒ³åQšå¦‚果网™å?span lang="EN-US">T存在一个指å‘网™å?span lang="EN-US">A的连接,则表æ˜?span lang="EN-US">T的所有者认ä¸?span lang="EN-US">A比较é‡è¦åQŒä»Žè€ŒæŠŠT的一部分é‡è¦æ€§å¾—分赋äº?span lang="EN-US">A。这个é‡è¦æ€§å¾—分å€égØ“åQ?span lang="EN-US">PRåQ?span lang="EN-US">TåQ?span lang="EN-US">/C(T)

  其中PRåQ?span lang="EN-US">TåQ‰äØ“Tçš?span lang="EN-US">PageRankå€û|¼ŒC(T)ä¸?span lang="EN-US">T的出链数åQŒåˆ™Açš?span lang="EN-US">PageRankå€égؓ一¾pÕdˆ—¾cÖM¼¼äº?span lang="EN-US">T的页é¢é‡è¦æ€§å¾—分值的累加ã€?span lang="EN-US">

  优点åQšæ˜¯ä¸€ä¸ªä¸ŽæŸ¥è¯¢æ— å…³çš„é™æ€ç®—法,所有网™å늚„PageRank值通过¼›Èº¿è®¡ç®—获得åQ›æœ‰æ•ˆå‡ž®‘在¾U¿æŸ¥è¯¢æ—¶çš„计½Ž—é‡åQŒæžå¤§é™ä½Žäº†æŸ¥è¯¢å“应旉™—´ã€?span lang="EN-US">

  ä¸èƒöåQšäh们的查询å…ähœ‰ä¸»é¢˜ç‰¹å¾åQ?span lang="EN-US">PageRank忽略了主题相å…Ïx€§ï¼Œå¯ÆD‡´¾l“果的相å…Ïx€§å’Œä¸»é¢˜æ€§é™ä½Žï¼›å¦å¤–åQ?span lang="EN-US">PageRank有很严é‡çš„对新网™å늚„歧视ã€?span lang="EN-US">

  2.Topic-Sensitive PageRankåQˆä¸»é¢˜æ•感的PageRankåQ?span lang="EN-US">

ã€€ã€€åŸºæœ¬æ€æƒ³åQšé’ˆå¯?span lang="EN-US">PageRank对主题的忽略而æå‡ºã€‚æ ¸å¿ƒæ€æƒ³åQšé€šè¿‡¼›Èº¿è®¡ç®—å‡ÞZ¸€ä¸?span lang="EN-US">PageRankå‘é‡é›†åˆåQŒè¯¥é›†åˆä¸­çš„æ¯ä¸€ä¸ªå‘é‡ä¸ŽæŸä¸€ä¸»é¢˜ç›¸å…³åQŒå³è®¡ç®—æŸä¸ª™åµé¢å…³äºŽä¸åŒä¸»é¢˜çš„得分。主è¦åˆ†ä¸ÞZ¸¤ä¸ªé˜¶ŒDµï¼šä¸»é¢˜ç›¸å…³çš?span lang="EN-US">PageRankå‘é‡é›†åˆçš„计½Ž—和在线查询时主题的¼‹®å®šã€?span lang="EN-US">

  优点åQšæ ¹æ®ç”¨æˆïLš„æŸ¥è¯¢è¯äh±‚和相关上下文判断用户查询相关的主题(用户的兴­‘£ï¼‰˜q”回查询¾l“果准确性高ã€?span lang="EN-US">

  ä¸èƒöåQšæ²¡æœ‰åˆ©ç”¨ä¸»é¢˜çš„ç›¸å…³æ€§æ¥æé«˜é“¾æŽ¥å¾—åˆ†çš„å‡†¼‹®æ€§ã€?span lang="EN-US">

  3.Hilltop

ã€€ã€€åŸºæœ¬æ€æƒ³åQšä¸ŽPageRankçš„ä¸åŒä¹‹å¤„:仅考虑专家™åµé¢çš„链接。主è¦åŒ…括两个步骤:专家™åµé¢æœçƒ¦å’Œç›®æ ‡é¡µé¢æŽ’åºã€?span lang="EN-US">

  优点åQšç›¸å…Ïx€§å¼ºåQŒç»“果准¼‹®ã€?span lang="EN-US">

  ä¸èƒöåQšä¸“安™¡µé¢çš„æœçƒ¦å’Œç¡®å®šå¯¹½Ž—法起关键作用,专家™åµé¢çš„è´¨é‡å†³å®šäº†½Ž—法的准¼‹®æ€§ï¼Œè€Œä¸“安™¡µé¢çš„è´¨é‡å’Œå…¬òqÏx€§éš¾ä»¥ä¿è¯ï¼›å¿½ç•¥äº†å¤§é‡éžä¸“å®¶™åµé¢çš„媄å“,ä¸èƒ½å应整个Internet的民æ„;当没有èƒö够的专家™åµé¢å­˜åœ¨æ—Óž¼Œ˜q”回½Iºï¼Œæ‰€ä»?span lang="EN-US">Hilltop适åˆå¯¹äºŽæŸ¥è¯¢æŽ’庘q›è¡Œæ±‚ç²¾ã€?span lang="EN-US">

  那么影å“google PageRank的因素有哪些å‘?span lang="EN-US">?

  1 ä¸?span lang="EN-US">pr高的¾|‘ç«™åšé“¾æŽ?span lang="EN-US">:

  2 内容质é‡é«˜çš„¾|‘站链接

  3加入æœçƒ¦å¼•擎分类目录

  4 加入å…费开æºç›®å½?span lang="EN-US">

  5 你的链接出现在æµé‡å¤§ã€çŸ¥å度高ã€é¢‘¾Jæ›´æ–°çš„é‡è¦¾|‘ç«™ä¸?span lang="EN-US">

  6googleå¯?span lang="EN-US">DPFæ ¼å¼çš„æ–‡ä»¶æ¯”较看é‡ã€?span lang="EN-US">

  7安装Google工具æ?span lang="EN-US">

  8域åå’?span lang="EN-US">tilte标题出现关键è¯ä¸Žmeta标签½{?span lang="EN-US">

  9å员qžæŽ¥æ•°é‡å’Œåå‘连接的½{‰çñ”

  10GoogleæŠ“å–æ‚¨ç½‘站的™åµé¢æ•°é‡

  11导出链接数é‡

  PageRank¿U‘学排åéæ­¢å…³é”®å­—垃åœ?span lang="EN-US">

  目å‰åQŒäº”花八门的¾|‘ç«™ä¸ÞZº‰å¤ºç½‘上排åé‡‡ç”¨æ¶æ„点å‡Õd’Œè¾“入关键字垃圄¡š„手段æ¥å¸å¼•网民的眼çƒåQŒæ— è®ºå¯¹äºŽäº’è”网ä¼ä¸š˜q˜æ˜¯äº’蔾|‘ç”¨æˆøP¼Œ˜q™éƒ½ä¸æ˜¯ä¸€ä¸ªå¥½çŽ°è±¡ã€?span lang="EN-US">

  ä¸ÞZº†è§£å†³˜q™æ ·çš„问题,Google 创始äºÞZ¹‹ä¸€æ‹‰é‡Œ.佩奇åQ?span lang="EN-US">Larry PageåQ‰å‘明了一¿Uç®—æ³?span lang="EN-US">PageRankåQŒæ˜¯ç”±æœç´¢å¼•擎根æ®ç½‘™åµä¹‹é—´ç›¸äº’çš„­‘…链接进行计½Ž—çš„¾|‘页排å。它¾l常和æœç´¢å¼•擎优化有兟ë€?span lang="EN-US">PageRank ¾pÈ»Ÿç›®å‰è¢?span lang="EN-US">Google 用æ¥ä½“现¾|‘页的相å…Ïx€§å’Œé‡è¦æ€§ï¼Œä»¥ä¾¿¿U‘学排ååQŒé止关键字垃圾ã€?span lang="EN-US">

  PageRank˜q™ä¸ªæ¦‚念引自一½‹‡å­¦æœ¯è®ºæ–‡çš„被媒体è{载的频度åQŒä¸€èˆ¬è¢«è½¬è²çš„æ¬¡æ•°è¶Šå¤šï¼Œ˜q™ç¯‡è®ºæ–‡çš„æƒå¨æ€§å°±­‘Šé«˜åQŒä­hå€ég¹Ÿž®Þp¶Šé«˜ã€?span lang="EN-US">PageRankæ˜?span lang="EN-US">1998òq´åœ¨æ–¯å¦¼›å¤§å­¦é—®ä¸–çš„åQ?span lang="EN-US">2001

  òq?span lang="EN-US">9 月被授予¾ŸŽå›½ä¸“利。如今它åœ?span lang="EN-US"> Google 所有算法中ä¾ç„¶æ˜¯è‡³å…³é‡è¦çš„。在学术ç•?span lang="EN-US">, ˜q™ä¸ª½Ž—æ³•è¢«å…¬è®¤äØ“æ˜¯æ–‡çŒ®æ£€ç´¢ä¸­æœ€å¤§çš„è´¡çŒ®ä¹‹ä¸€åQŒåÆˆä¸”è¢«å¾ˆå¤šå¤§å­¦å¼•å…¥äº†ä¿¡æ¯æ£€ç´¢è¯¾½E?span lang="EN-US">(Information Retrieval) 的教½E‹ã€?span lang="EN-US">

  PageRank 通过对由­‘…过 5 亿个å˜é‡å’?span lang="EN-US"> 20 äº¿ä¸ªè¯æ±‡¾l„æˆçš„æ–¹½E‹è¿›è¡Œè®¡½Ž—,能科学公正地标识¾|‘页的等¾U§æˆ–é‡è¦æ€§ã€?span lang="EN-US">PR¾U§åˆ«ä¸?span lang="EN-US">1åˆ?span lang="EN-US">10åQ?span lang="EN-US">PR倯D¶Šé«˜è¯´æ˜Žè¯¥¾|‘页­‘Šé‡è¦ã€‚例如:一ä¸?span lang="EN-US">PR å€égØ“1 的网站表明这个网站ä¸å¤ªå…·æœ‰æµè¡Œåº¦åQŒè€?span lang="EN-US">PR å€égØ“7åˆ?span lang="EN-US">10则表明这个网站æžå…‰™‡è¦ã€?span lang="EN-US">PageRank¾U§åˆ«ä¸æ˜¯ä¸€èˆ¬çš„½Ž—术¾U§æ•°åQŒè€Œæ˜¯æŒ‰ç…§ä¸€¿U几何çñ”æ•°æ¥åˆ’分的ã€?span lang="EN-US">PageRank3 䏿˜¯æ¯?span lang="EN-US">PageRank2 好一¾U§ï¼Œè€Œå¯èƒ½ä¼šå¥½åˆ°æ•°å€ã€?span lang="EN-US">

  PageRankæ ÒŽ®¾|‘站的外部链接和内部链接的数é‡å’Œè´¨é‡æ¥è¡¡é‡ç½‘站的价倹{€?span lang="EN-US">PageRank的概忉|˜¯åQŒæ¯ä¸ªåˆ°™åµé¢çš„链接都是对该页é¢çš„一‹Æ¡æŠ•¼œ¨ï¼Œè¢«é“¾æŽ¥å¾—­‘Šå¤šåQŒå°±æ„味ç€è¢«å…¶ä»–网站投¼œ¨è¶Šå¤šã€?span lang="EN-US">Google 有一套自动化æ–ÒŽ³•æ¥è®¡½Ž—这些投¼œ¨ï¼Œä½?span lang="EN-US">Google 的排å算法ä¸å®Œå…¨åŸÞZºŽå¤–部链接ã€?span lang="EN-US">PageRank å¯ÒŽ¥è‡ªä¸åŒç½‘™å늚„链接会区别对待,æ¥è‡ª¾|‘页本èín排å高的链接更å—é’çåQŒç»™˜q™äº›é“¾æŽ¥æœ‰è¾ƒå¤§çš„æƒé‡ã€?span lang="EN-US">

ã€€ã€€åŒæ—¶åQ?span lang="EN-US">Google ä¸åªæ˜¯çœ‹ä¸€ä¸ªç½‘站的投票数é‡åQŒæˆ–者这个网站的外部链接数é‡ã€‚它会对那些投票的网站进行分æžã€‚如果这些网站的PR 值比较高åQŒåˆ™å…¶æŠ•¼œ¨çš„¾|‘ç«™å¯ä»Žä¸­å—益。因此,Google 的技术专家æé†’äh们,在å¾è®„¡½‘站的外部链接æ—Óž¼Œåº”å°½å¯èƒ½çž„准那些PR 值高且外部链接数åˆå°‘的网站。这æ ïLš„外部链接站点­‘Šå¤šåQŒä½ çš?span lang="EN-US">PR 值就会越高,从而ä‹Éå¾—ä½ çš?span lang="EN-US">Google 排å得到显著æå‡ã€?span lang="EN-US">

  PageRankçš„å¦ä¸€ä½œç”¨æ˜¯å¯¹å…³é”®å­—垃圾è“v到巨大的é制作用。眼下,一些垃圄¡½‘ç«™äØ“äº†æé«˜ç‚¹å‡ÈއåQŒç”¨ä¸€äº›ä¸Žç«™ç‚¹å†…容无关的关键字垃圾壮声å¨ï¼Œæ¯”如用明星的åå­—ã€ç”¨å…¬å…±½H?span lang="EN-US">

  å‘事件称谓等。这些网™å늚„目的或是ä¸ÞZº†éª—å–òq¿å‘Šç‚¹å‡»åQŒæˆ–æ˜¯äØ“äº†ä¼ æ’­ç—…æ¯’ã€‚è¿˜æœ‰ä¸€äº›æ— èµ–å¼çš„åšå®¢è¯„è®ÞZ¹Ÿä»Žä¸­æ…å±€åQŒåœ¨¾|‘上招摇˜q‡å¸‚åQŒéª—å–网民的注æ„力,˜q™ä¹Ÿè¢«ç½‘¾lœæŠ€æœ¯ähå‘?span lang="EN-US">

ã€€ã€€è§†äØ“åžƒåœ¾ã€?span lang="EN-US">

  PageRankç›®å‰ä½¿ç”¨ä¸€¿U基于信ä»Õd’Œåèª‰çš„ç®—æ³•å¸®åŠ©éæ­¢å…³é”®å­—垃圾åQŒå®ƒå¿½è§†˜q™äº›å…³é”®å­—垃圄¡š„存在åQŒä»¥¾|‘é¡µç›æ€º’链接评çñ”别论高低ã€?span lang="EN-US">Google 排å之所以大å—追æ§ï¼Œæ˜¯ç”±äºŽå®ƒòq‰™ž

  åªä‹Éç”¨å…³é”®å­—æˆ–ä»£ç†æœç´¢æŠ€æœ¯ï¼Œ 而是ž®†è‡ªíw«å¾ç«‹åœ¨é«˜çñ”的网™åëŠñ”别技术基¼‹€ä¹‹ä¸Šã€?别的æœçƒ¦å¼•擎æä¾›¾l™æœç´¢è€…的是多¿U渠é“å€égØ“ 8 的网站信æ¯å¾—æ¥çš„一个粗略的æœçƒ¦¾l“æžœåQŒè€?span lang="EN-US">Google æä¾›¾l™å®ƒçš„æœç´¢è€…çš„åˆ™æ˜¯å®ƒè‡ªå·×ƒñ”生的高度¾_„¡¡®çš„æœç´¢ç»“æžœã€‚è¿™ž®±æ˜¯ä¸ÞZ»€ä¹ˆç½‘站管ç†å‘˜ä¼šåƒæ–¹ç™¾è®¡åŽ»æé«˜è‡ªå·±¾|‘ç«™åœ?span lang="EN-US">Google 的排å了ã€?span lang="EN-US">

  PageRank一般一òq´æ›´æ–°å››‹Æ¡ï¼Œæ‰€ä»¥åˆšä¸Šçº¿çš„æ–°¾|‘ç«™ä¸å¯èƒ½èŽ·å¾?span lang="EN-US">PR 倹{€‚丘q?span lang="EN-US">PR 值暂时没有,òq¶ä¸æ˜¯ä»€ä¹ˆä¸å¥½çš„事情åQŒè€å¿ƒ½{‰å¾…ž®Þpƒ½å¾—到Google çš„é’çã€?/span>



]]>
OpenID使用手册http://www.shnenglu.com/woaidongmao/archive/2009/01/05/71185.html肥仔肥仔Sun, 04 Jan 2009 16:18:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2009/01/05/71185.htmlhttp://www.shnenglu.com/woaidongmao/comments/71185.htmlhttp://www.shnenglu.com/woaidongmao/archive/2009/01/05/71185.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/71185.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/71185.html阅读全文

]]>
深度优先æœçƒ¦å’Œå¹¿åº¦ä¼˜å…ˆæœç´?/title><link>http://www.shnenglu.com/woaidongmao/archive/2009/01/04/71164.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Sun, 04 Jan 2009 13:03:00 GMT</pubDate><guid>http://www.shnenglu.com/woaidongmao/archive/2009/01/04/71164.html</guid><wfw:comment>http://www.shnenglu.com/woaidongmao/comments/71164.html</wfw:comment><comments>http://www.shnenglu.com/woaidongmao/archive/2009/01/04/71164.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/woaidongmao/comments/commentRss/71164.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/woaidongmao/services/trackbacks/71164.html</trackback:ping><description><![CDATA[<table class="MsoNormalTable" style="width: 100%; mso-cellspacing: 0cm; mso-padding-alt: 0cm 0cm 0cm 0cm" cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr style="height: 64.5pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes"> <td style="padding-right: 0cm; padding-left: 0cm; padding-bottom: 0cm; width: 425.45pt; padding-top: 0cm; height: 64.5pt" valign="top" width="567"> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">ä¸€ã€æ·±åº¦ä¼˜å…ˆæœç´?span lang="EN-US"> <br>    </span>深度优先æœçƒ¦ž®±æ˜¯åœ¨æœç´¢æ ‘çš„æ¯ä¸€å±‚å§‹¾lˆå…ˆåªæ‰©å±•一个å­èŠ‚ç‚¹åQŒä¸æ–­åœ°å‘纵深剘q›ç›´åˆîC¸èƒ½å†å‰è¿›åQˆåˆ°è¾‘Ö¶å­èŠ‚ç‚ÒŽˆ–å—到深度é™åˆ¶åQ‰æ—¶åQŒæ‰ä»Žå½“å‰èŠ‚ç‚¹è¿”å›žåˆ°ä¸Šä¸€¾U§èŠ‚ç‚¹ï¼Œæ²¿å¦ä¸€æ–¹å‘åˆç‘ô¾l­å‰˜q›ã€‚è¿™¿U方法的æœçƒ¦æ ‘是从树根开始一æžä¸€æžé€æ¸å½¢æˆçš„ã€?<span lang="EN-US"><br><br>      </span>深度优先æœçƒ¦äº¦ç§°ä¸ºçºµå‘æœç´¢ã€‚由于一个有解的问题树å¯èƒ½å«æœ‰æ— ½I·åˆ†æžï¼Œæ·±åº¦ä¼˜å…ˆæœçƒ¦å¦‚果误入无穷分æžåQˆå³æ·±åº¦æ— é™åQ‰ï¼Œåˆ™ä¸å¯èƒ½æ‰‘Öˆ°ç›®æ ‡èŠ‚ç‚¹ã€‚æ‰€ä»¥ï¼Œæ·±åº¦ä¼˜å…ˆæœçƒ¦½{–略是ä¸å®Œå¤‡çš„。å¦å¤–,应用此策略得到的解ä¸ä¸€å®šæ˜¯æœ€ä½Œ™§£åQˆæœ€çŸ­èµ\径)ã€?span lang="EN-US"> <br><br></span>二ã€?span lang="EN-US">    </span>釿ޒä¹å®«é—®é¢˜æ¸¸æˆ<span lang="EN-US"> <br></span>在一ä¸?span lang="EN-US">3</span>ä¹?span lang="EN-US">3</span>çš„ä¹å®«ä¸­æœ?span lang="EN-US">1-8</span>çš?span lang="EN-US">8</span>个数åŠä¸€ä¸ªç©ºæ ¼éšæœºæ‘†æ”‘Öœ¨å…¶ä¸­çš„æ ¼å­é‡Œã€‚如下é¢å·¦å›¾æ‰€½Cºã€‚çŽ°åœ¨è¦æ±‚实现这æ ïLš„问题åQšå°†è¯¥ä¹å®«è°ƒæ•´äؓ如下囑ֳ图所½Cºçš„å½¢å¼ã€‚调整规则是åQšæ¯‹Æ¡åªèƒ½å°†ä¸Žç©ºæ û|¼ˆä¸Šï¼Œä¸‹æˆ–左,å»I¼‰ç›æ€Í的一个数字åã^¿UÕdˆ°½Iºæ ¼ä¸­ã€‚试¾~–程实现ã€?span lang="EN-US"> <br><br>| 2 | 8  | 3 |                 | 1 | 2 | 3 | <br>- <br>| 1 |     | 4 |                 | 8 |    | 4 | <br><br>| 7 | 6  | 5 |                 | 7 | 6 | 5 | <br><br></span>深度优先æœçƒ¦çš„èµ\径示æ„图åQ?span lang="EN-US"><br style="mso-special-character: line-break"><br style="mso-special-character: line-break"><?xml:namespace prefix = o /><o:p></o:p></span></span></p></td></tr> <tr style="height: 15pt; mso-yfti-irow: 1; mso-yfti-lastrow: yes"> <td style="padding-right: 0cm; padding-left: 0cm; padding-bottom: 0cm; padding-top: 0cm; height: 15pt"> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体"><a target="_blank"><span style="mso-ignore: vglayout"><a href="http://www.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/f237e4d8e644_12765/clip_image001_2.gif"><img onmousewheel="return bbimg(this)" title="点击在新½H—壿Ÿ¥çœ‹åŽŸå§‹å›„¡‰‡" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px; zoom: 10%" height="185" alt="clip_image001" src="http://www.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/f237e4d8e644_12765/clip_image001_thumb.gif" width="244" border="0" v:shapes="_x0000_i1025"></a></span></a><o:p></o:p></span></p></td></tr></tbody></table> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">  <span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">三ã€å¹¿åº¦ä¼˜å…ˆæœç´?span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">     </span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">在深度优先æœç´¢ç®—法中åQŒæ˜¯æ·±åº¦­‘Šå¤§çš„结点越先得到扩展。如果在æœçƒ¦ä¸­æŠŠ½Ž—æ³•æ”¹äØ“æŒ‰ç»“ç‚¹çš„å±‚æ¬¡˜q›è¡Œæœçƒ¦åQŒæœ¬å±‚çš„¾l“点没有æœçƒ¦å¤„ç†å®Œæ—¶åQŒä¸èƒ½å¯¹ä¸‹å±‚¾l“点˜q›è¡Œå¤„ç†åQŒå³æ·±åº¦­‘Šå°çš„结点越先得到扩展,也就是说先äñ”生的¾l“点先得以扩展处ç†ï¼Œ˜q™ç§æœçƒ¦½Ž—法¿UîCØ“òq¿åº¦ä¼˜å…ˆæœçƒ¦æ³•ã€?<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">òq¿åº¦ä¼˜å…ˆæœçƒ¦è·¯å¾„½Cºæ„图:<span lang="EN-US"><br><br><a target="_blank"><span style="mso-ignore: vglayout"><a href="http://www.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/f237e4d8e644_12765/clip_image003_2.jpg"><img onmousewheel="return bbimg(this)" title="点击在新½H—壿Ÿ¥çœ‹åŽŸå§‹å›„¡‰‡" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px; zoom: 180%" height="436" alt="clip_image003" src="http://www.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/f237e4d8e644_12765/clip_image003_thumb.jpg" width="504" border="0" v:shapes="_x0000_i1026"></a></span></a><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体"> <o:p></o:p></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">å››ã€èˆªç­é—®é¢˜ï¼ˆæ¥è‡ªã€?span lang="EN-US">The Art of Java</span>ã€?span lang="EN-US">)<br>    </span>一ä½é¡¾å®¢è¦é¢„定一张从<span lang="EN-US">New York</span>åˆ?span lang="EN-US">Los Angeles</span>çš„èˆªç­æœº¼œ¨ï¼Œä¸‹é¢æ˜¯èˆªç­çº¿è·¯ï¼Œè¯·ä½ ä¸ºé¡¾å®¢æ‰¾ä¸€¿Uè´­¼œ¨æ–¹æ¡ˆã€?span lang="EN-US"><o:p></o:p></span></span></p> <table class="MsoNormalTable" style="width: 435.75pt; mso-cellspacing: 1.5pt" cellpadding="0" width="581" border="1"> <tbody> <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; width: 196.5pt; padding-top: 0.75pt" width="262"> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">航ç­<span lang="EN-US"><o:p></o:p></span></span></p></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; width: 227.25pt; padding-top: 0.75pt" width="303"> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">è·ç¦»<span lang="EN-US"><o:p></o:p></span></span></p></td></tr> <tr style="mso-yfti-irow: 1"> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">New York</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">åˆ?span lang="EN-US">Chicago<o:p></o:p></span></span></p></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">900</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">英里<span lang="EN-US"><o:p></o:p></span></span></p></td></tr> <tr style="mso-yfti-irow: 2"> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">Chicago</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">åˆ?span lang="EN-US">Denver<o:p></o:p></span></span></p></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">1000</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">英里<span lang="EN-US"><o:p></o:p></span></span></p></td></tr> <tr style="mso-yfti-irow: 3"> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">New York</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">åˆ?span lang="EN-US">Toronto<o:p></o:p></span></span></p></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">500</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">英里<span lang="EN-US"><o:p></o:p></span></span></p></td></tr> <tr style="mso-yfti-irow: 4"> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">New York</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">åˆ?span lang="EN-US">Denver <o:p></o:p></span></span></p></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">1800</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">英里<span lang="EN-US"><o:p></o:p></span></span></p></td></tr> <tr style="mso-yfti-irow: 5"> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">Toronto</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">åˆ?span lang="EN-US">Calgary<o:p></o:p></span></span></p></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">1700</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">英里<span lang="EN-US"><o:p></o:p></span></span></p></td></tr> <tr style="mso-yfti-irow: 6"> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">Toronto</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">åˆ?span lang="EN-US">Los Angeles <o:p></o:p></span></span></p></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">2500</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">英里<span lang="EN-US"><o:p></o:p></span></span></p></td></tr> <tr style="mso-yfti-irow: 7"> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">Toronto</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">åˆ?span lang="EN-US">Chicago<o:p></o:p></span></span></p></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">500</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">英里<span lang="EN-US"><o:p></o:p></span></span></p></td></tr> <tr style="mso-yfti-irow: 8"> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">Denver</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">åˆ?span lang="EN-US">Urbana<o:p></o:p></span></span></p></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">1000</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">英里<span lang="EN-US"><o:p></o:p></span></span></p></td></tr> <tr style="mso-yfti-irow: 9"> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">Denver</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">åˆ?span lang="EN-US">Houston<o:p></o:p></span></span></p></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">1000</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">英里<span lang="EN-US"><o:p></o:p></span></span></p></td></tr> <tr style="mso-yfti-irow: 10"> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">Houston</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">åˆ?span lang="EN-US">Los Angeles <o:p></o:p></span></span></p></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">1500</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">英里<span lang="EN-US"><o:p></o:p></span></span></p></td></tr> <tr style="mso-yfti-irow: 11; mso-yfti-lastrow: yes"> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">Denver</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">åˆ?span lang="EN-US">Los Angeles <o:p></o:p></span></span></p></td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">1000</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">英里<span lang="EN-US"><o:p></o:p></span></span></p></td></tr></tbody></table> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">䏋颿˜¯ç”¨æ·±åº¦ä¼˜å…ˆæœçƒ¦æ±‚解的程åº?span lang="EN-US">:<o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">// Find connections using a depth-first search.<br>import java.util.*;<br>import java.io.*;<br>// Flight information.<br>class FlightInfo {<br><span style="mso-spacerun: yes">  </span>String from;<br><span style="mso-spacerun: yes">  </span>String to;<br><span style="mso-spacerun: yes">  </span>int distance;<br><span style="mso-spacerun: yes">  </span>boolean skip; // used in backtracking<br><span style="mso-spacerun: yes">  </span>FlightInfo(String f, String t, int d) {<br><span style="mso-spacerun: yes">    </span>from = f;<br><span style="mso-spacerun: yes">    </span>to = t;<br><span style="mso-spacerun: yes">    </span>distance = d;<br><span style="mso-spacerun: yes">    </span>skip = false;<br><span style="mso-spacerun: yes">  </span>}<br>}<br>class Depth {<br><span style="mso-spacerun: yes">  </span>final int MAX = 100;<br><span style="mso-spacerun: yes">  </span>// This array holds the flight information.<br><span style="mso-spacerun: yes">  </span>FlightInfo flights[] = new FlightInfo[MAX]; <br><span style="mso-spacerun: yes">  </span>int numFlights = 0; // number of entries in flight array<br><span style="mso-spacerun: yes">  </span>Stack btStack = new Stack(); // backtrack stack<br><span style="mso-spacerun: yes">  </span>public static void main(String args[])<br><span style="mso-spacerun: yes">  </span>{<br><span style="mso-spacerun: yes">    </span><br><span style="mso-spacerun: yes">    </span>String to, from;<br><span style="mso-spacerun: yes">    </span>Depth ob = new Depth();<br><span style="mso-spacerun: yes">    </span>BufferedReader br = new <br><span style="mso-spacerun: yes">      </span>BufferedReader(new InputStreamReader(System.in)); <br><span style="mso-spacerun: yes"> </span><br><span style="mso-spacerun: yes">    </span>ob.setup();<span style="mso-spacerun: yes">  </span><br><span style="mso-spacerun: yes">    </span>try { <br><span style="mso-spacerun: yes">      </span>System.out.print("From? ");<br><span style="mso-spacerun: yes">      </span>from = br.readLine(); <br><span style="mso-spacerun: yes">      </span>System.out.print("To? ");<br><span style="mso-spacerun: yes">      </span>to = br.readLine(); <br><span style="mso-spacerun: yes">      </span>ob.isflight(from, to);<br><span style="mso-spacerun: yes">      </span>if(ob.btStack.size() != 0)<br><span style="mso-spacerun: yes">        </span>ob.route(to);<br><span style="mso-spacerun: yes">    </span>} catch (IOException exc) { <br><span style="mso-spacerun: yes">      </span>System.out.println("Error on input.");<br><span style="mso-spacerun: yes">    </span>}<br><span style="mso-spacerun: yes">  </span>}<br><span style="mso-spacerun: yes">  </span><br><span style="mso-spacerun: yes">  </span>// Initialize the flight database.<br><span style="mso-spacerun: yes">  </span>void setup()<br><span style="mso-spacerun: yes">  </span>{<br><span style="mso-spacerun: yes">    </span>addFlight("<?xml:namespace prefix = st1 /><st1:state w:st="on">New York</st1:state>", "<st1:city w:st="on"><st1:place w:st="on">Chicago</st1:place></st1:city>", 900);<br><span style="mso-spacerun: yes">    </span>addFlight("<st1:city w:st="on">Chicago</st1:city>", "<st1:city w:st="on"><st1:place w:st="on">Denver</st1:place></st1:city>", 1000);<br><span style="mso-spacerun: yes">    </span>addFlight("<st1:state w:st="on">New York</st1:state>", "<st1:city w:st="on"><st1:place w:st="on">Toronto</st1:place></st1:city>", 500);<br><span style="mso-spacerun: yes">    </span>addFlight("<st1:state w:st="on">New York</st1:state>", "<st1:city w:st="on"><st1:place w:st="on">Denver</st1:place></st1:city>", 1800);<br><span style="mso-spacerun: yes">    </span>addFlight("<st1:city w:st="on">Toronto</st1:city>", "<st1:city w:st="on"><st1:place w:st="on">Calgary</st1:place></st1:city>", 1700);<br><span style="mso-spacerun: yes">    </span>addFlight("<st1:city w:st="on">Toronto</st1:city>", "<st1:city w:st="on"><st1:place w:st="on">Los Angeles</st1:place></st1:city>", 2500);<br><span style="mso-spacerun: yes">    </span>addFlight("<st1:city w:st="on">Toronto</st1:city>", "<st1:city w:st="on"><st1:place w:st="on">Chicago</st1:place></st1:city>", 500);<br><span style="mso-spacerun: yes">    </span>addFlight("<st1:city w:st="on">Denver</st1:city>", "<st1:city w:st="on"><st1:place w:st="on">Urbana</st1:place></st1:city>", 1000);<br><span style="mso-spacerun: yes">    </span>addFlight("<st1:city w:st="on">Denver</st1:city>", "<st1:city w:st="on"><st1:place w:st="on">Houston</st1:place></st1:city>", 1000);<br><span style="mso-spacerun: yes">    </span>addFlight("<st1:city w:st="on">Houston</st1:city>", "<st1:city w:st="on"><st1:place w:st="on">Los Angeles</st1:place></st1:city>", 1500);<br><span style="mso-spacerun: yes">    </span>addFlight("<st1:city w:st="on">Denver</st1:city>", "<st1:city w:st="on"><st1:place w:st="on">Los Angeles</st1:place></st1:city>", 1000);<br><span style="mso-spacerun: yes">  </span>}<br><span style="mso-spacerun: yes">  </span><br><span style="mso-spacerun: yes">  </span>// Put flights into the database.<br><span style="mso-spacerun: yes">  </span>void addFlight(String from, String to, int dist)<br><span style="mso-spacerun: yes">  </span>{<br><span style="mso-spacerun: yes">  </span><br><span style="mso-spacerun: yes">    </span>if(numFlights < MAX) {<br><span style="mso-spacerun: yes">      </span>flights[numFlights] =<br><span style="mso-spacerun: yes">        </span>new FlightInfo(from, to, dist);<br><span style="mso-spacerun: yes">      </span>numFlights++;<br><span style="mso-spacerun: yes">    </span>}<br><span style="mso-spacerun: yes">    </span>else System.out.println("Flight database full.\n");<br><span style="mso-spacerun: yes">  </span>}<br><span style="mso-spacerun: yes">  </span>// Show the route and total distance.<br><span style="mso-spacerun: yes">  </span>void route(String to)<br><span style="mso-spacerun: yes">  </span>{<br><span style="mso-spacerun: yes">    </span>Stack rev = new Stack();<br><span style="mso-spacerun: yes">    </span>int dist = 0;<br><span style="mso-spacerun: yes">    </span>FlightInfo f;<br><span style="mso-spacerun: yes">    </span>int num = btStack.size();<br><span style="mso-spacerun: yes">    </span>// Reverse the stack to display route.<br><span style="mso-spacerun: yes">    </span>for(int i=0; i < num; i++) <br><span style="mso-spacerun: yes">      </span>rev.push(btStack.pop());<br><span style="mso-spacerun: yes">    </span>for(int i=0; i < num; i++) {<br><span style="mso-spacerun: yes">      </span>f = (FlightInfo) rev.pop();<br><span style="mso-spacerun: yes">      </span>System.out.print(f.from + " to ");<br><span style="mso-spacerun: yes">      </span>dist += f.distance;<br><span style="mso-spacerun: yes">    </span>}<br><span style="mso-spacerun: yes">    </span>System.out.println(to);<br><span style="mso-spacerun: yes">    </span>System.out.println("Distance is " + dist);<br><span style="mso-spacerun: yes">  </span>}<br><span style="mso-spacerun: yes">  </span>/* If there is a flight between from and to,<br><span style="mso-spacerun: yes">     </span>return the distance of flight;<br><span style="mso-spacerun: yes">     </span>otherwise, return 0. */<br><span style="mso-spacerun: yes">  </span>int match(String from, String to)<br><span style="mso-spacerun: yes">  </span>{<br><span style="mso-spacerun: yes">    </span>for(int i=numFlights-1; i > -1; i--) {<br><span style="mso-spacerun: yes">      </span>if(flights[i].from.equals(from) &&<br><span style="mso-spacerun: yes">         </span>flights[i].to.equals(to) &&<br><span style="mso-spacerun: yes">         </span>!flights[i].skip)<br><span style="mso-spacerun: yes">      </span>{<br><span style="mso-spacerun: yes">        </span>flights[i].skip = true; // prevent reuse<br><span style="mso-spacerun: yes">        </span>return flights[i].distance;<br><span style="mso-spacerun: yes">  </span><span style="mso-spacerun: yes">    </span>}<br><span style="mso-spacerun: yes">    </span>}<br><span style="mso-spacerun: yes">    </span>return 0; // not found <br><span style="mso-spacerun: yes">  </span>}<br><span style="mso-spacerun: yes">  </span><br><span style="mso-spacerun: yes">  </span>// Given from, find any connection.<br><span style="mso-spacerun: yes">  </span>FlightInfo find(String from)<br><span style="mso-spacerun: yes">  </span>{<br><span style="mso-spacerun: yes">    </span>for(int i=0; i < numFlights; i++) {<br><span style="mso-spacerun: yes">      </span>if(flights[i].from.equals(from) &&<br><span style="mso-spacerun: yes">         </span>!flights[i].skip)<br><span style="mso-spacerun: yes">      </span>{<br><span style="mso-spacerun: yes">        </span>FlightInfo f = new FlightInfo(flights[i].from,<br><span style="mso-spacerun: yes">                             </span>flights[i].to,<br><span style="mso-spacerun: yes">                             </span>flights[i].distance);<br><span style="mso-spacerun: yes">        </span>flights[i].skip = true; // prevent reuse<br><span style="mso-spacerun: yes">        </span>return f;<br><span style="mso-spacerun: yes">      </span>}<br><span style="mso-spacerun: yes">    </span>}<br><span style="mso-spacerun: yes">    </span>return null;<br><span style="mso-spacerun: yes">  </span>}<br><span style="mso-spacerun: yes">  </span><br><span style="mso-spacerun: yes">  </span>// Determine if there is a route between from and to. <br><span style="mso-spacerun: yes">  </span>void isflight(String from, String to)<br><span style="mso-spacerun: yes">  </span>{<br><span style="mso-spacerun: yes">    </span>int dist;<br><span style="mso-spacerun: yes">    </span>FlightInfo f;<br><span style="mso-spacerun: yes">    </span>// See if at destination.<br><span style="mso-spacerun: yes">    </span>dist = match(from, to);<br><span style="mso-spacerun: yes">    </span>if(dist != 0) {<br><span style="mso-spacerun: yes">      </span>btStack.push(new FlightInfo(from, to, dist));<br><span style="mso-spacerun: yes">      </span>return;<br><span style="mso-spacerun: yes">    </span>}<br><span style="mso-spacerun: yes">    </span>// Try another connection.<br><span style="mso-spacerun: yes">    </span>f = find(from);<br><span style="mso-spacerun: yes">    </span>if(f != null) {<br><span style="mso-spacerun: yes">      </span>btStack.push(new FlightInfo(from, to, f.distance));<br><span style="mso-spacerun: yes">      </span>isflight(f.to, to);<br><span style="mso-spacerun: yes">    </span>}<br><span style="mso-spacerun: yes">    </span>else if(btStack.size() > 0) {<br><span style="mso-spacerun: yes">      </span>// Backtrack and try another connection.<br><span style="mso-spacerun: yes">      </span>f = (FlightInfo) btStack.pop();<br><span style="mso-spacerun: yes">      </span>isflight(f.from, f.to);<br><span style="mso-spacerun: yes">    </span>}<br><span style="mso-spacerun: yes">  </span>}<br>}<span style="mso-spacerun: yes">  </span><br><span style="mso-spacerun: yes">  </span><o:p></o:p></span></p> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体"><a target="_blank"><span style="mso-ignore: vglayout"><a href="http://www.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/f237e4d8e644_12765/clip_image004_2.gif"><img onmousewheel="return bbimg(this)" title="点击在新½H—壿Ÿ¥çœ‹åŽŸå§‹å›„¡‰‡" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px; zoom: 60%" height="433" alt="clip_image004" src="http://www.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/f237e4d8e644_12765/clip_image004_thumb.gif" width="446" border="0" v:shapes="_x0000_i1027"></a></span></a><o:p></o:p></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">解释åQ?span lang="EN-US">isflight()</span>æ–ÒŽ³•用递归æ–ÒŽ³•˜q›è¡Œæ·±åº¦ä¼˜å…ˆæœçƒ¦åQŒå®ƒå…ˆè°ƒç”?span lang="EN-US">match()</span>æ–ÒŽ³•‹‚€æŸ¥èˆªç­çš„æ•°æ®åº“,判断åœ?span lang="EN-US">from</span>å’?span lang="EN-US">to</span>之间有没有航ç­å¯è¾¾ã€‚如果有åQŒåˆ™èŽ·å–目标信æ¯åQŒåƈž®†è¯¥¾U¿èµ\压入栈中åQŒç„¶åŽè¿”回(扑ֈ°ä¸€ä¸ªæ–¹æ¡ˆï¼‰ã€‚å¦åˆ™ï¼Œž®Þp°ƒç”?span lang="EN-US">find()</span>æ–ÒŽ³•查找<span lang="EN-US">from</span>与ä“Qæ„其它城市之间的¾U¿èµ\åQŒå¦‚果找åˆîC¸€æ¡å°±˜q”回æè¿°è¯¥çº¿è·¯çš„<span lang="EN-US">FlightInfo</span>对象åQŒå¦åˆ™è¿”å›?span lang="EN-US">null</span>。如果存在这æ ïLš„一æ¡çº¿è·¯ï¼Œé‚£ä¹ˆž®±æŠŠè¯¥çº¿è·¯ä¿å­˜åœ¨<span lang="EN-US">f</span>中,òq¶å°†å½“å‰èˆªç­ä¿¡æ¯åŽ‹åˆ°æ ˆçš„™å‰™ƒ¨åQŒç„¶åŽé€’归调用<span lang="EN-US">isflight()</span>æ–ÒŽ³•<span lang="EN-US"> ,</span>此时ä¿å­˜åœ?span lang="EN-US">f.to</span>中的城市æˆäؓ新的出å‘城市<span lang="EN-US">.</span>å¦åˆ™ž®Þp¿›è¡Œå›žé€€<span lang="EN-US">,</span>弹出栈顶的第一个节ç‚?span lang="EN-US">,</span>ç„¶åŽé€’归调用<span lang="EN-US">isflight()</span>æ–ÒŽ³•。该˜q‡ç¨‹ž®†ä¸€ç›´æŒ¾l­åˆ°æ‰‘Öˆ°ç›®æ ‡ä¸ºæ­¢ã€?<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">  <o:p></o:p></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">½E‹åº˜q行¾l“æžœåQ?span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体"><br>C:\java>java Depth<br>From? <st1:state w:st="on"><st1:place w:st="on">New York</st1:place></st1:state><br>To? <st1:city w:st="on"><st1:place w:st="on">Los Angeles</st1:place></st1:city><br><st1:state w:st="on">New York</st1:state> to <st1:city w:st="on">Chicago</st1:city> to <st1:city w:st="on">Denver</st1:city> to <st1:city w:st="on"><st1:place w:st="on">Los Angeles</st1:place></st1:city><br>Distance is 2900<o:p></o:p></span></p> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">C:\java><o:p></o:p></span></p> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">      </span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">深度优先æœçƒ¦èƒ½å¤Ÿæ‰‘Öˆ°ä¸€ä¸ªè§£åQŒåŒæ—Óž¼Œå¯¹äºŽä¸Šé¢˜q™ä¸ªç‰¹å®šé—®é¢˜åQŒæ·±åº¦ä¼˜å…ˆæœç´¢æ²¡æœ‰ç»˜q‡å›žé€€åQŒä¸€‹Æ¡å°±æ‰‘Öˆ°äº†ä¸€ä¸ªè§£åQ›ä½†å¦‚果数æ®çš„组¾l‡æ–¹å¼ä¸åŒï¼Œå¯ÀL‰¾è§£æ—¶ž®±æœ‰å¯èƒ½˜q›è¡Œå¤šæ¬¡å›žé€€ã€‚因此这个例å­çš„输出òq¶ä¸å…ähœ‰æ™®é性。而且åQŒåœ¨æœçƒ¦ä¸€ä¸ªå¾ˆé•¿ï¼Œä½†æ˜¯å…¶ä¸­òq¶æ²¡æœ‰è§£çš„分支的时候,深度优先æœçƒ¦çš„æ€§èƒ½ž®†ä¼šå¾ˆå·®åQŒåœ¨˜q™ç§æƒ…况下,深度优先æœçƒ¦ä¸ä»…在æœç´¢è¿™æ¡èµ\径时‹¹ªè´¹æ—‰™—´åQŒè€Œä¸”˜q˜åœ¨å‘目标的回退中浪è´ÒŽ—¶é—´ã€?span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">å†çœ‹å¯¹è¿™ä¸ªä¾‹å­ä‹É用广度优先æœç´¢çš„½E‹åºåQ?span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">// Find connections using a breadth-first search.<br>import java.util.*;<br>import java.io.*;<br>// Flight information.<br>class FlightInfo {<br><span style="mso-spacerun: yes">  </span>String from;<br><span style="mso-spacerun: yes">  </span>String to;<br><span style="mso-spacerun: yes">  </span>int distance;<br><span style="mso-spacerun: yes">  </span>boolean skip; // used in backtracking<br><span style="mso-spacerun: yes">  </span>FlightInfo(String f, String t, int d) {<br><span style="mso-spacerun: yes">    </span>from = f;<br><span style="mso-spacerun: yes">    </span>to = t;<br><span style="mso-spacerun: yes">    </span>distance = d;<br><span style="mso-spacerun: yes">    </span>skip = false;<br><span style="mso-spacerun: yes">  </span>}<br>}<br>class Breadth {<br><span style="mso-spacerun: yes">  </span>final int MAX = 100;<br><span style="mso-spacerun: yes">  </span>// This array holds the flight information.<br><span style="mso-spacerun: yes">  </span>FlightInfo flights[] = new FlightInfo[MAX]; <br><span style="mso-spacerun: yes">  </span>int numFlights = 0; // number of entries in flight array<br><span style="mso-spacerun: yes">  </span>Stack btStack = new Stack(); // backtrack stack<br><span style="mso-spacerun: yes">  </span>public static void main(String args[])<br><span style="mso-spacerun: yes">  </span>{<br><span style="mso-spacerun: yes">    </span>String to, from;<br><span style="mso-spacerun: yes">    </span>Breadth ob = new Breadth();<br><span style="mso-spacerun: yes">    </span>BufferedReader br = new <br><span style="mso-spacerun: yes">      </span>BufferedReader(new InputStreamReader(System.in)); <br><span style="mso-spacerun: yes"> </span><br><span style="mso-spacerun: yes">    </span>ob.setup();<span style="mso-spacerun: yes">  </span><br><span style="mso-spacerun: yes">    </span>try { <br><span style="mso-spacerun: yes">      </span>System.out.print("From? ");<br><span style="mso-spacerun: yes">      </span>from = br.readLine(); <br><span style="mso-spacerun: yes">      </span>System.out.print("To? ");<br><span style="mso-spacerun: yes">      </span>to = br.readLine(); <br><span style="mso-spacerun: yes">      </span>ob.isflight(from, to);<br><span style="mso-spacerun: yes">      </span>if(ob.btStack.size() != 0)<br><span style="mso-spacerun: yes">        </span>ob.route(to);<br><span style="mso-spacerun: yes">    </span>} catch (IOException exc) { <br><span style="mso-spacerun: yes">      </span>System.out.println("Error on input.");<br><span style="mso-spacerun: yes">    </span>}<br><span style="mso-spacerun: yes">  </span>}<br><span style="mso-spacerun: yes">  </span><br><span style="mso-spacerun: yes">  </span>// Initialize the flight database.<br><span style="mso-spacerun: yes">  </span>void setup()<br><span style="mso-spacerun: yes">  </span>{<br><span style="mso-spacerun: yes">    </span>addFlight("<st1:state w:st="on">New York</st1:state>", "<st1:city w:st="on"><st1:place w:st="on">Chicago</st1:place></st1:city>", 900);<br><span style="mso-spacerun: yes">    </span>addFlight("<st1:city w:st="on">Chicago</st1:city>", "<st1:city w:st="on"><st1:place w:st="on">Denver</st1:place></st1:city>", 1000);<br><span style="mso-spacerun: yes">    </span>addFlight("<st1:state w:st="on">New York</st1:state>", "<st1:city w:st="on"><st1:place w:st="on">Toronto</st1:place></st1:city>", 500);<br><span style="mso-spacerun: yes">    </span>addFlight("<st1:state w:st="on">New York</st1:state>", "<st1:city w:st="on"><st1:place w:st="on">Denver</st1:place></st1:city>", 1800);<br><span style="mso-spacerun: yes">    </span>addFlight("<st1:city w:st="on">Toronto</st1:city>", "<st1:city w:st="on"><st1:place w:st="on">Calgary</st1:place></st1:city>", 1700);<br><span style="mso-spacerun: yes">    </span>addFlight("<st1:city w:st="on">Toronto</st1:city>", "<st1:city w:st="on"><st1:place w:st="on">Los Angeles</st1:place></st1:city>", 2500);<br><span style="mso-spacerun: yes">    </span>addFlight("<st1:city w:st="on">Toronto</st1:city>", "<st1:city w:st="on"><st1:place w:st="on">Chicago</st1:place></st1:city>", 500);<br><span style="mso-spacerun: yes">    </span>addFlight("<st1:city w:st="on">Denver</st1:city>", "<st1:city w:st="on"><st1:place w:st="on">Urbana</st1:place></st1:city>", 1000);<br><span style="mso-spacerun: yes">    </span>addFlight("<st1:city w:st="on">Denver</st1:city>", "<st1:city w:st="on"><st1:place w:st="on">Houston</st1:place></st1:city>", 1000);<br><span style="mso-spacerun: yes">    </span>addFlight("<st1:city w:st="on">Houston</st1:city>", "<st1:city w:st="on"><st1:place w:st="on">Los Angeles</st1:place></st1:city>", 1500);<br><span style="mso-spacerun: yes">    </span>addFlight("<st1:city w:st="on">Denver</st1:city>", "<st1:city w:st="on"><st1:place w:st="on">Los Angeles</st1:place></st1:city>", 1000);<br><span style="mso-spacerun: yes">  </span>}<br><span style="mso-spacerun: yes">  </span><br><span style="mso-spacerun: yes">  </span>// Put flights into the database.<br><span style="mso-spacerun: yes">  </span>void addFlight(String from, String to, int dist)<br><span style="mso-spacerun: yes">  </span>{<span style="mso-spacerun: yes">  </span><br><span style="mso-spacerun: yes">    </span>if(numFlights < MAX) {<br><span style="mso-spacerun: yes">      </span>flights[numFlights] =<br><span style="mso-spacerun: yes">        </span>new FlightInfo(from, to, dist);<br><span style="mso-spacerun: yes">      </span>numFlights++;<br><span style="mso-spacerun: yes">    </span>}<br><span style="mso-spacerun: yes">    </span>else System.out.println("Flight database full.\n");<br><span style="mso-spacerun: yes"> </span><span style="mso-spacerun: yes"> </span>}<br><span style="mso-spacerun: yes">  </span>// Show the route and total distance.<br><span style="mso-spacerun: yes">  </span>void route(String to)<br><span style="mso-spacerun: yes">  </span>{<br><span style="mso-spacerun: yes">    </span>Stack rev = new Stack();<br><span style="mso-spacerun: yes">    </span>int dist = 0;<br><span style="mso-spacerun: yes">    </span>FlightInfo f;<br><span style="mso-spacerun: yes">    </span>int num = btStack.size();<br><span style="mso-spacerun: yes">    </span>// Reverse the stack to display route.<br><span style="mso-spacerun: yes">    </span>for(int i=0; i < num; i++) <br><span style="mso-spacerun: yes">      </span>rev.push(btStack.pop());<br><span style="mso-spacerun: yes">    </span>for(int i=0; i < num; i++) {<br><span style="mso-spacerun: yes">      </span>f = (FlightInfo) rev.pop();<br><span style="mso-spacerun: yes">      </span>System.out.print(f.from + " to ");<br><span style="mso-spacerun: yes">      </span>dist += f.distance;<br><span style="mso-spacerun: yes">    </span>}<br><span style="mso-spacerun: yes">    </span>System.out.println(to);<br><span style="mso-spacerun: yes">    </span>System.out.println("Distance is " + dist);<br><span style="mso-spacerun: yes">  </span>}<br><span style="mso-spacerun: yes">  </span>/* If there is a flight between from and to,<br><span style="mso-spacerun: yes">     </span>return the distance of flight;<br><span style="mso-spacerun: yes">     </span>otherwise, return 0. */<br><span style="mso-spacerun: yes">  </span>int match(String from, String to)<br><span style="mso-spacerun: yes">  </span>{<br><span style="mso-spacerun: yes">    </span>for(int i=numFlights-1; i > -1; i--) {<br><span style="mso-spacerun: yes">      </span>if(flights[i].from.equals(from) &&<br><span style="mso-spacerun: yes">         </span>flights[i].to.equals(to) &&<br><span style="mso-spacerun: yes">    </span><span style="mso-spacerun: yes">     </span>!flights[i].skip)<br><span style="mso-spacerun: yes">      </span>{<br><span style="mso-spacerun: yes">        </span>flights[i].skip = true; // prevent reuse<br><span style="mso-spacerun: yes">        </span>return flights[i].distance;<br><span style="mso-spacerun: yes">      </span>}<br><span style="mso-spacerun: yes">    </span>}<br><span style="mso-spacerun: yes">    </span>return 0; // not found <br><span style="mso-spacerun: yes">  </span>}<br><span style="mso-spacerun: yes">  </span><br><span style="mso-spacerun: yes">  </span>// Given from, find any connection.<br><span style="mso-spacerun: yes">  </span>FlightInfo find(String from)<br><span style="mso-spacerun: yes">  </span>{<br><span style="mso-spacerun: yes">    </span>for(int i=0; i < numFlights; i++) {<br><span style="mso-spacerun: yes">      </span>if(flights[i].from.equals(from) &&<br><span style="mso-spacerun: yes">         </span>!flights[i].skip)<br><span style="mso-spacerun: yes">      </span>{<br><span style="mso-spacerun: yes">        </span>FlightInfo f = new FlightInfo(flights[i].from,<br><span style="mso-spacerun: yes">                             </span>flights[i].to,<br><span style="mso-spacerun: yes">                             </span>flights[i].distance);<br><span style="mso-spacerun: yes">        </span>flights[i].skip = true; // prevent reuse<br><span style="mso-spacerun: yes">        </span>return f;<br><span style="mso-spacerun: yes">      </span>}<br><span style="mso-spacerun: yes">    </span>}<br><span style="mso-spacerun: yes">    </span>return null;<br><span style="mso-spacerun: yes">  </span>}<br><span style="mso-spacerun: yes">  </span><br><span style="mso-spacerun: yes">  </span>/* Determine if there is a route between from and to<br><span style="mso-spacerun: yes">     </span>using breadth-first search. */<br><span style="mso-spacerun: yes">  </span>void isflight(String from, String to)<br><span style="mso-spacerun: yes">  </span>{<br><span style="mso-spacerun: yes">    </span>int dist, dist2;<br><span style="mso-spacerun: yes">   </span><span style="mso-spacerun: yes"> </span>FlightInfo f;<br><span style="mso-spacerun: yes">    </span>// This stack is needed by the breadth-first search.<br><span style="mso-spacerun: yes">    </span>Stack resetStck = new Stack();<br><span style="mso-spacerun: yes">    </span>// See if at destination.<br><span style="mso-spacerun: yes">    </span>dist = match(from, to);<br><span style="mso-spacerun: yes">    </span>if(dist != 0) {<br><span style="mso-spacerun: yes">      </span>btStack.push(new FlightInfo(from, to, dist));<br><span style="mso-spacerun: yes">      </span>return;<br><span style="mso-spacerun: yes">    </span>}<br><span style="mso-spacerun: yes">    </span>/* Following is the first part of the breadth-first<br><span style="mso-spacerun: yes">       </span>modification.<span style="mso-spacerun: yes">  </span>It checks all connecting flights<br><span style="mso-spacerun: yes">       </span>from a specified node. */<br><span style="mso-spacerun: yes">    </span>while((f = find(from)) != null) {<br><span style="mso-spacerun: yes">      </span>resetStck.push(f);<br><span style="mso-spacerun: yes">      </span>if((dist = match(f.to, to)) != 0) {<br><span style="mso-spacerun: yes">      </span><span style="mso-spacerun: yes">  </span>resetStck.push(f.to);<br><span style="mso-spacerun: yes">        </span>btStack.push(new FlightInfo(from, f.to, f.distance));<br><span style="mso-spacerun: yes">        </span>btStack.push(new FlightInfo(f.to, to, dist));<br><span style="mso-spacerun: yes">        </span>return;<br><span style="mso-spacerun: yes">      </span>}<br><span style="mso-spacerun: yes">    </span>}<br><span style="mso-spacerun: yes">    </span>/* The following code resets the skip fields set by<br><span style="mso-spacerun: yes">       </span>preceding while loop. This is also part of the<br><span style="mso-spacerun: yes">       </span>breadth-first modifiction. */<br><span style="mso-spacerun: yes">    </span>int i = resetStck.size();<br><span style="mso-spacerun: yes">    </span>for(; i!=0; i--)<br><span style="mso-spacerun: yes">      </span>resetSkip((FlightInfo) resetStck.pop());<br><span style="mso-spacerun: yes">    </span>// Try another connection.<br><span style="mso-spacerun: yes">    </span>f = find(from);<br><span style="mso-spacerun: yes">    </span>if(f != null) {<br><span style="mso-spacerun: yes">      </span>btStack.push(new FlightInfo(from, to, f.distance));<br><span style="mso-spacerun: yes">      </span>isflight(f.to, to);<br><span style="mso-spacerun: yes">    </span>}<br><span style="mso-spacerun: yes">    </span>else if(btStack.size() > 0) {<br><span style="mso-spacerun: yes">      </span>// Backtrack and try another connection.<br><span style="mso-spacerun: yes">      </span>f = (FlightInfo) btStack.pop();<br><span style="mso-spacerun: yes">      </span>isflight(f.from, f.to);<br><span style="mso-spacerun: yes">    </span>}<br><span style="mso-spacerun: yes">  </span>}<br><span style="mso-spacerun: yes">  </span>// Reset skip field of specified flight.<br><span style="mso-spacerun: yes">  </span>void resetSkip(FlightInfo f) {<br><span style="mso-spacerun: yes">    </span>for(int i=0; i< numFlights; i++)<br><span style="mso-spacerun: yes">      </span>if(flights[i].from.equals(f.from) &&<br><span style="mso-spacerun: yes">         </span>flights[i].to.equals(f.to))<br><span style="mso-spacerun: yes">           </span>flights[i].skip = false;<br><span style="mso-spacerun: yes">  </span>}<br>}<o:p></o:p></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">½E‹åº˜q行¾l“æžœåQ?span lang="EN-US"><br><br>C:\java>java Breadth<br>From? New York<br>To? Los Angeles<br>New York to Toronto to Los Angeles<br>Distance is 3000 <o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体">C:\java><o:p></o:p></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">它找åˆîCº†ä¸€ä¸ªåˆç†çš„解,但这ä¸å…·æœ‰ä¸€èˆ¬æ€§ã€‚因为找到的½W¬ä¸€æ¡èµ\径å–决于信æ¯çš„物ç†ç»„¾l‡åÅžå¼ã€?span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体"><a target="_blank"><span style="mso-ignore: vglayout"><a href="http://www.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/f237e4d8e644_12765/clip_image005_2.gif"><img onmousewheel="return bbimg(this)" title="点击在新½H—壿Ÿ¥çœ‹åŽŸå§‹å›„¡‰‡" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px; zoom: 60%" height="408" alt="clip_image005" src="http://www.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/f237e4d8e644_12765/clip_image005_thumb.gif" width="516" border="0" v:shapes="_x0000_i1028"></a></span></a><o:p></o:p></span></p> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体"> <o:p></o:p></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">如果目标在æœç´¢ç©ºé—´ä¸­éšè—得䏿˜¯å¤ªæ·±ï¼Œé‚£ä¹ˆòq¿åº¦ä¼˜å…ˆæœçƒ¦çš„æ€§èƒ½ä¼šå¾ˆå¥½ã€?span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体"><o:p> </o:p></span></p> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial"><o:p> </o:p></span></p><img src ="http://www.shnenglu.com/woaidongmao/aggbug/71164.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/woaidongmao/" target="_blank">肥仔</a> 2009-01-04 21:03 <a href="http://www.shnenglu.com/woaidongmao/archive/2009/01/04/71164.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item><item><title>Larbin 一¿U高效的æœçƒ¦å¼•擎爬虫工具http://www.shnenglu.com/woaidongmao/archive/2009/01/04/71122.html肥仔肥仔Sun, 04 Jan 2009 06:12:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2009/01/04/71122.htmlhttp://www.shnenglu.com/woaidongmao/comments/71122.htmlhttp://www.shnenglu.com/woaidongmao/archive/2009/01/04/71122.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/71122.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/71122.html我就在这里对larbinåšä¸€ä¸ªç®€å•的介ç»ã€‚å› ä¸ºç›¸å¯¹äºŽå¤æ‚的系¾lŸæ¥è®ÔŒ¼Œlarbinå…ähœ‰é«˜åº¦çš„å¯é…置性,和良好的工作效率。1åQ?span lang="EN-US">larbin的简ä»?span lang="EN-US">
larbin是一¿Uå¼€æºçš„¾|‘络爬虫/¾|‘络蜘蛛åQŒç”±æ³•国的年è½ÖMh Sébastien Ailleret独立开å‘ã€?span lang="EN-US">larbin目的是能够跟ítªé¡µé¢çš„url˜q›è¡Œæ‰©å±•的抓å–,最åŽäØ“æœçƒ¦å¼•擎æä¾›òq¿æ³›çš„æ•°æ®æ¥æºã€?span lang="EN-US">

Larbinåªæ˜¯ä¸€ä¸ªçˆ¬è™«ï¼Œä¹Ÿå°±æ˜¯è¯´larbinåªæŠ“å–网™åµï¼Œè‡³äºŽå¦‚何parse的事情则ç”Þq”¨æˆ¯‚‡ªå·±å®Œæˆã€‚å¦å¤–,如何存储到数æ®åº“以åŠå»ºç«‹ç´¢å¼•的事æƒ?span lang="EN-US"> larbinä¹Ÿä¸æä¾›ã€?span lang="EN-US">

latbin最åˆçš„è®¾è®¡ä¹Ÿæ˜¯ä¾æ®è®¾è®¡½Ž€å•但是高度å¯é…置性的原则åQŒå› æ­¤æˆ‘们å¯ä»¥çœ‹åˆŽÍ¼Œä¸€ä¸ªç®€å•çš„larbin的爬虫å¯ä»¥æ¯å¤©èŽ·å–5åQï¼ä¸‡çš„¾|‘页åQŒå®žåœ¨æ˜¯éžå¸¸é«˜æ•ˆã€?span lang="EN-US">

2] Larbin的性能特å¾
高效是我�span lang="EN-US"> larbin
的评仗÷€?span lang="EN-US">
今年四月份的时候我å¯?span lang="EN-US">larbin的性能åšè¿‡ä¸€ä¸ªæµ‹è¯•,luliang.dhs.org是我自己常用的æœåС噍åQ?span lang="EN-US">CPU ä¸??xml:namespace prefix = st1 />1GåQŒå†…å­?span lang="EN-US">512åQŒå…¶å®ƒçš„æ€§èƒ½ä¸€èˆ¬ï¼Œå› äؓ是三òq´å‰è´­ç½®çš„ã€?span lang="EN-US">

我将我自å·Þqš„¾|‘页 å…­ç¿¼ä½œäØ“å…¥å£åQŒè¿è¡?span lang="EN-US">larbin˜q›è¡ŒåQ•层内的url的抓å–ã€?span lang="EN-US">

当时¾Uªå½•的一些数æ®ï¼š
Internet IO: 500-700k/per second
åQˆæˆ‘惛_¤§¾U¦æˆ‘的网¾lœä¸‹è½½çš„瓉™¢ˆäº†å§åQ?span lang="EN-US">
CPU top: 5%-15%
disk consume: 1M/s
åQŒåŸºæœ¬ä¸Šä¸€ä¸ªå°æ—¶çˆ¬ 3ä¸?span lang="EN-US">G 的网™åüc€‚å·®ä¸å¤š20万的™åµé¢
url
è§£æž: 200万ï¼300万毞®æ—¶

3] larbin 的作�span lang="EN-US">
很多人åˆè§?span lang="EN-US"> larbin ä¸çŸ¥é“从哪里下手åQŒé‚£ä¹ˆæˆ‘æ¥ç®€å•介¾l一ä¸?span lang="EN-US"> larbin 的功能和实际应用ã€?span lang="EN-US">
1. larbin 获å–å•个ã€ç¡®å®šç½‘站的所有蔾l“,甚至å¯ä»¥é•œåƒä¸€ä¸ªç½‘ç«™ã€?span lang="EN-US">
2. larbin建立 url 列表¾Ÿ¤ï¼Œä¾‹å¦‚针对所有的¾|‘页˜q›è¡Œ url retriveåŽï¼Œ˜q›è¡Œxml的蔾l“的获å–。或者是 mp3 ã€?span lang="EN-US">
3. larbin 定制åŽå¯ä»¥ä½œä¸ºæœç´¢å¼•擎的信æ¯çš„æ¥æºï¼ˆä¾‹å¦‚å¯ä»¥ž®†æŠ“å–下æ¥çš„¾|‘页æ¯?span lang="EN-US">2000一¾l„存攑֜¨ä¸€¾pÕdˆ—的目录结构里é¢ï¼‰ã€?span lang="EN-US">

æ€Õd½’åQ?span lang="EN-US">larbin应当是一个被òq¿å¤§æœçƒ¦å¼•擎爱好者应当引èµäh³¨æ„的一个äñ”å“ï¼Œè™½ç„¶å…¶åŠŸèƒ½é€æ¸è¢?span lang="EN-US"> Nutch 所接å—和替代,但是其在爬虫上的优美设计的确值得¿U°é“ã€?span lang="EN-US">

 



]]>
larbin¾l“构分æžhttp://www.shnenglu.com/woaidongmao/archive/2009/01/04/71121.html肥仔肥仔Sun, 04 Jan 2009 06:10:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2009/01/04/71121.htmlhttp://www.shnenglu.com/woaidongmao/comments/71121.htmlhttp://www.shnenglu.com/woaidongmao/archive/2009/01/04/71121.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/71121.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/71121.html互蔾|‘是一个庞大的éžç»“构化的数æ®åº“åQŒå°†æ•°æ®æœ‰æ•ˆçš„æ£€ç´¢åƈ¾l„ç»‡å‘ˆçŽ°å‡ºæ¥æœ‰ç€å·¨å¤§çš„åº”ç”¨å‰æ™¯ï¼Œž®¤å…¶æ˜¯ç±»ä¼?span lang="EN-US">RSS的以XML为基¼‹€çš„结构化的数æ®è¶Šæ¥è¶Šå¤šï¼Œå†?span lang="EN-US">
容的¾l„织方弭‘Šæ¥­‘Šçµ‹z»ï¼Œ‹‚€ç´¢ç»„¾l‡åƈ呈现会有瀭‘Šæ¥­‘Šå¹¿æ³›çš„应用范围åQŒåŒæ—¶åœ¨æ—¶æ•ˆæ€§å’Œå¯è¯»æ€§ä¸Šä¹Ÿä¼šæœ‰è¶Šæ¥è¶Šé«˜çš„è¦æ±‚。这一切的基础是爬虫,信æ¯çš„æ¥æºå…¥
å£ã€‚一个高效,ç‰|´»å¯æ‰©å±•çš„çˆ¬è™«å¯¹ä»¥ä¸Šåº”ç”¨éƒ½æœ‰ç€æ— å¯æ›¿ä»£çš„é‡è¦æ„义ã€?span lang="EN-US">
        è¦è®¾è®¡ä¸€ä¸ªçˆ¬è™«ï¼Œé¦–先需è¦è€ƒè™‘的效率。对于网¾lœè€Œè¨€åQŒåŸºäº?span lang="EN-US">TCP/IP的通信¾~–程有几¿U方法ã€?span lang="EN-US">
½W¬ä¸€¿U是å•线½E‹é˜»å¡žï¼Œ˜q™æ˜¯æœ€½Ž€å•也最å®ÒŽ˜“实现的一¿U,一个例å­ï¼šåœ?span lang="EN-US">Shell中通过curlåQ?span lang="EN-US">pcregrep½{‰ä¸€¾pÈ»Ÿå‘½ä×oå¯ä»¥ç›´æŽ¥å®žçŽ°ä¸€ä¸ªç®€å•çš„
爬虫åQŒä½†åŒæ—¶å®ƒçš„æ•ˆçŽ‡é—®é¢˜ä¹Ÿæ˜¾è€Œæ˜“è§ï¼šç”׃ºŽæ˜¯é˜»å¡žæ–¹å¼è¯»å–,dnsè§£æžåQŒå¾ç«‹è¿žæŽ¥ï¼Œå†™å…¥è¯äh±‚åQŒè¯»å–结果这些步骤上都会产生旉™—´çš„åšg˜qŸï¼Œä»Žè€Œæ— æ³•有效的利用
æœåŠ¡å™¨çš„å…¨éƒ¨èµ„æºã€?span lang="EN-US">
½W¬äºŒ¿U是多线½E‹é˜»å¡žã€‚å¾ç«‹å¤šä¸ªé˜»å¡žçš„¾U¿ç¨‹åQŒåˆ†åˆ«è¯·æ±‚ä¸åŒçš„url。相对于½W¬ä¸€¿U方法,它å¯ä»¥æ›´æœ‰æ•ˆçš„利用机器的资æºåQŒç‰¹åˆ«æ˜¯¾|‘络资æºåQŒå› ä¸ºæ— æ•°çº¿½E?span lang="EN-US">
åœ¨åŒæ—¶å·¥ä½œï¼Œæ‰€ä»¥ç½‘¾lœä¼šæ¯”è¾ƒå……åˆ†çš„åˆ©ç”¨ï¼Œä½†åŒæ—¶å¯¹æœºå™¨CPU资æºçš„æ¶ˆè€—也是比较大åQŒåœ¨ç”¨æˆ·¾U§å¤š¾U¿ç¨‹é—´çš„频ç¹åˆ‡æ¢å¯¹äºŽæ€§èƒ½çš„媄å“å·²¾l值得我们考虑ã€?span lang="EN-US">
½W¬ä¸‰¿U是å•线½E‹éžé˜Õd¡žã€‚这是目å‰ä‹É用的比较多的一¿Uåšæ³•,无论åœ?span lang="EN-US">client˜q˜æ˜¯server都有ç€òq¿æ³›çš„应用。在一个线½E‹å†…打开多个éžé˜»å¡žçš„˜q?span lang="EN-US">
接,通过poll/epoll/select对连接状æ€è¿›è¡Œåˆ¤æ–­ï¼Œåœ¨ç¬¬ä¸€æ—‰™—´å“应è¯äh±‚åQŒä¸ä½†å……分利用了¾|‘络资æºåQŒåŒæ—¶ä¹Ÿž®†æœ¬æœ?span lang="EN-US">CPU资æºçš„æ¶ˆè€—é™è‡Ïxœ€ä½Žã€?span lang="EN-US">
˜q™ç§æ–ÒŽ³•需è¦å¯¹dnsè¯äh±‚åQŒè¿žæŽ¥ï¼Œè¯Õd†™æ“作都采用异步éžé˜Õd¡žæ“作åQŒå…¶ä¸­ç¬¬ä¸€¿Uæ¯”è¾ƒå¤æ‚,å¯ä»¥é‡‡ç”¨adnsä½œäØ“è§£å†³æ–ÒŽ¡ˆåQŒåŽé¢ä¸‰ä¸ªæ“作相对简å•å¯ä»¥ç›´æŽ¥åœ¨½E?span lang="EN-US">
åºå†…实现ã€?span lang="EN-US">
效率问题解决åŽå°±éœ€è¦è€ƒè™‘具体的设计问题了ã€?span lang="EN-US">
url肯定需è¦ä¸€ä¸ªå•独的¾c»è¿›è¡Œå¤„ç†ï¼ŒåŒ…括昄¡¤ºåQŒåˆ†æž?span lang="EN-US">urlåQŒå¾—åˆîC¸»æœºï¼Œç«¯å£åQŒæ–‡ä»¶æ•°æ®ã€?span lang="EN-US">
ç„¶åŽéœ€è¦å¯¹url˜q›è¡ŒæŽ’é‡åQŒéœ€è¦ä¸€ä¸ªæ¯”较大çš?span lang="EN-US">url Hash表ã€?span lang="EN-US">
如果˜q˜è¦å¯¹ç½‘™åµå†…容进行排é‡ï¼Œåˆ™è¿˜éœ€è¦ä¸€ä¸?span lang="EN-US">Document Hash表ã€?span lang="EN-US">
爬过çš?span lang="EN-US">url需è¦è®°å½•下æ¥ï¼Œç”׃ºŽé‡æ¯”较大åQŒæˆ‘们将它写到ç£ç›˜ä¸ŠåQŒæ‰€ä»¥è¿˜éœ€è¦ä¸€ä¸?span lang="EN-US">FIFO的类(è®îC½œurlsDisk)ã€?span lang="EN-US">
现在需è¦çˆ¬çš?span lang="EN-US">urlåŒæ ·éœ€è¦ä¸€ä¸?span lang="EN-US">FIFO¾cÀL¥å¤„ç†åQŒé‡æ–°å¼€å§‹æ—¶åQ?span lang="EN-US">url会从定时从爬˜q‡çš„url
FIFO
里å–出æ¥åQŒå†™åˆ°è¿™ä¸?span lang="EN-US">FIFO里。正在è¿è¡Œçš„爬虫需è¦ä»Ž˜q™ä¸ªFIFO里读数æ®å‡ºæ¥åQŒåŠ å…¥åˆ°ä¸ÀLœº¾cÈš„url列表里。当ç„Óž¼Œä¹Ÿä¼šä»Žå‰ä¸€ä¸?span lang="EN-US">FIFO里直æŽ?span lang="EN-US">
è¯?span lang="EN-US">url出æ¥åQŒä¸˜q‡ä¼˜å…ˆçñ”应该比这个里é¢å‡ºæ¥çš„url低,毕竟是已¾l爬˜q‡çš„ã€?span lang="EN-US">
爬虫一般是对多个网站进行爬å–ï¼Œä½†åœ¨åŒæ—¶ç«™ç‚¹å†?span lang="EN-US">dns的请求å¯ä»¥åªåšä¸€‹Æ¡ï¼Œ˜q™å°±éœ€è¦å°†ä¸ÀLœºå独立于urlåQŒå•独有一个类˜q›è¡Œå¤„ç†ã€?span lang="EN-US">
ä¸ÀLœºåè§£æžå®ŒæˆåŽéœ€è¦æœ‰ä¸€ä¸ªè§£æžå®Œæˆçš„IP¾cÖM¸Žä¹‹åº”用,用于connect的时候ä‹É用ã€?span lang="EN-US">
HTML文档的解æžç±»ä¹Ÿè¦æœ‰ä¸€ä¸ªï¼Œç”¨æ¥åˆ†æž¾|‘页åQŒå–出里é¢çš„urlåQŒåŠ å…¥åˆ°urlsDiskã€?span lang="EN-US">
å†åŠ ä¸Šä¸€äº›å­—½W¦ä¸²åQŒè°ƒåº¦ç±»åQŒä¸€ä¸ªç®€å•的爬虫基本上就完æˆäº†ã€?span lang="EN-US">
以上基本上是Larbin的设计æ€èµ\åQ?span lang="EN-US">Larbin在具体实çŽîC¸Š˜q˜æœ‰ä¸€äº›ç‰¹ŒDŠçš„处ç†åQŒä¾‹å¦‚带了一ä¸?span lang="EN-US">webserveråQŒä»¥åŠå¯¹ç‰Òޮп–‡äšg的处ç†ã€?span lang="EN-US">
Larbin有一点设计ä¸ä¸å¤ªå¥½ï¼Œž®±æ˜¯æ…¢çš„讉K—®ä¼šè¶Šæ¥è¶Šå¤šï¼Œå ç”¨å¤§é‡çš„è¿žæŽ¥ï¼Œéœ€è¦æ”¹˜q›ï¼Œå¦å¤–如果对于大规模的爬虫åQŒè¿™ä»…仅实现了抓å–的部分åQŒè¦åˆ†å¸ƒå¼çš„æ‰?span lang="EN-US">
展还需è¦å¢žåŠ?span lang="EN-US">url的集中管ç†ä¸Žè°ƒåº¦ä»¥åŠå‰å°spiderçš„åˆ†å¸ƒå¼½Ž—æ³•ã€?span lang="EN-US">
Larbin¾|‘站爬虫½Ž€æ˜Žä‹É用说æ˜?span lang="EN-US">
larbin是一¿Uçˆ¬è™«å·¥å…øP¼Œæˆ‘也是剌D‰|—¶é—´ç½‘上看åˆ?span lang="EN-US"> Larbin 一¿U高效的æœçƒ¦å¼•擎爬虫工具 一文时æ‰çŸ¥é“有˜q™ä¹ˆä¸ªä¸œè¥¿ï¼Œåˆæ­¥è®¤å®šåQŒæˆ‘比较喜欢˜q™ä¸ª
工具(比è“vnutchçš?span lang="EN-US">crawlæ¥è¯´),å› äØ“å®ƒæ˜¯C++写的åQŒç±»ä¼?span lang="EN-US">C嘛,我熟åQŒå¯ä»¥è‡ªå·±æ”¹æ”¹ï¼Œ™åÞZ¾¿å­¦ä¹ ä¸€ä¸?span lang="EN-US">C++(几年æ¥çš„¾l验告诉我说åQšæ”¹åˆ«äh的东è¥?span lang="EN-US">
æ¥å­¦ä¸€¿U技术比从头å†?span lang="EN-US">helloworld快很å¤?span lang="EN-US">)。于是开始了我艰辛的larbin试用之旅ã€?span lang="EN-US">
  回头看看自己é‡åˆ°çš„问题都是由于没认真看文档引èµïLš„åQŒå”‰åQŒè€æ¯›ç—…了。下‹Æ¡å³ä½¿æ˜¯E文的也得好好看,ä¸èƒ½ç›²ç›®çš„试åQŒæµªè´ÒŽ—¶é—´ã€?span lang="EN-US"> 
  larbin官方地å€åQ?span lang="EN-US">http://larbin.sourceforge.net/index-eng.html



  一åQŒç¼–è¯?span lang="EN-US"> 
  ˜q™ä¹Ÿå¥½è¯´åQ?span lang="EN-US">whahahahaåQŒé‚£æ˜¯ï¼å› äؓ从官方网站下下æ¥çš„代ç ä¸èƒ½ç¼–译通过(linux gccä¸?span lang="EN-US">)



  ./configure 
  make



  gcc -O3 -Wall -D_REENTRANT -c -o parse.o parse.c 
  parse.c:115: error: conflicting types for ’adns__parse_domain�nbsp;



  internal.h:571: error: previous declaration of ’adns__parse_domain�was here



  parse.c:115: error: conflicting types for ’adns__parse_domain�
  internal.h:571: error: previous declaration of ’adns__parse_domainâ€?was here 



  gmake[1]: *** [parse.o] 错误
  gmake[1]: Leaving directory `/home/leo/leo/larbin-2.6.3/adns�
  make: *** [all] 错误
  函数原型和定义ä¸ä¸€è‡´è¿™ä¸ªå¥½æ”¹ï¼š



  打开./adns/internal.hæ–‡äšgåQŒæŠŠ568åQ?span lang="EN-US">571行直接注释掉ž®Þp¡Œäº†ã€?span lang="EN-US">  
  二,˜q行 
  ˜q™ä¸ªž®×ƒ¸è¯´äº†åQ?span lang="EN-US">./larbinž®Þp¿è¡Œäº†åQ?span lang="EN-US">larbin.conf中先˜q›è¡Œé…ç½®ž®±å¯ä»¥äº†åQŒè¿™ä¸ªé…¾|®å°±ä¸è¯´äº†ã€‚ã€?span lang="EN-US"> 
  ˜q行åŽå¯ä»?span lang="EN-US">http://host:8081 看è¿è¡Œçжæ€ï¼Œä¸é”™çš„æƒ³æ³•ã€?span lang="EN-US"> larbin.conf中有个:inputPort 1976é…ç½®åQ?span lang="EN-US">
ž®±æ˜¯å¯ä»¥˜qè¡Œæ—¶å¢žåŠ è¦æŠ“å–çš?span lang="EN-US">URLåQŒè¿™ä¸ªæƒ³æ³•éžå¸¸å¥½åQŒå¯æ˜¯ï¼Ÿæ€Žä¹ˆåŠ å‘¢åQŸè±¡èµ·åˆé‚£æ ·åQ?span lang="EN-US">http://host:1976那样是ä¸è¡Œçš„åQŒæŠ¥é”™ï¼ŸåQŸï¼Ÿè¯•了好久æ²?span lang="EN-US">
¾l“æžœåQŒæœ€å?span lang="EN-US">GDB跟踪了一下,唉,原æ¥ç›´æŽ¥telnet host 1976˜q›è¡Œå¢žåŠ ž®±å¯ä»¥äº†ã€‚åŽæ¥çœ‹åˆ°æ–‡æ¡£é‡Œå†™çš„亲亲楚楚åQŒæ™•倒。。。。ã€?span lang="EN-US"> 



  三,¾l“æžœ
  哈哈åQŒä¸‹ç­åŽæ‰¾äº†å°æœºå­è·‘了è“væ¥ï¼Œé‚£æ™šç¡è§‰çš„æ—¶å€™éƒ½æ¢¦è§è‡ªå·±çš„æœç´¢å¼•æ“Žèµ¶GOOGLE­‘?span lang="EN-US">BAIDU了,那个兴奋啊ã€?span lang="EN-US">



  ½W¬äºŒå¤©ä¸Šç­çš„æ—¶å€™å–看结果,å‘现目录下除了些fifo*æ–‡äšg外什么都没有åQŒé‚£ä¸ªéƒé——÷€‚没办法啊,å†çœ‹æ–‡æ¡£ How to customize Larbin å‘现˜q™ä¹ˆŒDµè¯´æ˜Žï¼š 
  The first thing you can define is the module you want to use for
ouput. This defines what you want to do with the pages larbin gets.
Here are the different options :



  DEFAULT_OUTPUT : This module mainly does nothing, except statistics. 
  SIMPLE_SAVE : This module saves pages on disk. It stores 2000 files per directory (with an index).



  MIRROR_SAVE : This module saves pages on disk with the hierarchy of the site they come from. It uses one directory per site. 
  STATS_OUTPUT : This modules makes some stats on the pages. In
order to see the results, see http://localhost:8081/output.html. 
  é ï¼Œé»˜è®¤ä»€ä¹ˆéƒ½æ²¡è¾“出,于是认真的看了官方网站上仅有的两个文档,修改äº?span lang="EN-US">options.hå†ç¼–译,¾lˆäºŽæœ‰ç»“果了ã€?span lang="EN-US">



  我的option中改了:



  SIMPLE_SAVE ½Ž€å•输å‡ÞZ¸€ä¸ªç›®å½•两åƒä¸ªæ–‡äšgåQŒåŒ…å«çƒ¦å¼•ã€?span lang="EN-US"> 
  CGILEVELåQ?span lang="EN-US">0 å¤„ç†æœåŠ¡å™¨ç«¯½E‹åºåQŒä¹Ÿž®±æ˜¯ä½?span lang="EN-US">url中包å?span lang="EN-US">? & = 之类çš?span lang="EN-US">querString时也处ç†ã€?span lang="EN-US"> 
  NO_DUP



ã€€ã€€å…¶ä½™å¯æ ¹æ®å„自需è¦ä¿®æ”¹ï¼Œè¯¦è§åQ?span lang="EN-US"> How to customize Larbin 一文ã€?span lang="EN-US">



  四,问题



  在ä‹É用过½E‹ä¸­å‘现åQŒåœ¨æŠ“网™å늚„时候,如果URLä¸­åŒ…å«æœª¾~–ç (encodurl)中文æ—Óž¼Œæ— æ³•抓å–åQŒç®€å•的看了一下在åQ?span lang="EN-US">
src/utils/url.cc中的fileNormalize 有涉åŠã€‚于是写了个encodurl函数加在url¾cÈš„构造函数里åQŒé—®é¢˜å°±è§£å†³äº†ã€?span lang="EN-US">



  ç”׃ºŽéœ€è¦æ¯”较好的å¯å®šåˆ¶æ€§ï¼Œ˜q™ä¸ªå·¥å…·ä¼ég¹Ž˜q˜ä¸å¤§æ»¡­‘Ïxˆ‘的需求,最¾lˆæˆ‘没ä‹É用她åQŒè€Œæ˜¯è‡ªå·±ç”?span lang="EN-US">perlåœ?span lang="EN-US">WWW:SimpleRobot的基¼‹€ä¸Šæžäº†ä¸ªé€‚åˆæˆ‘的。。å†è¯´äº†perl在字½W¦çªœå¤„ç†ä¸Šåº”è¯¥ä¸æ¯?span lang="EN-US">CåQ‹ï¼‹æ…¢ï¼Œæ€Èš„æ¥è¯´é‚£ä¸ªž®å·¥å…äh€§èƒ½˜q˜ä¸é”™ã€‚。呵å‘üc€?span lang="EN-US">



  ä¸è¿‡˜q˜æ˜¯æŠŠè¿™äº›å†™å‡ºæ¥åQŒç»™æ²¡çœ‹æ–‡æ¡£çš„æœ‹å‹ï¼ˆå¸Œæœ›å¾ˆå°‘åQ‰ï¼Œä¹Ÿè­¦½Cø™‡ªå·×ƒ¸€å®šè¦è®¤çœŸçœ‹æ–‡æ¡£ã€?/span>



]]>
è§£æžcookie‹Æºéª—实现˜q‡ç¨‹åŠå…·ä½“应ç”?/title><link>http://www.shnenglu.com/woaidongmao/archive/2009/01/03/71072.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Sat, 03 Jan 2009 08:44:00 GMT</pubDate><guid>http://www.shnenglu.com/woaidongmao/archive/2009/01/03/71072.html</guid><wfw:comment>http://www.shnenglu.com/woaidongmao/comments/71072.html</wfw:comment><comments>http://www.shnenglu.com/woaidongmao/archive/2009/01/03/71072.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/woaidongmao/comments/commentRss/71072.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/woaidongmao/services/trackbacks/71072.html</trackback:ping><description><![CDATA[<p style="line-height: 150%"><span style="color: black">   正如我们所知é“的,åœ?span lang="EN-US"><a ><span lang="EN-US" style="color: black"><span lang="EN-US">¾|‘络</span></span></a></span>è¯æ±‡ä¸­ï¼Œ<span lang="EN-US">cookie</span>是一个特ŒDŠçš„ä¿¡æ¯åQŒè™½ç„¶åªæ˜?span lang="EN-US"><a ><span lang="EN-US" style="color: black"><span lang="EN-US">æœåŠ¡</span></span></a></span>器存于用戯‚®¡½Ž—机上的一个文本文ä»Óž¼Œä½†ç”±äºŽå…¶å†…容的ä¸å¯Õd¸¸æ€?span lang="EN-US">(</span>ä¸?span lang="EN-US"><a ><span lang="EN-US" style="color: black"><span lang="EN-US">æœåŠ¡</span></span></a></span>器有一定的互交性,且常会存储用户ååQŒç”šè‡›_£ä»¤ï¼Œæˆ–æ˜¯å…¶å®ƒä¸€äº›æ•æ„Ÿä¿¡æ¯ï¼Œä¾‹å¦‚在江湖或是一些社åŒÞZ¸­åQŒå¸¸ä¼šç”¨<span lang="EN-US">cookie</span>æ¥ä¿å­˜ç”¨æˆ·é›†åˆ†ï¼Œ½{‰çñ”½{‰ç­‰<span lang="EN-US">)</span>。因而æˆä¸ÞZ¸€äº›é«˜æ‰‹å…³æ³¨çš„对åƒåQŒå€Ÿæ­¤æ¥å–得特ŒDŠæƒé™ï¼Œç”šè‡³æ”Õd…‹æ•´ä¸ª¾|‘站。本人出些拙作,ä»?span lang="EN-US">java script</span>中对<span lang="EN-US">cookie</span>的应用,æ¥è¯´åˆæ­¥è¯´æ˜Ž<span lang="EN-US">cookie</span>‹Æºéª—的实现过½E‹åŠå…·ä½“应用ã€?span lang="EN-US"> <br></span>  <span lang="EN-US"> <br></span>  一ã€?span lang="EN-US">cookie</span>çš„å¾ç«?span lang="EN-US"> <br></span>  <span lang="EN-US"> <br></span>  在讲如何建立<span lang="EN-US">cookie</span>之å‰åQŒæˆ‘们先æ¥äº†è§£ä¸€ä¸?span lang="EN-US">cookie</span>的基本格å¼ï¼š<span lang="EN-US"> <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">cookiename+cookievalue;expire=expirationdategmt;path=urlpath;domain=sitedomain <br></span>  <span lang="EN-US"> <br></span>  其中å„项ä»?span lang="EN-US">;</span>分开åQŒé¦–先是指定<span lang="EN-US">cookie</span>çš„å¿UŽÍ¼Œòq¶äؓ其赋倹{€‚接下æ¥åˆ†åˆ«æ˜?span lang="EN-US">cookie</span>的有效期åQ?span lang="EN-US">url</span>路径以åŠ<span lang="EN-US"><a ><span lang="EN-US" style="color: black"><span lang="EN-US">域å</span></span></a></span>åQŒåœ¨˜q™å‡ ™å¹ä¸­åQŒé™¤äº†ç¬¬ä¸€™å¹ä»¥å¤–,其它部分å‡äØ“å¯å…ˆ™åV€?span lang="EN-US"><?xml:namespace prefix = o /><o:p></o:p></span></span></p> <p style="line-height: 150%"><span style="color: black">ã€€ã€€ä¸‹é¢æˆ‘们æ¥çœ‹ä¸€ŒDµä»£ç ï¼Œäº†è§£ä¸€ä¸?span lang="EN-US">cookie</span>½I¶ç«Ÿæ˜¯æ€Žæ ·å»ºç«‹çš„:<span lang="EN-US"> <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US"><HTML> <br></span>  <span lang="EN-US"><HEAD> <br></span>  <span lang="EN-US"><TITLE>Set a cookie based on a form</TITLE> <br></span>  <span lang="EN-US"><SCRIPT LANGUAGE="java script" TYPE="TEXT/java script"> <br></span>  <span lang="EN-US"><!-- Hide script from older browsers <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">expireDate = new Date <br></span>  <span lang="EN-US">expireDate.setMonth(expireDate.getMonth()+6) <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">userName = "" <br></span>  <span lang="EN-US">if (documents .cookie != "") { <br></span>  <span lang="EN-US">userName = documents .cookie.split("=")[1] <br></span>  <span lang="EN-US">} <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">function setCookie() { <br></span>  <span lang="EN-US">userName = document.myform.nameField.value <br></span>  <span lang="EN-US">documents .cookie = "userName="+userName+";expires=" + expireDate.toGMTString() <br></span>  <span lang="EN-US">} <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">// End hiding script --> <br></span>  <span lang="EN-US"></SCRIPT> <br></span>  <span lang="EN-US"></HEAD> <br></span>  <span lang="EN-US"><BODY BGCOLOR="WHITE" onLoad="document.myform.nameField.value = userName"> <br></span>  <span lang="EN-US"><form NAME="myform"> <br></span>  <span lang="EN-US"><H1>Enter your name:<INPUT TYPE="TEXT" NAME="nameField" onBlur="setCookie()"></H1> <br></span>  <span lang="EN-US"></form> <br></span>  <span lang="EN-US"></BODY> <br></span>  <span lang="EN-US"></HTML> <br></span>  ˜q™æ˜¯ä¸€é”È®€å•的建立<span lang="EN-US">cookie</span>的脚本ã€?span lang="EN-US"> <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">1</span>åQ?span lang="EN-US"><SCRIPT LANGUAGE="java script" TYPE="TEXT/java script"> <br></span>  <span lang="EN-US"> <br></span>  脚本开始的标记åQŒç”±æ­¤ä¸€å¥å‘Šè¯‰æµè§ˆå™¨ä»¥ä¸‹ž®†æ˜¯<span lang="EN-US">java script. <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">2,<!-- Hide script from older browsers <br></span>  <span lang="EN-US"> <br></span>  ä¸ÞZº†é˜²æ­¢‹¹è§ˆå™¨ä¸èƒ½è¯†åˆ«è„šæœ¬ï¼Œè€Œè®©‹¹è§ˆå™¨è¯¯ä»¥äØ“æ˜?span lang="EN-US">HTML</span>注释而忽略它ã€?span lang="EN-US"> <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">3</span>åQ?span lang="EN-US">expireDate = new Date <br></span>  <span lang="EN-US"> <br></span>  获å–当剿—¥æœŸåQŒåƈ存入å˜é‡<span lang="EN-US">expireDate</span>中ã€?span lang="EN-US"> <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">4</span>åQ?span lang="EN-US">expireDate.setMonth(expireDate.getMonth()+6) <br></span>  <span lang="EN-US"> <br></span>  获å–当剿œˆä†¾å€û|¼Œž®†å…¶åŠ?span lang="EN-US">6</span>åŽè®¾¾|®äØ“<span lang="EN-US">expireDate</span>的月份æ€Õd€¼éƒ¨åˆ†ã€‚è¿™æ„å‘³ç€æœ?span lang="EN-US">cookie</span>的有效期ä¸?span lang="EN-US">6</span>个月ã€?span lang="EN-US"> <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">5</span>åQ?span lang="EN-US">if (documents .cookie != "") <br></span>  <span lang="EN-US"> <br></span>  如果<span lang="EN-US">document</span>çš„å€ég¸ä¸ºç©ºåQŒç›¸å½“于‹‚€æŸ¥ç”¨æˆïL¡¬ç›˜ä¸Šæ˜¯å¦å·²ç»æœ‰äº†<span lang="EN-US">cookie</span>ã€?span lang="EN-US"> <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">6</span>åQ?span lang="EN-US">userName = documents .cookie.split("=")[1] <br></span>  <span lang="EN-US"> <br></span>  此处用到äº?span lang="EN-US">split("=")</span>函数åQŒå®ƒçš„功能是æŠ?span lang="EN-US">cookie</span>记录分割为数¾l„,<span lang="EN-US">cookie</span>çš„åä¸?span lang="EN-US">cookie[0],</span>å€égØ“<span lang="EN-US">cookie[1],</span>以此累推。所以此å¤?span lang="EN-US">documents .cookie.split("=")[1]</span>˜q”回的值是æ­?span lang="EN-US">cookie</span>的倹{€‚在此å¥ä¸­å°†å€ÆDµ‹¾l™äº†å˜é‡<span lang="EN-US">username</span>ã€?span lang="EN-US"> <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">7</span>åQ?span lang="EN-US">function setCookie() <br></span>  <span lang="EN-US"> <br></span>  讄¡½®å䨓<span lang="EN-US">setCookie</span>的函数ã€?span lang="EN-US"> <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">8</span>åQ?span lang="EN-US">documents .cookie = "userName="+userName+";expires=" + expireDate.toGMTString() <br></span>  <span lang="EN-US"> <br></span>ã€€ã€€æ­¤å¥æ˜¯å°†è®„¡½®å¥½çš„<span lang="EN-US">cookie</span>写入用户¼‹¬ç›˜ã€?span lang="EN-US">expireDate.toGMTString()</span>æŠ?span lang="EN-US">expireDate</span>ä¸­çš„å€ÆD{æ¢äؓ文本字符ä¸ÔŒ¼Œ˜q™æ ·æ‰èƒ½å†™å…¥<span lang="EN-US">cookie</span>中ã€?span lang="EN-US"> <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">9</span>åQ?span lang="EN-US">onLoad="document.myform.nameField.value = userName" <br></span>  <span lang="EN-US"> <br></span>  当页é¢è²å…¥æ—¶åQŒæŠŠ<span lang="EN-US">username</span>的值写入文本框<span lang="EN-US">(</span>如果有的è¯?span lang="EN-US">)</span>ã€?span lang="EN-US"> <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">10</span>åQ?span lang="EN-US">onBlur="setCookie()" <br></span>  <span lang="EN-US"> <br></span>  当用æˆïL¦»å¼€æ–‡æœ¬æ¡†æ—¶åQ?span lang="EN-US">onBlur</span>调用函数<span lang="EN-US">setCookie</span>ã€?span lang="EN-US"> <br></span>  <span lang="EN-US"> <br></span>  ¾l“åˆä¸Šé¢çš„æ³¨é‡Šï¼Œè¯»é‚£ŒDµä»£ç ç›¸ä¿¡ä¸æˆé—®é¢˜å§<span lang="EN-US">!</span>既然我们å¯ä»¥å»ºç«‹<span lang="EN-US">cookie</span>åQŒé‚£ä¹ˆè¯»å–ä¹Ÿä¸æ˜¯ä»€ä¹ˆéš¾äº‹ï¼Œè¯ähŽ¥ç€å¾€ä¸‹çœ‹<span lang="EN-US">!<o:p></o:p></span></span></p> <p style="line-height: 150%"><span style="color: black">  <strong><span style="font-family: 宋体; mso-bidi-font-family: 宋体">二ã€è¯»å–和昄¡¤º<span lang="EN-US">cookie </span></span></strong><b><span lang="EN-US"><br></span></b>  <span lang="EN-US"> <br></span>  一般æ¥è¯ß_¼Œ<span lang="EN-US">cookie</span>çš„ä½œè€…åÆˆä¸å¸Œæœ?span lang="EN-US">cookie</span>被显½Cºå‡ºæ¥ï¼Œ˜q™æ˜¯å½“ç„¶çš?span lang="EN-US">!</span>天知é“里é¢å†™äº†äº›ä»€ä¹?span lang="EN-US">!</span>åQŸç„¶è€Œè¿™ä¹Ÿæ˜¯æˆ‘们惌™¦è¯Õd‡ºå®ƒçš„原因<span lang="EN-US">!~~~:D <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US"><HTML> <br></span>  <span lang="EN-US"><HEAD> <br></span>  <span lang="EN-US"><TITLE>Cookie Check</TITLE> <br></span>  <span lang="EN-US"></HEAD> <br></span>  <span lang="EN-US"><BODY BGCOLOR="WHITE"> <br></span>  <span lang="EN-US"><H2> <br></span>  <span lang="EN-US"><SCRIPT LANGUAGE="java script" TYPE="TEXT/java script"> <br></span>  <span lang="EN-US"><!-- Hide script from older browsers <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">if (documents .cookie == "") { <br></span>  <span lang="EN-US">document.write("There are no cookies here") <br></span>  <span lang="EN-US">} <br></span>  <span lang="EN-US">else { <br></span>  <span lang="EN-US">thisCookie = documents .cookie.split("; ") <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">for (i=0; i<thisCookie.length; i++) { <br></span>  <span lang="EN-US">document.write("Cookie name is â€?+thisCookie.split("=")[0]) <br></span>  <span lang="EN-US">document.write("â€? and the value is â€?+thisCookie.split("=")[1]+"â€?lt;BR>") <br></span>  <span lang="EN-US">} <br></span>  <span lang="EN-US">} <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">// End hiding script --> <br></span>  <span lang="EN-US"></SCRIPT> <br></span>  <span lang="EN-US"></H2> <br></span>  <span lang="EN-US"></BODY> <br></span>  <span lang="EN-US"></HTML> <br></span>  <span lang="EN-US"> <br></span>  以上的便是一ŒDµè¯»å?span lang="EN-US">cookie</span>çš„å字和值的脚本。上文中解释˜q‡çš„语å¥åœ¨æ­¤ä¸å¤šèµ˜è¿°åQŒä¸”看有什么新的语法:<span lang="EN-US"> <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">1</span>åQ?span lang="EN-US">thisCookie = documents .cookie.split("; ")[</span>注æ„åQšåƈéžå‰æ–‡ä¸­å‡ºçް˜q‡çš„<span lang="EN-US">split("=")</span>ã€?span lang="EN-US"> <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">split("; ")</span>å¯ä»¥äº§ç”Ÿæ•°ç»„的结果,本å¥ä¸­ï¼Œç”?span lang="EN-US">documents .cookie.split("; ")</span>æ¥èŽ·å?span lang="EN-US">cookie</span>çš„å€û|¼Œòq¶å°†˜q™ä¸ªæ•°ç»„赋值缎带å˜é‡ï¼š<span lang="EN-US">thisCookie</span>ã€?span lang="EN-US"> <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">2</span>åQ?span lang="EN-US">for (i=0; i<thisCookie.length; i++) <br></span>  <span lang="EN-US"> <br></span>  讄¡½®è®¡ç®—器å˜é‡?span lang="EN-US">i</span>çš„å€égØ“<span lang="EN-US">0</span>åQŒå¦‚果其值å°äº?span lang="EN-US">thisCookie.length(thisCookie</span>中值的个数<span lang="EN-US">)</span>åQŒå°†<span lang="EN-US">i</span>的值加<span lang="EN-US">1</span>ã€?span lang="EN-US"> <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">3</span>åQ?span lang="EN-US">document.write("Cookie name is â€?+thisCookie.split("=")[0]) <br></span>  <span lang="EN-US"> <br></span>  此å¥ä¸?span lang="EN-US">thisCookie.split("=")[0]</span>较难ç†è§£åQŒä¸Šé¢çš„脚本中,<span lang="EN-US">thiscookie</span>å·²ç»è¢«èµ‹å€égؓ一个数¾l„çš„å€û|¼Œé‚£ä¹ˆ<span lang="EN-US">thisCookie</span>是指数组中第<span lang="EN-US">i</span>个å€û|¼Œä¹Ÿå°±æ˜¯ç¬¬<span lang="EN-US">i</span>ä¸?span lang="EN-US">cookie</span>åQŒè€Œç”±ä¸Šæ–‡å¯çŸ¥<span lang="EN-US">split("=")[0]</span>是指<span lang="EN-US">cookie</span>çš„åå­—ã€?span lang="EN-US"><br><br></span>  ˜q™æ ·<span lang="EN-US">thisCookie.split("=")[0]</span>便是½W?span lang="EN-US">i</span>çš?span lang="EN-US">cookie</span>ä¸?span lang="EN-US">cookie</span>çš„åå­?span lang="EN-US">! <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">4,document.write("â€? and the value is â€?+thisCookie.split("=")[1] <br></span>  <span lang="EN-US"> <br></span>  è·?span lang="EN-US">3</span>æžäØ“ç›æ€¼¼åQŒå³æ˜¯ç¬¬<span lang="EN-US">i</span>ä¸?span lang="EN-US">cookie</span>ä¸?span lang="EN-US"> cookie</span>的倹{€?span lang="EN-US"> <br></span>  <span lang="EN-US"> <br></span>  到此åQŒæˆ‘们已¾l熟悉了如何建立<span lang="EN-US">cookie</span>以åŠå®ƒçš„è¯Õd–。这些也正是<span lang="EN-US">cookie</span>‹Æºéª—也需è¦çš„主è¦<span lang="EN-US"><a ><span lang="EN-US" style="color: black"><span lang="EN-US">技æœ?/span></span></a>!<o:p></o:p></span></span></p> <p style="line-height: 150%"><span style="color: black">  <strong><span style="font-family: 宋体; mso-bidi-font-family: 宋体">三ã€?span lang="EN-US">cookie</span>‹Æºéª—的实çŽ?</span></strong><b><span lang="EN-US"><br></span></b>  <span lang="EN-US"> <br></span>  è¦åšåˆ?span lang="EN-US">cookie</span>‹Æºéª—åQŒæœ€é‡è¦çš„æ˜¯ç†è§£ç›®æ ‡<span lang="EN-US">cookie</span>中的储值情况,òq¶è®¾æ³•改å˜å®ƒã€‚由上é¢çš„学习我们知é“,åŸÞZºŽ<span lang="EN-US">cookie</span>çš„æ ¼å¼æ‰€é™ï¼Œä¸€èˆ¬æ¥è¯ß_¼Œåªæœ‰åœ?span lang="EN-US">Cookie.split("=")[0]</span>å’?span lang="EN-US">Cookie.split("=")[1]</span>ä¸­çš„å€¼å¯¹æˆ‘ä»¬æ‰æ˜¯æœ‰ç”¨çš„。也ž®±æ˜¯è¯´åªéœ€æ”¹å˜˜q™ä¸¤å¤„或是处的值å³å¯è¾¾åˆ°æˆ‘们的目的ã€?span lang="EN-US"> <br><br></span>  而在实际æ“作中,˜q˜å¾—先解军_¦ä¸€ä¸ªé—®é¢˜ã€‚由于嗋¹è§ˆå™¨çš„内部<span lang="EN-US">cookie</span>机制所é™ï¼Œæ¯ä¸ª<span lang="EN-US">cookie</span>åªèƒ½è¢«å®ƒçš„原<span lang="EN-US"><a ><span lang="EN-US" style="color: black"><span lang="EN-US">æœåŠ¡</span></span></a></span>器所讉K—®<span lang="EN-US">!</span>坿ˆ‘们æ€ÖM¸èƒ½è·‘åˆîChå®?span lang="EN-US"><a ><span lang="EN-US" style="color: black"><span lang="EN-US">æœåŠ¡</span></span></a></span>器上æ“作å?span lang="EN-US">!</span>˜q™é‡Œž®±éœ€è¦ä¸€ä¸ªå°æŠ€å·§äº†ã€?span lang="EN-US"><br><br></span>ã€€ã€€åœ¨ä¸Šé¢æˆ‘们æåˆ°è¿‡<span lang="EN-US">cookie</span>的格å¼ï¼Œæœ€åŽä¸¤™å¹ä¸­åˆ†åˆ«æ˜¯å®ƒçš?span lang="EN-US">url</span>路径å’?span lang="EN-US"><a ><span lang="EN-US" style="color: black"><span lang="EN-US">域å</span></span></a></span>。ä¸éš¾æƒ³åˆŽÍ¼Œ<span lang="EN-US"><a ><span lang="EN-US" style="color: black"><span lang="EN-US">æœåŠ¡</span></span></a></span>器对<span lang="EN-US">cookie</span>的识别é çš„就是这ä¸?span lang="EN-US">! <br><br></span>  而在òqÏx—¶åQŒæˆ‘们見¹è§ˆä¸€ä¸ªç½‘站时åQŒè¾“入的<span lang="EN-US">url</span>便是它的<span lang="EN-US"><a ><span lang="EN-US" style="color: black"><span lang="EN-US">域å</span></span></a></span>åQŒéœ€è¦ç»˜q?span lang="EN-US"><a ><span lang="EN-US" style="color: black"><span lang="EN-US">域å</span></span></a></span>½Ž¡ç†¾pÈ»Ÿ<span lang="EN-US">dns</span>ž®†å…¶è½¬åŒ–ä¸?span lang="EN-US">IP</span>地å€åŽè¿›è¡Œè¿žæŽ¥çš„。这其中ž®±æœ‰ä¸€ä¸ªç©ºå½“。如果能åœ?span lang="EN-US">dns</span>ä¸Šåšæ‰‹è„šåQŒæŠŠç›®æ ‡<span lang="EN-US"><a ><span lang="EN-US" style="color: black"><span lang="EN-US">域å</span></span></a></span>çš?span lang="EN-US">IP</span>地å€å¯¹åº”到其它站点上åQŒæˆ‘们便å¯ä»¥éžæ³•讉K—®ç›®æ ‡ç«™ç‚¹çš?span lang="EN-US">cookie</span>äº?span lang="EN-US">! <br><br></span>  åšåˆ°˜q™ä¸€ç‚¹åƈä¸éš¾åQŒå½“然我ä¸åÆˆä¸æ˜¯è¦åŽ»æ“纵<span lang="EN-US">dns</span>åQŒè€Œä¸”那也是ä¸å¯èƒ½çš„事情。在<span lang="EN-US">win9</span>下的安装目录下,有一 å䨓<span lang="EN-US">hosts.sam</span>的文ä»Óž¼Œä»¥æ–‡æœ¬æ–¹å¼æ‰“å¼€åŽä¼šçœ‹åˆ°˜q™æ ·çš„æ ¼å¼ï¼š<span lang="EN-US"><br><br></span>  <span lang="EN-US">127.0.0.1 lockhost #</span>注释<span lang="EN-US"> <br><br></span>  利用它,我们便å¯ä»¥å®žçŽ?span lang="EN-US"><a ><span lang="EN-US" style="color: black"><span lang="EN-US">域å</span></span></a></span>è§£æžçš„æœ¬åœ°åŒ–<span lang="EN-US">!</span>而且其优先æƒé«˜äºŽ<span lang="EN-US"><a ><span lang="EN-US" style="color: black"><span lang="EN-US">¾|‘络</span></span></a></span>中的<span lang="EN-US">dns! <br><br></span>  具体使用æ—Óž¼Œåªéœ€ž®?span lang="EN-US">IP</span>å’?span lang="EN-US"><a ><span lang="EN-US" style="color: black"><span lang="EN-US">域å</span></span></a></span>ä¾ä¸Šé¢çš„æ ¼å¼æ·ÕdŠ åQŒåƈå¦å­˜ä¸?span lang="EN-US">hosts</span>å›_¯<span lang="EN-US">!(</span>注æ„åQšæ­¤æ–‡äšgæ— åŽèµ˜ååQŒåƈé?span lang="EN-US">hosts.sam </span>æ–‡äšg本èín<span lang="EN-US">!) <br></span>  <span lang="EN-US"> <br></span>  到此åQ?span lang="EN-US">cookie</span>‹Æºéª—所需的所以知识已¾lé½å¤‡ã€‚下é¢ä»¥ä¸€ä¸?span lang="EN-US">â€?/span>å?span lang="EN-US">â€?/span>的例å­ï¼Œæ¼”示一下如何进入实æˆ?span lang="EN-US">.(</span>ä¸ä¾¿¾l™å‡ºçœŸå®žåœ°å€åQŒä»¥å…引èµïLН¾|?span lang="EN-US">!~~~:P) <br></span>  å‡è®¾ç›®æ ‡ç«™ç‚¹æ˜?<span lang="EN-US"><a ><span style="color: black">www.xxx.com</span></a> <br></span>  <span lang="EN-US"><a ><span style="color: black">www.self.com</span></a></span>是自å·Þqš„站点ã€?span lang="EN-US">(</span>å¯ä»¥ç”¨æ¥å­˜æ”¾‹Æºéª—目标所需的文ä»Óž¼Œç”¨æ¥è¯Õd–和修改对方的<span lang="EN-US">cookie.) <br><br></span>  首先<span lang="EN-US">ping</span>å‡?span lang="EN-US"><a ><span style="color: black">www.self.com</span></a></span>çš?span lang="EN-US">IP</span>地å€åQ?span lang="EN-US"><br><br></span>  <span lang="EN-US">ping <a ><span style="color: black">www.self.com</span></a> <br></span>  <span lang="EN-US"> <br></span>  <span lang="EN-US">Reply from <?xml:namespace prefix = st1 /><st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">12.34.56</st1:chsdate>.78: bytes=32 time=20ms TTL=244 <br></span>  <span lang="EN-US"> <br></span>  然åŽä¿®æ”¹<span lang="EN-US">hosts.sam</span>æ–‡äšg如下åQ?span lang="EN-US"> <br></span>  <span lang="EN-US"> <br></span><st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">  <span lang="EN-US">12.34.56</span></st1:chsdate><span lang="EN-US">.78 <a ><span style="color: black">www.xxx.com</span></a> <br></span>  òq¶ä¿å­˜äØ“<span lang="EN-US">hosts</span>ã€?span lang="EN-US"> <br></span>  <span lang="EN-US"> <br></span>  ž®†ç”¨æ¥è¯»å?span lang="EN-US">cookie</span>的页é¢ä¼ è‡?span lang="EN-US"><a ><span style="color: black">www.self.com</span></a>(</span>脚本如二所½C?span lang="EN-US">)</span>ã€?span lang="EN-US"> <br></span>  此时˜qžä¸Š<span lang="EN-US"><a ><span style="color: black">www.xxx.com</span></a></span>。由于我们已¾l对<span lang="EN-US">hosts</span>动过手脚åQŒè¿™æ—¶æ¥åˆ°çš„òq¶ä¸æ˜?span lang="EN-US"><a ><span style="color: black">www.xxx.com</span></a></span>åQŒè€Œæ˜¯<span lang="EN-US"><a ><span style="color: black">www.self.com</span></a> <br><br></span>  <span lang="EN-US"><a ><span style="color: black">www.xxx.com</span></a></span>讑֜¨æœ¬åœ°çš?span lang="EN-US">cookie</span>便å¯è¢«è¯»å‡?span lang="EN-US">!~~:D <br><br></span>ã€€ã€€ç„¶åŽæ ÒŽ®å…·ä½“æƒ…å†µä¿®æ”¹ä¸€çš„è„šæœ¬ï¼Œç”¨åŒæ ïLš„æ–ÒŽ³•åQŒå‘æ­?span lang="EN-US">cookie</span>中写å…?span lang="EN-US"><a ><span lang="EN-US" style="color: black"><span lang="EN-US">æ•°æ®</span></span></a></span>。修改完毕åŽåQŒåˆ æŽ?span lang="EN-US">hosts</span>æ–‡äšgåQŒå†é‡æ–°˜q›å…¥<span lang="EN-US"><a ><span style="color: black">www.xxx.com</span></a></span>åQŒæ­¤æ—¶å·²¾l大功告æˆï¼Œå¯äínå—ä½ çš?span lang="EN-US">hack</span>æˆæžœäº?span lang="EN-US">!~~~:) <br></span>  <span lang="EN-US"> <br></span>  <strong><span style="font-family: 宋体; mso-bidi-font-family: 宋体">¾~–åŽ</span></strong><b><span lang="EN-US"><br><br></span></b>  <span lang="EN-US">cookie</span>‹Æºéª—是一¿Uå‘现较早,且较难ä‹É用的<span lang="EN-US">hack</span>手法åQŒé™¤äº?span lang="EN-US">java script </span>å¯ä»¥æŽ§åˆ¶ä»¥å¤–åQ?span lang="EN-US">asp</span>½{‰ä¹Ÿå¯ä»¥ç”¨æ¥å¯¹å…¶˜q›è¿›è®„¡½®ã€‚所以在此声明,未必能对所有站ç‚ÒŽœ‰è¾ƒã€‚但<span lang="EN-US"><a ><span lang="EN-US" style="color: black"><span lang="EN-US">技æœ?/span></span></a></span>真实åQŒæ— ™åȽ®ç–?span lang="EN-US">! <br></span>  <span lang="EN-US"> <br></span>  补充åQšåœ¨<span lang="EN-US">win2000</span>ä¸?span lang="EN-US">hosts</span>æ–‡äšgçš„å¾ç«‹ä¸Ž<span lang="EN-US">win98</span>ä¸åŒåQŒéœ€è¦?span lang="EN-US">c:\winnt\system32\drivers\etc</span>æ–‡äšg夹中创å¾<span lang="EN-US">!<o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: arial"><o:p> </o:p></span></p> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><o:p> </o:p></span></p><img src ="http://www.shnenglu.com/woaidongmao/aggbug/71072.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/woaidongmao/" target="_blank">肥仔</a> 2009-01-03 16:44 <a href="http://www.shnenglu.com/woaidongmao/archive/2009/01/03/71072.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item><item><title>HttpWatch工具½Ž€ä»‹åŠä½¿ç”¨æŠ€å·?/title><link>http://www.shnenglu.com/woaidongmao/archive/2009/01/03/71070.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Sat, 03 Jan 2009 07:42:00 GMT</pubDate><guid>http://www.shnenglu.com/woaidongmao/archive/2009/01/03/71070.html</guid><wfw:comment>http://www.shnenglu.com/woaidongmao/comments/71070.html</wfw:comment><comments>http://www.shnenglu.com/woaidongmao/archive/2009/01/03/71070.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/woaidongmao/comments/commentRss/71070.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/woaidongmao/services/trackbacks/71070.html</trackback:ping><description><![CDATA[     摘è¦: HttpWatch download url:http://y8r9wg.blu.livefilestore.com/y1pO-ZAVV79QPsLDCb1ZVjNP8xc9kFEG7X2zsGQohemNzLBxxJdHkg-aEalzIwYH0uImhbgqrTd5ak/HttpWatch.Professional.v5.2.16%E6%B3%A8%E5%86%8C%E7%89%88.rar?...  <a href='http://www.shnenglu.com/woaidongmao/archive/2009/01/03/71070.html'>阅读全文</a><img src ="http://www.shnenglu.com/woaidongmao/aggbug/71070.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/woaidongmao/" target="_blank">肥仔</a> 2009-01-03 15:42 <a href="http://www.shnenglu.com/woaidongmao/archive/2009/01/03/71070.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item><item><title>Yahoo!¾|‘站性能最佳体验的34æ¡é»„金守åˆ?/title><link>http://www.shnenglu.com/woaidongmao/archive/2009/01/03/71069.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Sat, 03 Jan 2009 07:35:00 GMT</pubDate><guid>http://www.shnenglu.com/woaidongmao/archive/2009/01/03/71069.html</guid><wfw:comment>http://www.shnenglu.com/woaidongmao/comments/71069.html</wfw:comment><comments>http://www.shnenglu.com/woaidongmao/archive/2009/01/03/71069.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/woaidongmao/comments/commentRss/71069.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/woaidongmao/services/trackbacks/71069.html</trackback:ping><description><![CDATA[     摘è¦:       Yahoo!çš„Exceptional Performance团队为改善Webæ€§èƒ½å¸¦æ¥æœ€ä½›_®žè·üc€‚ä»–ä»¬äØ“æ­¤è¿›è¡Œäº†ä¸€¾pÕdˆ—的实验ã€å¼€å‘了å„ç§å·¥å…·ã€å†™äº†å¤§é‡çš„æ–‡ç« å’Œåšå®¢åƈ在儿U会议上å‚与探讨。最佛_®žè·ëŠš„核心ž®±æ˜¯æ—¨åœ¨æé«˜¾|‘站性能。Excetional Performance团队æ€È»“å‡ÞZº†ä¸€¾pÕdˆ—å¯ä»¥æé«˜¾|‘站速度的方法。å¯ä»¥åˆ†ä¸?大类34æ¡ã€‚包括内å®V€æœ...  <a href='http://www.shnenglu.com/woaidongmao/archive/2009/01/03/71069.html'>阅读全文</a><img src ="http://www.shnenglu.com/woaidongmao/aggbug/71069.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/woaidongmao/" target="_blank">肥仔</a> 2009-01-03 15:35 <a href="http://www.shnenglu.com/woaidongmao/archive/2009/01/03/71069.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item><item><title>¾l™TomcatåQŒApacheé…ç½®gzip压羃(HTTP压羃)功能http://www.shnenglu.com/woaidongmao/archive/2009/01/03/71064.html肥仔肥仔Sat, 03 Jan 2009 06:13:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2009/01/03/71064.htmlhttp://www.shnenglu.com/woaidongmao/comments/71064.htmlhttp://www.shnenglu.com/woaidongmao/archive/2009/01/03/71064.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/71064.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/71064.html阅读全文

]]>
介ç»ä¸¤ä¸ªb/så¼€å‘中我常用到的å°å·¥å…·http://www.shnenglu.com/woaidongmao/archive/2009/01/03/71063.html肥仔肥仔Sat, 03 Jan 2009 06:11:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2009/01/03/71063.htmlhttp://www.shnenglu.com/woaidongmao/comments/71063.htmlhttp://www.shnenglu.com/woaidongmao/archive/2009/01/03/71063.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/71063.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/71063.html½W¬ä¸€ä¸ªæ˜¯å¾®èÊY的一个å°ä¸œè¥¿,利用˜q™ä¸ªèƒ½å¤Ÿå¾ˆè½»æ„¡š„掌桾|‘页çš?span lang="EN-US">DOM¾l“æž„,对应那些¾l“构比较å¤åˆ¶çš„网™åµåˆ†æžå¾ˆæœ‰ç‰¹æ•?span lang="EN-US">.

clip_image002

 

iedevtoolbar下è²åœ°å€å¦‚下:

本地åQˆè¾ƒè€ç‰ˆæœ¬ï¼‰åQ?span lang="EN-US">http://files.cnblogs.com/JustinYoung/iedevtoolbar.rar

官方åQˆæœ€æ–°ç‰ˆæœ¬ï¼‰åQ?span lang="EN-US">http://www.microsoft.com/downloads/details.aspx?FamilyID=e59c3964-672d-4511-bb3e-2d5e1db91038&DisplayLang=en

 

½W¬äºŒä¸ªæ˜¯httpwatchpro,˜q™ä¸ªå·¥å…·ä¸»è¦åŠŸèƒ½æ˜¯ç›‘è§?span lang="EN-US">http的数æ?span lang="EN-US">,但是它也能让你看到相关网™å‰|ˆ–者样å¼è¡¨æ–‡äšg的内å®?span lang="EN-US">.

clip_image004

 

httpwatchpro下è²ä¸‹è²åœ°å€å¦‚下:

大å°é™åˆ¶åQŒåˆ†å·åŽ‹¾~©ã€?span lang="EN-US">

http://files.cnblogs.com/JustinYoung/httpwatchpro-v4.1.part1.rar

http://files.cnblogs.com/JustinYoung/httpwatchpro-v4.1.part2.rar

 

˜q™ä¸¤ä¸ªèÊY仉™ƒ½å¾ˆç®€å?span lang="EN-US">,åªæœ‰½Ž€å•的几个英文å•è¯,所以也没有必è¦ç”¨æ±‰åŒ–版.估计也没有ähä¼šåŽ»åšæ±‰åŒ–版.但是真是˜q™äº›½Ž€å•å°å·§çš„软äšg让我们的工作效率有了很大的æé«?span lang="EN-US">.工欲善其äº?span lang="EN-US">,必先善其å™?span lang="EN-US">.

 

KeyWordåQ?span lang="EN-US">webå¼€å‘å·¥å…?span lang="EN-US">,webå¼€å‘å°è½¯äšg,¾|‘页开å‘å·¥å…?span lang="EN-US">,¾|‘页开å‘å°è½¯äšg,iedevtoolbar下è²,iedevtoolbar教程,iedevtoolbar使用,iedevtoolbar帮助,httpwatch下è²,httpwatch教程,httpwatch帮助,httpwatch使用,httpwatchpro下è²,httpwatchpro教程,httpwatchpro帮助

 



]]>
如何æé«˜¾|‘页的效率(下篇åQ?amp;mdash;&mdash;Use YSlow to know why your web Slowhttp://www.shnenglu.com/woaidongmao/archive/2009/01/03/71062.html肥仔肥仔Sat, 03 Jan 2009 06:09:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2009/01/03/71062.htmlhttp://www.shnenglu.com/woaidongmao/comments/71062.htmlhttp://www.shnenglu.com/woaidongmao/archive/2009/01/03/71062.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/71062.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/71062.html

¾|‘站最é‡è¦çš„东西是什么?
—â€?/span>内容åQ?span lang="EN-US">SEO
åQˆæœç´¢å¼•擎优化)åQ?span lang="EN-US">UE
åQˆç”¨æˆ·ä½“验)åQŸéƒ½ä¸å¯¹åQ是速度åQ?span lang="EN-US">
内容å†ä¸°å¯Œçš„¾|‘ç«™åQŒå¦‚果慢到无法访问也是毫无æ„义的åQ?SEOåšçš„å†å¥½çš„网站,如果æœçƒ¦èœ˜è››æŠ“ä¸åˆîC¹Ÿæ˜¯ç™½æ?span lang="EN-US">(™åµé¢æ•ˆçŽ‡å’Œæœç´¢èœ˜è››ä¹‹é—´çš„关系åQŒéœ€è¦è¿›ä¸€æ­¥çš„¼‹®è®¤åQŒæ­¤ä¸ºå’Œä¸Šç¯‡ä¿æŒ¾lŸä¸€)åQ?span lang="EN-US"> UE设计的å†äººæ€§åŒ–的网站,如果用户˜qžçœ‹éƒ½çœ‹ä¸åˆ°ä¹Ÿæ˜¯½Iø™°ˆã€?

所以网™å늚„效率¾l对是最值得å…Ïx³¨çš„æ–¹é¢ã€‚虽然我们在 《如何æé«˜ç½‘™å늚„效率åQˆä¸Š½‹‡ï¼‰â€”â€?/span>æé«˜¾|‘页效率çš?4æ¡å‡†åˆ™ã€?/span>æåˆ°äº†å¦‚何æé«˜ç½‘™å‰|•ˆçŽ‡çš„14æ¡å‡†åˆ™ï¼Œä½†æ˜¯å¦‚ä½•çŸ¥é“æˆ‘们现在的网™å늚„效率到底如何åQŸåˆ°åº•处于怎样一个çñ”åˆ«ï¼Ÿåˆæœ‰å“ªäº›æ–šw¢åšçš„ä¸å¤Ÿå¥½ï¼Œéœ€è¦æ”¹˜q›å‘¢åQŸä¹Ÿè®¸ï¼Œä½ ä¼šè¯ß_¼Œé—®ä¸€ä¸‹ç”¨æˆ·ä¸ž®ÞqŸ¥é“了å—ï¼Ÿä½†æ˜¯ç›¸æ¯”æ„Ÿæ€§æ¯”ä¾‹å æ®å¤ªå¤§çš„用户感å—而言åQŒç†æ€§çš„å·¥å…·å’Œæ•°æ®æ›´å…ähœ‰è¯´æœåŠ›ã€‚æœ¬½‹‡å°±ž®†å‘你介¾l一‹Æ¾è¯„‹¹‹ç½‘™å‰|•ˆçŽ‡çš„å·¥å…·â€”â€”YSlowåQ?span lang="EN-US">why slowåQŒè¿™ä¸ªåå­—è“v的太好了åQ‰ã€?span lang="EN-US">

clip_image001
yslow

YSlow是由Yahooå¼€å‘者团é˜?/span>å‘布的一‹Æ‘ÖŸºäº?span lang="EN-US">Firebugçš„æ’件。è€?span lang="EN-US">Firebug åˆæ˜¯ä¸€‹Æ‘ÖŸºäº?span lang="EN-US">FireFoxçš„æ’件。所以说YSlow是一‹Æ‘ÖŸºäº?span lang="EN-US">FireFoxæ’äšgçš„æ’件。虽然有点绕åQŒä½†æ˜¯æœ€¾lˆè¯´æ˜Žçš„问题是:

·                          å¾ˆé—æ†¾ï¼Œå¾®èÊYçš?span lang="EN-US">IE¾pÕdˆ—‹¹è§ˆå™¨ä¸èƒ½ä‹Éç”?span lang="EN-US">YSlowã€?

·                          YSlowåªèƒ½ä½¿ç”¨åœ?span lang="EN-US">FireFox‹¹è§ˆå™¨ä¸Šã€?

·                          å¦‚æžœè¦æƒ³ä½¿ç”¨YSlowåQŒé‚£ä¹ˆä½ å¿…须先安è£?span lang="EN-US">FireFoxã€?

·                          å¦‚æžœè¦æƒ³ä½¿ç”¨YSlowåQŒé‚£ä¹ˆä½ ž®Þp¦å®‰è£…FireFox上的Firebugæ’äšgã€?

˜q™çœ‹ä¸ŠåŽ»å¥½åƒæœ‰ç‚¹ä»¤ähæ²®ä“áåQŒä½†æ˜¯äº‹å®žä¸Šå®ƒåƈä¸åƒæƒŒ™±¡ä¸­çš„那么éºÈƒ¦åQŒåªè¦æŒ‰ç…§ä¸‹é¢çš„æ­¥éª¤ä½ å°†èƒ½å¾ˆå¿«çš„使用YSlowåQ?span lang="EN-US">

1.            åˆ?span lang="EN-US">http://www.mozilla.net.cn/firefox/clip_image002 ä¸‹è²æœ€æ–°ç‰ˆçš?span lang="EN-US">FireFoxåQŒåƈ安装它。当然如果你已ç»å®‰è£…äº?span lang="EN-US">FireFoxå¯ä»¥è·Œ™¿‡æ­¤æ­¥ã€?

2.            åˆ?span lang="EN-US">https://addons.mozilla.org/en-US/firefox/addon/1843/clip_image002 ä¸‹è²æœ€æ–°ç‰ˆçš?span lang="EN-US">FirebugåQŒåƈ安装它。当然如果你已ç»å®‰è£…äº?span lang="EN-US">Firebugå¯ä»¥è·Œ™¿‡æ­¤æ­¥ã€?

3.            åˆ?span lang="EN-US">https://addons.mozilla.org/en-US/firefox/addon/5369/clip_image002 ä¸‹è²æœ€æ–°ç‰ˆçš?span lang="EN-US">YSlowåQŒåƈ安装它。当然如果你已ç»å®‰è£…äº?span lang="EN-US">YSlowå¯ä»¥è·Œ™¿‡æ­¤æ­¥ã€?

clip_image003
å›?span lang="EN-US">2åQšåœ¨èœå•中先打开Firebugæ’äšg

˜q™æ—¶å€™æ‰“å¼€FireFoxåQŒä½ ž®†åœ¨ã€å·¥å…—÷€‘èœå•中看到ã€?span lang="EN-US">firebug】(如图2åQ‰ã€‚打开firebugåQŒç„¶åŽåœ¨firebug中点å‡?span lang="EN-US">YSlowèœå•åQŒä¾¿çœ‹è¿›å…?span lang="EN-US">YSlow的主界é¢åQˆå¦‚å›?span lang="EN-US">3åQ‰ã€?span lang="EN-US">

clip_image005
å›?span lang="EN-US">3åQšåœ¨èœå•中先打开Firebugæ’äšg(点击ž®å›¾æŸ¥çœ‹å®Œæ•´å¤§å›¾)

点击ã€?span lang="EN-US">Performace】èœå?span lang="EN-US">

YSlowä¾¿å¼€å§‹åˆ†æžæ­¤™å늚„效率åQŒåƈä»?span lang="EN-US">13个最影哾|‘页效率的方é¢ç»™å‡ø™¯„伎ͼˆå¦‚图4åQ‰ã€?span lang="EN-US">

clip_image006
å›?span lang="EN-US">4åQ?span lang="EN-US">YSlow¾l™å‡ºçš„æœ¬™åµé¢æ•ˆçŽ‡è¯„ä¼°

å¯ä»¥çœ‹å‡ºæ¥ï¼ŒYSlowè¯„ä¼°çš„ä¾æ®å°±æ˜¯æˆ‘们在 《如何æé«˜ç½‘™å늚„效率åQˆä¸Š½‹‡ï¼‰â€”â€?/span>æé«˜¾|‘页效率çš?4æ¡å‡†åˆ™ã€?/span>中æåˆ°çš„å‰é¢13æ¡ã€‚å‰é¢è“色的字æ¯è¡¨ç¤º˜q™ä¸€æ¡å‡†åˆ™çš„得分ã€?span lang="EN-US">A最高。点å‡Õd³é¢çš„三角形å¯ä»¥å¾—到更多的信æ¯å’Œå¾è®®ï¼Œæœ‰äº›ä¿¡æ¯é‡Œé¢˜q˜æœ‰â€?/span>攑֤§é•?span lang="EN-US">â€?图标åQŒç‚¹å‡ÖM¹Ÿž®†å±•½Cºæ›´ä¸ø™¯¦¾l†çš„ä¿¡æ¯å’Œå¾è®®ã€‚(如图5所½Cºï¼‰

clip_image007
å›?span lang="EN-US">5åQ?span lang="EN-US">YSlowå¯ä»¥¾l™å‡ºæ¯æ¡å‡†åˆ™çš„详¾l†è¯„ä¼îC¿¡æ¯å’Œå»ø™®®

点击ã€?span lang="EN-US">Stats】èœå?span lang="EN-US">

˜q™ä¸ªè§†å›¾ä¼šå‘Šè¯‰ä½ ™åµé¢çš„æ€ÖM½“¾lŸè®¡ä¿¡æ¯ã€‚包括页é¢å¤§ž®ã€?span lang="EN-US">cssæ ·å¼è¡¨å¤§ž®ã€è„šæœ¬æ–‡ä»¶å¤§ž®ã€æ€ÖM½“囄¡‰‡å¤§å°ã€?span lang="EN-US">flashæ–‡äšg大å°å’?span lang="EN-US">css中用到的囄¡‰‡æ–‡äšg大å°ã€‚还会告诉你åQŒå“ªäº›ä¸œè¥¿è¢«¾~“存了,¾~“存了多ž®‘ç­‰½{‰ã€?span lang="EN-US">

clip_image008
å›?span lang="EN-US">6åQšã€?span lang="EN-US">Stats】视图信æ?span lang="EN-US">

点击ã€?span lang="EN-US">Components】èœå?span lang="EN-US">

˜q™ä¸ªè§†å›¾æ˜¯ä¸€ä¸ªé¡µé¢æ‰€æœ‰éƒ¨ä»¶çš„ä¿¡æ¯åˆ—表。从中我们å¯ä»¥å¾—知æ¯ä¸ªéƒ¨ä»¶çš„å„ç§è¯¦ç»†ä¿¡æ¯ã€‚如åQšç±»åž‹ã€?span lang="EN-US">URLã€?span lang="EN-US">Expiresæ•°æ®ã€çжæ€ã€å¤§ž®ã€è¯»å–æ—¶é—´ã€?span lang="EN-US">ETag信毽{‰ç­‰ã€‚通过对这个列表的分æžåQŒæˆ‘们就å¯ä»¥çŸ¥é“到底是什么东西最耗费我们的资æºï¼Œä»Žè€Œæœ‰é’ˆå¯¹æ€§çš„˜q›è¡Œä¼˜åŒ–ã€?span lang="EN-US">

clip_image010
å›?span lang="EN-US">7åQšã€?span lang="EN-US">Components】视图信æ¯ï¼Œç‚¹å‡»â€?/span>攑֤§é•?span lang="EN-US">â€?/span>图标我们å¯ä»¥çŸ¥é“更详¾l†çš„ä¿¡æ¯åQˆç‚¹å‡Õd°å›¾æŸ¥çœ‹å®Œæ•´å¤§å›¾ï¼‰

点击ã€?span lang="EN-US">Tools】èœå?span lang="EN-US">

ã€?span lang="EN-US">Tools】èœå•包å?span lang="EN-US">4个å­èœå•åQŒå°±æ˜?span lang="EN-US">4个实用工兗÷€‚ã€?span lang="EN-US">JSLine】工具会生æˆJSLine报表åQŒæŠ¥è¡¨æ˜¯å¯ÒŽœ¬¾|‘页ä¸?span lang="EN-US">JSè„šæœ¬çš„åˆ†æžæŠ¥å‘Šï¼ŒåŒ…å«é”™è¯¯å’Œå¾è®®ã€‚ã€?span lang="EN-US">ALL JSã€‘å·¥å…øP¼Œž®†ç”Ÿæˆæœ¬™åµé¢æ‰€æœ‰è„šæœ¬ä»£ç ä¾¿äºŽé˜…è¯Õd’Œæ‰“å°çš„æŠ¥è¡¨é¡µé¢ã€‚ã€?span lang="EN-US">ALL CSSã€‘å·¥å…øP¼Œž®†ç”Ÿæˆæœ¬™åµé¢æ‰€æœ?span lang="EN-US">CSSæ ·å¼è¡¨ä»£ç ä¾¿äºŽé˜…è¯Õd’Œæ‰“å°çš„æŠ¥è¡¨é¡µé¢ã€‚ã€?span lang="EN-US">Printable View】将ã€?span lang="EN-US">Performance】和ã€?span lang="EN-US">Stats】视图中的信æ¯ç”Ÿæˆä¸€ä»½æ›´é€‚åˆé˜…读和打å°çš„æŠ¥è¡¨™åµé¢ã€?span lang="EN-US">

clip_image011
å›?span lang="EN-US">8åQšã€?span lang="EN-US">Tools】èœå•,包å«äº?span lang="EN-US">4个å­èœå•

点击ã€?span lang="EN-US">Help】èœå?span lang="EN-US">

ã€?span lang="EN-US">Helpã€‘ä¸»è¦æ˜¯äº›å¸¸ç”¨çš„帮助途径的入å£ã€‚从˜q™é‡Œä½ å¯ä»¥å¾ˆæ–šw¢çš„访é—?span lang="EN-US">YSlow的官方网¾lœå’Œåšå®¢ã€‚如果你˜q˜å¯¹YSlowçš„ä‹É用有什么疑惑的è¯ï¼Œé‚£ä¹ˆåœ¨è¿™é‡Œä½ ž®†èŽ·å¾—æ»¡æ„的解答ã€?span lang="EN-US">

clip_image012
å›?span lang="EN-US">8åQšã€?span lang="EN-US">Help】èœå•是些常用的帮助入å£

 



]]>
如何æé«˜¾|‘页的效率(上篇åQ?amp;mdash;&mdash;æé«˜¾|‘页效率çš?4æ¡å‡†åˆ?/title><link>http://www.shnenglu.com/woaidongmao/archive/2009/01/03/71061.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Sat, 03 Jan 2009 06:05:00 GMT</pubDate><guid>http://www.shnenglu.com/woaidongmao/archive/2009/01/03/71061.html</guid><wfw:comment>http://www.shnenglu.com/woaidongmao/comments/71061.html</wfw:comment><comments>http://www.shnenglu.com/woaidongmao/archive/2009/01/03/71061.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/woaidongmao/comments/commentRss/71061.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/woaidongmao/services/trackbacks/71061.html</trackback:ping><description><![CDATA[     摘è¦: ¾|‘站最基本的东西是什么? ¾|‘站最基本的东西是什么?——内容?SEOåQˆæœç´¢å¼•擎优化)åQŸUEåQˆç”¨æˆ·ä½“验)åQŸéƒ½ä¸å¯¹åQ是速度åQ内容å†ä¸°å¯Œçš„网站,如果慢到无法讉K—®ä¹Ÿæ˜¯æ¯«æ— æ„义的; SEOåšçš„å†å¥½çš„网站,如果æœçƒ¦èœ˜è››æŠ“ä¸åˆîC¹Ÿæ˜¯ç™½æ­ï¼› UE设计的å†äººæ€§åŒ–的网站,如果用户˜qžçœ‹éƒ½çœ‹ä¸åˆ°ä¹Ÿæ˜¯½Iø™°ˆã€‚所以网™å늚„效率¾l对是最值得å…Ïx³¨çš„æ–¹é¢ã€‚如何æ‰èƒ½æé«˜ä¸€ä¸ªç½‘™å늚„效率呢?Steve Souders(Steve Souders...  <a href='http://www.shnenglu.com/woaidongmao/archive/2009/01/03/71061.html'>阅读全文</a><img src ="http://www.shnenglu.com/woaidongmao/aggbug/71061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/woaidongmao/" target="_blank">肥仔</a> 2009-01-03 14:05 <a href="http://www.shnenglu.com/woaidongmao/archive/2009/01/03/71061.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>¸ÐлÄú·ÃÎÊÎÒÃǵÄÍøÕ¾£¬Äú¿ÉÄÜ»¹¶ÔÒÔÏÂ×ÊÔ´¸ÐÐËȤ£º</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.fiyhigh.com.cn" target="_blank">¾«Æ·¾Ã¾Ã¾Ã¾Ã¾Ã¹ú²úÈý¼¶</a>| <a href="http://www.vufh.cn" target="_blank">ÈÕ±¾¾Ã¾Ã¾Ã¾«Æ·ÖÐÎÄ×ÖÄ»</a>| <a href="http://www.vgqk.cn" target="_blank">¹ú²úÒ»Çø¶þÇø¾«Æ·¾Ã¾Ã°¼Í¹ </a>| <a href="http://www.haoxiaoli.cn" target="_blank">ÈÕ±¾¹ú²ú¾«Æ·¾Ã¾Ã</a>| <a href="http://www.fl07.cn" target="_blank">¾Ã¾Ã¾«Æ·¹ú²ú99¾Ã¾Ã¾ÃÏã½¶</a>| <a href="http://www.ssxgsl.cn" target="_blank">ÎÞÂëÈËÆÞÉÙ¸¾¾Ã¾ÃÖÐÎÄ×ÖÄ»</a>| <a href="http://www.foundxy.cn" target="_blank">¾«Æ·¹ú²ú91¾Ã¾Ã¾Ã¾Ã¾Ã¾Ãa</a>| <a href="http://www.hotfan.cn" target="_blank">ÑÇÖÞ¹ú²ú¾«Æ·Ò»Çø¶þÇøÈýÇø¾Ã¾Ã</a>| <a href="http://www.vxfawh.cn" target="_blank">Ò»±¾¾Ã¾ÃÃâ·ÑÊÓÆµ</a>| <a href="http://www.c12252.cn" target="_blank">¾Å¾Å¾«Æ·99¾Ã¾Ã¾ÃÏã½¶</a>| <a href="http://www.forexpo.cn" target="_blank">¹ú²ú¾«Æ·99¾Ã¾Ã²»¿¨</a>| <a href="http://www.chec-qhd.com.cn" target="_blank">¾Ã¾Ã¾ÃÎÞÂ뾫ƷÑÇÖÞÈÕº«ÃÛÍÎÀ˳±</a>| <a href="http://www.rootwiremesh.cn" target="_blank">ÑÇÖÞ¾«Æ·¸ßÇå¹ú²úÒ»Ï߾þÃ</a>| <a href="http://www.kuaiyanapp.com.cn" target="_blank">¹ú²ú¾«Æ·¾Ã¾Ã¾Ã¾Ã¾Ã¾Ã¾ÃÃâ·Ñ</a>| <a href="http://www.daidai360.cn" target="_blank">99¾Ã¾Ã¾«Æ·Ãâ·Ñ¹Û¿´¹ú²ú</a>| <a href="http://www.myloveshop.com.cn" target="_blank">ÑÇÖÞ&#228;vÓÀ¾ÃÎÞÂ뾫ƷÌìÌþþà </a>| <a href="http://www.hqfood.com.cn" target="_blank">É«Ììʹ¾Ã¾Ã×ÛºÏÍøÌìÌì</a>| <a href="http://www.wd12cjf8.cn" target="_blank">¾Ã¾Ã¾Ã¾ÃÎÞÂ뾫Ʒ¹ú²ú</a>| <a href="http://www.wanhejingshui.cn" target="_blank">¾«Æ·¾Ã¾Ã¾Ã¾ÃÖÐÎÄ×Ö</a>| <a href="http://www.grzzc358.cn" target="_blank">ÑÇÖÞ¾«Æ·¹ú²úÃÀÅ®¾Ã¾Ã¾Ã</a>| <a href="http://www.nsom.org.cn" target="_blank">97¾«Æ·¹ú²ú97¾Ã¾Ã¾Ã¾Ã¾ÃÃâ·Ñ</a>| <a href="http://www.vzaw.cn" target="_blank">¾Ã¾Ã¾Ã¾ÃÃâ·Ñ¾«Æ·¹ú²ú</a>| <a href="http://www.citysoso.cn" target="_blank">99¾Ã¾ÃÒÁÈ˾«Æ·×ۺϹۿ´</a>| <a href="http://www.hwwy.net.cn" target="_blank">ÑÇÖÞavÈÕº«¾«Æ·¾Ã¾Ã¾Ã¾Ã¾Ãa</a>| <a href="http://www.zs021.cn" target="_blank">¹ú²ú¾«Æ·ÈÕº«ÉîÒ¹¸£Àû¾Ã¾Ã </a>| <a href="http://www.chindr-nb.cn" target="_blank">³ÉÈËÎçÒ¹¾«Æ·¾Ã¾Ã¾Ã¾Ã¾Ã¾ÃС˵</a>| <a href="http://www.ypiu.cn" target="_blank">¾Ã¾Ã¾Ã¹ú²ú99¾Ã¾Ã¹ú²úÒ»</a>| <a href="http://www.jianhua365.cn" target="_blank">Ïã½¶¾Ã¾ÃÒ»Çø¶þÇø²»¿¨ÎÞ¶¾Ó°Ôº</a>| <a href="http://www.o33k.cn" target="_blank">¾Ã¾Ã¾Ã¾Ã¾Ã¾«Æ·Ãâ·ÑÃâ·Ñ×Ôο</a>| <a href="http://www.zzdls.cn" target="_blank">91¾Ã¾Ã¾Å¾ÅÎÞÂë³ÉÈËÍøÕ¾</a>| <a href="http://www.sf789.com.cn" target="_blank">ÑÇÖÞÅ·ÖÞÈÕ²ú¹úÂëÎÞÂë¾Ã¾Ã99</a>| <a href="http://www.567uu.cn" target="_blank">¾Ã¾Ã99¾Ã¾ÃÎÞÂëÃ«Æ¬Ò»Çø¶þÇø</a>| <a href="http://www.txdqlxx.cn" target="_blank">¾Ã¾ÃÑÇÖÞ¾«Æ·³ÉÈËAV</a>| <a href="http://www.dgdike.cn" target="_blank">²¨¶àÒ°½áÒ¾þÃÒ»Çø¶þÇø</a>| <a href="http://www.lntyyp.cn" target="_blank">¾«Æ·¾Ã¾ÃÈËÈË×öÈËÈËˬ×ÛºÏ </a>| <a href="http://www.psia.cn" target="_blank">¹ú²ú¾«Æ·¾Ã¾Ã¾ÃÑÇÖÞ</a>| <a href="http://www.shangxuewenhua.cn" target="_blank">³¬¼¶ÅöÅöÅöÅö97¾Ã¾Ã¾Ã¾Ã</a>| <a href="http://www.bpdb.com.cn" target="_blank">¾Ã¾ÃÖÐÎÄ×ÖÄ»ÊÓÆµ¡¢×î½ü¸üÐÂ</a>| <a href="http://www.brill-sh.com.cn" target="_blank">¾Ã¾Ã99ÖÐÎÄ×ÖÄ»¾Ã¾Ã</a>| <a href="http://www.jswlgs.cn" target="_blank">¿´¾Ã¾Ã¾Ã¾Ã¾Ãa¼¶Ã«Æ¬</a>| <a href="http://www.00dh.cn" target="_blank">A¼¶Ã«Æ¬ÎÞÂë¾Ã¾Ã¾«Æ·Ãâ·Ñ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>