ä¸ÀLµçš„æ•°æ®åº“有Sun的是MySQLå’ŒOracleã€?br />Oracle是一‹Æ¾ä¼˜¿U€çš„ã€å¹¿æ³›é‡‡ç”¨çš„商业数æ®åº“管ç†èÊY件。有很强大的功能和安全性,å¯ä»¥å¤„ç†ç›¸å¯¹‹¹·é‡çš„æ•°æ®ã€‚而MySQL是一‹ÆùNžå¸æ€¼˜¿U€çš„å¼€æºæ•°æ®åº“½Ž¡ç†è½¯äšgåQŒéžå¸”R€‚åˆç”¨å¤šå°PC Server¾l„æˆå¤šç‚¹çš„å˜å‚¨èŠ‚ç‚šw˜µåˆ?˜q™é‡Œæˆ‘æ‰€æŒ‡çš„ä¸æ˜¯MySQL自èínæä¾›çš„集¾Ÿ¤åŠŸèƒ?åQŒæ¯å•ä½çš„æ•°æ®å˜å‚¨æˆæœ¬ä¹Ÿéžå¸¸çš„低廉。用多å°PC Server安装MySQL¾l„æˆä¸€ä¸ªå˜å‚¨èŠ‚ç‚šw˜µåˆ—,通过MySQL自èínçš„Replication或者应用自íw«çš„处ç†åQŒå¯ä»¥å¾ˆå¥½çš„ä¿è¯å®šw”™(å…许部分节点失效)åQŒä¿è¯åº”用的å¥å£®æ€§å’Œå¯é 性。å¯ä»¥è¿™ä¹ˆè¯´åQŒåœ¨å…³ç³»æ•°æ®åº“管ç†ç³»¾lŸçš„选择上,å¯ä»¥è€ƒè™‘应用本èín的情冉|¥å†›_®šã€?/p>
MySQLæ•°æ®åº“æœåŠ¡å™¨çš„master-slave模å¼åQŒåˆ©ç”¨æ•°æ®åº“æœåŠ¡å™¨åœ¨ä¸ÖM»ŽæœåС噍间˜q›è¡ŒåŒæ¥åQŒåº”ç”¨åªæŠŠæ•°æ®å†™åˆîC¸»æœåŠ¡å™¨ï¼Œè€Œè¯»æ•°æ®æ—¶åˆ™æ ÒŽ(gu¨©)®è´Ÿè²é€‰æ‹©ä¸€åîC»ŽæœåŠ¡å™¨æˆ–è€…ä¸»æœåС噍æ¥è¯Õd–åQŒå°†æ•°æ®æŒ‰ä¸åŒç–略划分到ä¸åŒçš„æœåŠ¡å™¨åQˆç»„åQ‰ä¸ŠåQŒåˆ†æ•£æ•°æ®åº“压力ã€?/p>
å¦å¤–˜q˜æœ‰ä¸€ç‚¹çš„æ˜¯ï¼Œé‚£äº›¾|‘ç«™çš„é™æ€åŒ–¾|‘页òq¶ä¸æ˜¯çœŸçš„,而是通过动æ€ç½‘™åµä¸Žé™æ€ç½‘™å늽‘å€äº¤æ¢æ‰€å‡ºçŽ°çš„å‡è±?/span>åQŒè¿™å¯ä»¥ç”¨urlrewrite˜q™æ ·çš„å¼€æºç½‘倿˜ 射器实现。这æ ïL(f¨¥ng)š„¾|‘站实时性也是相对的åQŒå› 为在数æ®åº“å¤åˆ¶æ•°æ®çš„æ—¶å€™æœ‰ä¸€ä¸ªè¿‡½E‹ï¼Œä¸€èˆ?span style="text-decoration: underline">在技术上å¯ä»¥ç”¨åˆ°hibernateå’ŒecacheåQŒä½†æ˜¯å¦‚æžœè¦ä½¿ç½‘站工作地更好åQ?span style="text-decoration: underline">å¯ä»¥ä½¿ç”¨EJBå’ŒwebsphereåQŒweblogic˜q™æ ·å¤§åž‹çš„æœåŠ¡å™¨æ¥æ”¯æŒï¼Œòq¶ä¸”è¦ç”¨oracle˜q™æ ·çš„大型数æ®åº“ã€?br />大型门户¾|‘ç«™ä¸å¾è®®ä‹É用Mysqlæ•°æ®åº“,除éžä½ 对Mysqlæ•°æ®çš„优化éžå¸¸ç†Ÿæ‚(zh¨¨n)‰ã€‚Mysqlæ•°æ®åº“æœåŠ¡å™¨çš„master-slave模å¼åQŒåˆ©ç”¨æ•°æ®åº“æœåŠ¡å™¨åœ¨ä¸ÖM»ŽæœåС噍间˜q›è¡ŒåŒæ¥åQ?span style="text-decoration: underline">åº”ç”¨åªæŠŠæ•°æ®å†™åˆ°ä¸ÀLœåС噍åQŒè€Œè¯»æ•°æ®æ—¶åˆ™æ ÒŽ(gu¨©)®è´Ÿè²é€‰æ‹©ä¸€åîC»ŽæœåŠ¡å™¨æˆ–è€…ä¸»æœåС噍æ¥è¯Õd–åQŒå°†æ•°æ®æŒ‰ä¸åŒç–略划分到ä¸åŒçš„æœåŠ¡å™¨åQˆç»„åQ‰ä¸ŠåQŒåˆ†æ•£æ•°æ®åº“压力ã€?/span>
大型¾|‘ç«™è¦ç”¨oracleåQŒæ•°æ®æ–¹é¢æ“作尽é‡å¤šç”¨å˜å‚¨è¿‡½E‹ï¼Œ¾l对æå‡æ€§èƒ½åQ›åŒæ—¶è¦è®©DBAå¯ÒŽ(gu¨©)•°æ®åº“˜q›è¡Œä¼˜åŒ–åQŒä¼˜åŒ–åŽçš„æ•°æ®åº“与没优化的有天壤之别åQ›åŒæ—¶è¿˜å¯ä»¥æ‰©å±•åˆ†å¸ƒå¼æ•°æ®åº“åQŒä»¥åŽè¿™æ–šw¢çš„ç ”½I¶ä¼š(x¨¬)‘Šæ¥‘Šå¤šåQ?br />
5ã€é¡µé?br />从开始就考虑使用虚拟å˜å‚¨/½‡æ–‡ä»¶ç³»¾lŸã€‚å®ƒèƒ½è®©ä½ å¤§é‡åƈ行IO讉K—®åQŒè€Œä¸”ä¸éœ€è¦ä“Q何釾l„å°±èƒ½å¤Ÿå¢žåŠ æ‰€éœ€è¦çš„¼‚ç›˜ã€?br />™åµé¢æ•°æ®è°ƒç”¨æ›´è¦è®¤çœŸè®¾è®¡åQŒä¸€äº›æ•°æ®æŸ¥è¯¢å¯ä»¥ä¸é€šè¿‡æ•°æ®åº“的方å¼åQŒå®žæ—¶æ€§è¦æ±‚ä¸é«˜çš„å¯ä»¥ä½¿ç”¨luceneæ¥å®žçŽŽÍ¼Œå³ä‹Éæœ‰å®žæ—¶æ€§çš„è¦æ±‚也å¯ä»¥ç”¨luceneåQˆåŸºäºŽJava的全文烦å¼?‹‚€ç´¢å¼•擎)åQŒlucene+compass˜q˜æ˜¯éžå¸¸ä¼˜ç§€çš„ã€?br />æ–°é—»¾cÈš„¾|‘ç«™å¯ä»¥ç”¨é™æ€é¡µå˜å‚¨åQŒé‡‡ç”¨å®šæ—¶æ›´æ–°æœºåˆ¶å‡è½ÀLœåŠ¡å™¨è´Ÿæ‹…åQ›é¦–™å‰|¯ä¸ªå°æ¨¡å—å¯ä»¥ä½¿ç”¨oscache¾~“å˜åQŒè¿™æ ·ä¸ç”¨æ¯‹Æ¡éƒ½æ‹‰æ•°æ®ã€?br />å‰ç«¯çš„åŸºäºŽé™æ€é¡µé¢ç¼“å˜çš„webåŠ é€Ÿå™¨åQŒä¸»è¦åº”用有squid½{‰ã€?span style="text-decoration: underline">squid ž®†å¤§éƒ¨åˆ†é™æ€èµ„æº?囄¡‰‡åQŒjsåQŒcss½{‰ï¼‰¾~“å˜èµäh¥åQŒç›´æŽ¥è¿”回给讉K—®è€…,å‡å°‘应用æœåŠ¡å™¨çš„è´Ÿè²
¾|‘ç«™çš„é™æ€åŒ–¾|‘页òq¶ä¸æ˜¯çœŸçš„,而是通过动æ€ç½‘™åµä¸Žé™æ€ç½‘™å늽‘å€äº¤æ¢åšå‡ºçŽ°çš„å‡è±¡åQŒè¿™å¯ä»¥ç”¨urlrewrite˜q™æ ·çš„å¼€æºç½‘倿˜ 射器实玎ͼŒåŽç¼€å䨓(f¨´)htm或者htmlòq¶ä¸èƒ½è¯´æ˜Žç¨‹åºç”Ÿæˆäº†é™æ€é¡µé¢ï¼Œå¯èƒ½æ˜¯é€šè¿‡urlé‡å†™æ¥å®žçŽ°çš„åQŒäØ“(f¨´)çš„åªä¸è¿‡æ˜¯åœ¨æœçƒ¦å¼•æ“Žä¸æå‡è‡ªå·Þq½‘站的覆盖é¢ç§¯¾|¢äº†ã€?br />生æˆé™æ€é¡µé¢çš„æœåŠ¡å™¨å’ŒwwwæœåŠ¡å™¨æ˜¯ä¸¤ç»„ä¸åŒçš„æœåŠ¡å™¨åQŒé¡µé¢ç”ŸæˆåŽæ‰ä¼š(x¨¬)到wwwæœåŠ¡å™¨ï¼Œä¸€éƒ¨åˆ†æ•°æ®åº“åÆˆä¸æ˜¯å…³ç³»æ•°æ®åº“,˜q™æ ·æ›´é€‚åˆä¿¡æ¯è¡ç”ŸåQŒwwwã€mailæœåС噍ã€èµ\由器多,主è¦ç”¨è´Ÿè½½åã^衡解册™®¿é—®ç“¶é¢ˆã€?br />◎ 陿€é¡µé¢çš„¾~ºç‚¹åQ?br />1) å¢žåŠ äº†ç¨‹åºçš„夿‚åº?br />2) ä¸åˆ©äºŽç®¡ç†èµ„æ–?br />3) é€Ÿåº¦ä¸æ˜¯æœ€å¿?br />4) 伤硬ç›?br />
6ã€ç¼“å?br />从一开始就应该使用¾~“å˜åQŒé«˜é€Ÿç¼“å˜æ˜¯ä¸€ä¸ªæ›´å¥½çš„地方å˜å‚¨ä¸´æ—¶æ•°æ®åQŒæ¯”如Web站点上跟ítªä¸€ä¸ªç‰¹å®šç”¨æˆïL(f¨¥ng)š„ä¼?x¨¬)è¯äº§ç”Ÿçš„ä?f¨´)æ—¶æ–‡ä»Óž¼Œž®×ƒ¸å†éœ€è¦è®°å½•到数æ®åº“里ã€?br />ä¸èƒ½ç”¨lucene实现的å¯ä»¥ç”¨¾~“å˜åQŒåˆ†å¸ƒå¼¾~“å˜å¯ä»¥ç”¨memcachedåQŒå¦‚果有é’Þqš„è¯ç”¨10æ¥å°æœºå™¨åšç¼“å˜ï¼Œ> 10Gçš„å˜å‚¨é‡ç›æ€¿¡å˜ä»€ä¹ˆéƒ½å¤Ÿäº†åQ›å¦‚果没é’Þqš„è¯å¯ä»¥åœ¨™åµé¢¾~“å˜å’Œæ•°æ®ç¼“å˜ä¸Šä¸‹åŠŸå¤«ï¼Œå¤šç”¨OSCACHEå’ŒEHCACHEåQŒSWARMCACHE也å¯ä»¥ï¼Œä¸è¿‡æ®è¯´åŒæ¥æ€§ä¸æ˜¯å¾ˆå¥½ï¼›
å¯ä»¥ä½¿ç”¨MemcacheåQˆåˆ†å¸ƒå¼¾~“å˜åQ‰è¿›è¡Œç¼“å˜ï¼Œç”¨å¤§å†…å˜æŠŠè¿™äº›ä¸å˜çš„æ•°æ®å…¨éƒ½¾~“å˜èµäh¥åQŒè€Œå½“修改时就通知cache˜q‡æœŸåQŒmemcache是LJå¼€å‘的一‹Æ‘Öˆ†å¸ƒå¼¾~“å˜äº§å“åQŒå¾ˆå¤šå¤§åž‹ç½‘站在应用åQŒæˆ‘们å¯ä»¥æŠŠCache Server与App Server装在一èµ?/span>ã€‚å› ä¸ºCache Server对CPU消耗ä¸å¤§ï¼Œè€Œæœ‰äº†Cache Server的支æß_(d¨¢)¼ŒApp Server对内å˜è¦æ±‚ä¹Ÿä¸æ˜¯å¤ªé«˜åQŒæ‰€ä»¥å¯ä»¥å’Œòq›_…±å¤„,更有效的利用资æºã€?/p>
啿œºå†…嘾~“å˜ã€æ–‡ä»¶ç¼“å˜ã€æ•°æ®åº“¾~“嘽{‰çš„½{–略都是å¯ä»¥å¾ˆç®€å•的实现的,例如å¯ä»¥ä½¿ç”¨å¾®èÊYçš„Caching Application BlockåQŒä½†å¦‚何在集¾Ÿ¤çŽ¯å¢ƒä¸ä½¿å¤šä¸ªç¼“å˜ã€å¤šå±‚缓å˜åƈä¿å˜åŒæ¥æ˜¯ä¸ªé‡å¤§é—®é¢˜ã€‚大型网站一般都使用¾~“å˜æœåŠ¡å™¨ç¾¤åQŒåƈ使用多层¾~“å˜ã€‚业内最常用的有åQ?/p>
Squid cacheåQŒSquidæœåŠ¡å™¨ç¾¤åQŒæŠŠå®ƒä½œä¸ºwebæœåŠ¡å™¨ç«¯å‰ç½®cacheæœåŠ¡å™¨ç¼“å˜ç›¸å…Œ™¯·æ±‚æ¥æé«˜webæœåŠ¡å™¨é€Ÿåº¦ã€‚Squidž®†å¤§éƒ¨åˆ†é™æ€èµ„æº?囄¡‰‡åQŒjsåQŒcss½{‰ï¼‰¾~“å˜èµäh¥åQŒç›´æŽ¥è¿”回给讉K—®è€…,å‡å°‘应用æœåŠ¡å™¨çš„è´Ÿè²
memcacheåQŒmemcacheæœåŠ¡å™¨ç¾¤åQŒä¸€‹Æ‘Öˆ†å¸ƒå¼¾~“å˜äº§å“åQŒå¾ˆå¤šå¤§åž‹ç½‘站在应用; 它å¯ä»¥åº”对ä“Qæ„多个连接,使用éžé˜»å¡žçš„¾|‘络IO。由于它的工作机制是在内å˜ä¸å¼€è¾Ÿä¸€å—空é—ß_(d¨¢)¼Œç„¶åŽå»ºç«‹ä¸€ä¸ªHashTableåQŒMemcached自管ç†è¿™äº›HashTableã€‚å› ä¸ºé€šå¸¸¾|‘站应用½E‹åºä¸æœ€è€—费旉™—´çš„ä“Q务是数æ®åœ¨æ•°æ®åº“的检索,而多个用æˆähŸ¥è¯¢ç›¸åŒçš„SQLæ—Óž¼Œæ•°æ®åº“压力会(x¨¬)增大åQŒè€Œé€šè¿‡memcache的查询缓å˜å‘½ä¸ï¼Œæ•°æ®ç›´æŽ¥ä»Žmemcache内å˜ä¸å–åQŒæ¯‹Æ¡ç¼“å˜å‘½ä¸å°†æ›¿æ¢åˆ°æ•°æ®åº“æœåŠ¡å™¨çš„ä¸€‹Æ¡å¾€˜q”,到达数æ®åº“æœåŠ¡å™¨çš„è¯·æ±‚æ›´ž®‘,间接地æé«˜äº†æ•°æ®åº“æœåŠ¡å™¨çš„æ€§èƒ½åQŒä»Žè€Œä‹É应用½E‹åº˜q行得更快。它通过åŸÞZºŽå†…嘾~“å˜å¯¹è±¡æ¥å‡ž®‘æ•°æ®åº“æŸ¥è¯¢çš„æ–¹å¼æ”¹å–„网站系¾lŸçš„å应åQŒå…¶æœ€å¸å¼•人的一个特性就是支æŒåˆ†å¸ƒå¼éƒ¨çÖv。有关memcacheåQŒä»¥ä¸‹æ–‡ç« å¯ä»¥å‚考:(x¨¬)å‚è€?åQ?a target="_blank">å‚è€?åQ?a target="_blank">å‚è€?官方站点ã€?/p>
e-AcceleratoråQŒæ¯”较特ŒDŠï¼ŒPHP的缓å˜å’ŒåŠ é€Ÿå™¨ã€‚æ˜¯ä¸€ä¸ªå…费开æºçš„PHPåŠ é€Ÿã€ä¼˜åŒ–ã€ç¼–译和动æ€ç¼“å˜çš„™å¹ç›®åQŒå®ƒå¯ä»¥é€šè¿‡¾~“å˜PHPä»£ç ¾~–译åŽçš„¾l“æžœæ¥æé«˜PHP脚本的性能åQŒä‹É得一å‘å¾ˆå¤æ‚和离我们很远çš?PHP脚本¾~–译问题完全得到解决。通过使用eAcceleratoråQŒå¯ä»¥ä¼˜åŒ–ä½ çš„PHPä»£ç æ‰§è¡Œé€Ÿåº¦åQŒé™ä½ŽæœåŠ¡å™¨è´Ÿè²åQŒå¯ä»¥æé«˜PHP应用执行速度最高达10å€ã€?/p>
7ã€æœåС噍æ“作¾pÈ»Ÿä¸ŽWebæœåŠ¡å™?br />最底层首先是æ“作系¾lŸã€‚好的æ“作系¾lŸèƒ½æé«˜å¥½çš„æ€§èƒ½ã€ç¨³å®šæ€§å’Œå®‰å…¨æ€§ï¼Œè€Œè¿™äº›å¯¹å¤§åž‹¾|‘站的性能ã€å®‰å…¨æ€§å’Œ½E›_®šæ€§éƒ½æ˜¯è‡³å…³é‡è¦çš„ã€?/p>
ç”±æ¤å¯è§åQŒå¼€æºæ“作系¾lŸåšWeb应用是首选已¾læ˜¯ä¸€ä¸ªæ—¢å®šäº‹å®žã€‚åœ¨å¼€æºæ“作系¾lŸä¸Linuxå’ŒFreeBSDå·®ä¸å¤ªå¤šåQŒå¾ˆéš¾è¯´å“ªä¸ªä¸€å®šæ¯”å¦å¤–一个è¦ä¼˜ç§€å¾ˆå¤šã€èƒ½å¤Ÿå…¨é¢çš„‘…è¶Šå¯ÒŽ(gu¨©)‰‹åQŒåº”è¯¥æ˜¯å„æœ‰æ‰€é•Ñ€‚但熟æ?zh¨¨n)‰Linuxçš?span>技æœ?/span>人员更多些,利于¾pÈ»Ÿ½Ž¡ç†ã€ä¼˜åŒ–ç‰åQŒæ‰€ä»¥Linux使用更广泛。而W(xu¨¦)indows Serverå’ŒIIS虽然有的¾|‘站使用åQŒä½†ä¸å¼€æºï¼Œè€Œä¸”需è¦è´ä¹?span>å¾®èÊY的一¾pÕdˆ—应用产å“åQŒé™åˆ¶äº†å…¶ä‹É用。æ€ÖM¹‹åQŒå¼€æºæ“作系¾lŸï¼Œž®¤å…¶æ˜¯LinuxåšWeb应用是首选已¾l是一个既定事实ã€?br />常用的系¾lŸæž¶æž„是:
以上一些ä¸å¤ªæˆç†Ÿçš„æƒÏx³•åQŒå¯ä»¥ä»ŽæŸä¸€ä¸ªå±‚‹Æ¡å¼€å§‹ï¼Œé€æ¥¾l†åŒ–åQŒæŠŠäº§å“çš„æ€§èƒ½æŒ‡æ ‡æé«˜ä¸ŠåŽ»ã€?br />
注:(x¨¬)ç”׃ºŽJVM内å˜è®„¡½®è¾ƒå¤§åQŒå›¾ä¸ç™¾åˆ†æ¯”å˜åŒ–ä¸å¤ªæ˜Žæ˜¾
图ä¸å‚æ•°å«ä¹‰å¦‚下åQ?/p>
S0 — Heap上的 Survivor space 0 区已使用½Iºé—´çš„百分比
S1 — Heap上的 Survivor space 1 区已使用½Iºé—´çš„百分比
E — Heap上的 Eden space 区已使用½Iºé—´çš„百分比
O — Heap上的 Old space 区已使用½Iºé—´çš„百分比
P — Perm space 区已使用½Iºé—´çš„百分比
YGC — 从应用程åºå¯åŠ¨åˆ°é‡‡æ ·æ—¶å‘ç”?Young GC 的次æ•?br /> YGCT– 从应用程åºå¯åŠ¨åˆ°é‡‡æ ·æ—?Young GC 所用的旉™—´(å•使U?
FGC — 从应用程åºå¯åŠ¨åˆ°é‡‡æ ·æ—¶å‘ç”?Full GC 的次æ•?br /> FGCT– 从应用程åºå¯åŠ¨åˆ°é‡‡æ ·æ—?Full GC 所用的旉™—´(å•使U?
GCT — 从应用程åºå¯åŠ¨åˆ°é‡‡æ ·æ—¶ç”¨äºŽåžƒåœ‘Ö›žæ”¶çš„æ€ÀL—¶é—?å•使U?
上图的示例,¾U¢æ¡†ä¸ï¼Œæˆ‘们å¯ä»¥çœ‹åˆ°åQ?‹Æ¡young gc之åŽåQŒåžƒåœ‘Ö†…å˜è¢«ä»ŽEden spaceåŒ?E)攑օ¥äº†Old spaceåŒ?O)åQŒåƈ引è“v了百分比的å˜åŒ–ï¼Œå¯ÆD‡´Survivor space使用的百分比ä»?9.69%(S0)é™åˆ°10.34%(S1)。有效释放了内嘽Iºé—´ã€‚绿框ä¸åQŒæˆ‘们å¯ä»¥çœ‹åˆŽÍ¼Œä¸€‹Æ¡full gc之åŽåQŒOld spaceåŒ?O)的内å˜è¢«å›žæ”¶åQŒä»Ž36.81%é™åˆ°35.01%ã€?/p>
图ä¸åŒæ—¶æ‰“å°äº†young gcå’Œfull gcçš„æ€ÀL¬¡æ•°ã€æ€»è€—æ—¶ã€‚è€Œï¼Œæ¯æ¬¡young gc消耗的旉™—´åQŒå¯ä»¥ç”¨ç›”R—´éš”的两行YGCT相å‡å¾—到。毋ơfull gc消耗的旉™—´åQŒå¯ä»¥ç”¨ç›”Rš”的两行FGCT相å‡å¾—到。例如红框ä¸è¡¨ç¤ºçš„第一行ã€ç¬¬äºŒè¡Œä¹‹é—´å‘生äº?‹Æ¡young gcåQŒæ¶ˆè€—的旉™—´ä¸?2.281-52.252åQ?.029¿U’ã€?/p>
帔R©»å†…å˜åŒ?P)çš„ä‹É用率åQŒå§‹¾lˆåœç•™åœ¨37.6%å·¦å³åQŒè¯´æ˜Žå¸¸é©Õd†…å˜æ²¡æœ‰çªå˜ï¼Œæ¯”较æ£å¸¸ã€?/p>
如果young gcå’Œfull gc能够æ£å¸¸å‘生åQŒè€Œä¸”都能有效回收内å˜åQŒå¸¸é©Õd†…å˜åŒºå˜åŒ–䏿˜Žæ˜¾ï¼Œåˆ™è¯´æ˜Žjava内å˜é‡Šæ”¾æƒ…况æ£å¸¸åQŒåžƒåœ‘Ö›žæ”¶åŠ(qi¨¢ng)æ—Óž¼Œjavaå†…å˜æ³„éœ²çš„å‡ çŽ‡å°±ä¼?x¨¬)大大é™ä½Žã€‚但也ä¸èƒ½è¯´æ˜Žä¸€å®šæ²¡æœ‰å†…å˜æ³„霌Ӏ?/p>
以上åQŒä»‹¾l了Jstat按百分比查看gcæƒ…å†µçš„åŠŸèƒ½ã€‚å…¶å®žï¼Œå®ƒè¿˜æœ‰å…¶å®ƒåŠŸèƒ½ï¼Œä¾‹å¦‚åŠ è²¾cÖM¿¡æ¯ç»Ÿè®¡åŠŸèƒ½ã€å†…å˜æ± 信毾lŸè®¡åŠŸèƒ½½{‰ï¼Œé‚£äº›æ˜¯ä»¥¾lå¯¹å€¼çš„å½¢å¼æ‰“å°å‡ºæ¥çš„,比较?y¨u)®‘用åQŒåœ¨æ¤å°±ä¸åšä»‹ç»ã€?/p>
ä¸ÞZº†æ›´å…¨é¢çš„监控JVM内å˜ä½¿ç”¨æƒ…况åQŒæˆ‘们需è¦å¼•入更强大的工å…äh¥˜q›ä¸€æ¥åˆ†æž?#8211;JConsole。敬请关注ã€?/p>
--------
ä¸€ã€æ¦‚˜q?/strong>
SUN çš„JDKä¸çš„å‡ ä¸ªå·¥å…·åQŒéžå¸¸å¥½ç”¨ã€‚ç§‰æ‰¿ç€æœ‰å…费,ä¸ç”¨å•†ç”¨çš„原则。以下简å•介¾lä¸€ä¸‹è¿™å‡ ç§å·¥å…·ã€?注:(x¨¬)æœ¬æ–‡ç« ä¸‹çš„æ‰€æœ‰å·¥å…·éƒ½å˜åœ¨JDK5.0以上版本的工具集里,åŒjavacä¸€æ øP¼Œä¸é¡»ç‰ÒŽ(gu¨©)„安装) ã€?br />
我一共找åˆîC»¥ä¸‹å››ä¸ªå·¥å…øP¼š(x¨¬)é‡ç‚¹çœ‹çœ‹jconsoleå’Œjmapã€?/p>
二ã€?使用介ç»åQ?
1ã€jstat åQšæˆ‘æƒ›_¾ˆå¤šäh都是用过unix¾pÈ»Ÿé‡Œçš„ps命ä×o(h¨´)åQŒè¿™ä¸ªå‘½ä»¤ä¸»è¦æ˜¯ç”¨æ¥æ˜„¡¤ºå½“剾pÈ»Ÿçš„è¿›½E‹æƒ…况,有哪些进½E‹ï¼Œå?qi¨¢ng)å…?idã€?jps ä¹Ÿæ˜¯ä¸€æ øP¼Œå®ƒçš„作用是显½Cºå½“å‰ç³»¾lŸçš„java˜q›ç¨‹æƒ…况åQŒåŠ(qi¨¢ng)å…¶idå—÷€‚我们å¯ä»¥é€šè¿‡å®ƒæ¥æŸ¥çœ‹æˆ‘们到底å¯åŠ¨äº†å‡ ä¸ªjava˜q›ç¨‹åQˆå› 为æ¯ä¸€ä¸ªjava½E‹åºéƒ½ä¼š(x¨¬)独å 一个java虚拟机实例)åQŒå’Œä»–们的进½E‹å·åQˆäØ“(f¨´)下é¢å‡ 个½E‹åºåšå‡†å¤‡ï¼‰åQŒåƈå¯é€šè¿‡optæ¥æŸ¥çœ‹è¿™äº›è¿›½E‹çš„详细å¯åЍ傿•°ã€?
使用æ–ÒŽ(gu¨©)³•åQšåœ¨å½“å‰å‘½ä×o(h¨´)行下æ‰?jps(需è¦JAVA_HOMEåQŒæ²¡æœ‰çš„è¯ï¼Œåˆ°æ”¹½E‹åºçš„目录下æ‰? ã€?/p>
坿ƒœæ²¡æœ‰linux下的ps好用åQŒå¿UîC¸å¥½ç”¨ã€‚但是在½W¬å››ä¸ªå·¥å…·jconsole的界é¢é‡Œé¢ä¼š(x¨¬)有具体JAR包的åç§°ã€?br />
2ã€jstat åQšå¯¹VM内å˜ä½¿ç”¨é‡è¿›è¡Œç›‘控ã€?
jstat工具特别强大åQŒæœ‰ä¼—多的å¯é€‰é¡¹åQŒè¯¦¾l†æŸ¥çœ‹å †å†…å„个部分的使用é‡ï¼Œä»¥åŠ(qi¨¢ng)åŠ è²¾cÈš„æ•°é‡ã€‚ä‹É用时åQŒéœ€åŠ ä¸ŠæŸ¥çœ‹˜q›ç¨‹çš„è¿›½E‹idåQŒå’Œæ‰€é€‰å‚数。以下详¾l†ä»‹¾lå„ä¸ªå‚æ•°çš„æ„ä¹‰ã€?
jstat -class pid:昄¡¤ºåŠ è²class的数é‡ï¼Œå?qi¨¢ng)所å 空间ç‰ä¿¡æ¯ã€?
jstat -compiler pid:昄¡¤ºVM实时¾~–译的数é‡ç‰ä¿¡æ¯ã€?
jstat -gc pid:å¯ä»¥æ˜„¡¤ºgc的信æ¯ï¼ŒæŸ¥çœ‹gc的次敎ͼŒå?qi¨¢ng)æ—¶é—´ã€‚å…¶ä¸æœ€åŽäº”™å¹ï¼Œåˆ†åˆ«æ˜¯young gc的次敎ͼŒyoung gc的时é—ß_(d¨¢)¼Œfull gc的次敎ͼŒfull gc的时é—ß_(d¨¢)¼Œgcçš„æ€ÀL—¶é—´ã€?
jstat -gccapacity:å¯ä»¥æ˜„¡¤ºåQŒVM内å˜ä¸ä¸‰ä»£ï¼ˆyoung,old,permåQ‰å¯¹è±¡çš„使用和å 用大ž®ï¼Œå¦‚:(x¨¬)PGCMN昄¡¤ºçš„æ˜¯æœ€ž®perm的内å˜ä‹É用é‡åQŒPGCMX昄¡¤ºçš„æ˜¯permçš„å†…å˜æœ€å¤§ä‹É用é‡åQŒPGCæ˜¯å½“å‰æ–°ç”Ÿæˆçš„perm内å˜å 用é‡ï¼ŒPC是但å‰perm内å˜å 用é‡ã€‚å…¶ä»–çš„å¯ä»¥æ ÒŽ(gu¨©)®˜q™ä¸ª¾cÀLލåQ?OC是old内纯的å 用é‡ã€?
jstat -gcnew pid:new对象的信æ¯ã€?
jstat -gcnewcapacity pid:new对象的信æ¯åŠ(qi¨¢ng)å…¶å 用é‡ã€?
jstat -gcold pid:old对象的信æ¯ã€?
jstat -gcoldcapacity pid:old对象的信æ¯åŠ(qi¨¢ng)å…¶å 用é‡ã€?
jstat -gcpermcapacity pid: perm对象的信æ¯åŠ(qi¨¢ng)å…¶å 用é‡ã€?
jstat -util pid:¾lŸè®¡gc信毾lŸè®¡ã€?
jstat -printcompilation pid:当å‰VM执行的信æ¯ã€?
é™¤äº†ä»¥ä¸Šä¸€ä¸ªå‚æ•°å¤–åQŒè¿˜å¯ä»¥åŒæ—¶åŠ ä¸Š 两个数å—åQŒå¦‚åQšjstat -printcompilation 3024 250 6是æ¯250毫秒打å°ä¸€‹Æ¡ï¼Œä¸€å…±æ‰“å?‹Æ¡ï¼Œ˜q˜å¯ä»¥åŠ ä¸?h3æ¯ä¸‰è¡Œæ˜¾½CÞZ¸€ä¸‹æ ‡é¢˜ã€?
3ã€jmap 是一个å¯ä»¥è¾“出所有内å˜ä¸å¯¹è±¡çš„工典P¼Œç”šè‡³å¯ä»¥ž®†VM ä¸çš„heapåQŒä»¥äºŒè¿›åˆ¶è¾“å‡ºæˆæ–‡æœ¬ã€‚ä‹É用方æ³?jmap -histo pid。如果连ç”?SHELL jmap -histo pid>a.logå¯ä»¥ž®†å…¶ä¿å˜åˆ°æ–‡æœ¬ä¸åŽ»ï¼ˆwindows下也å¯ä»¥ä½¿ç”¨åQ‰ï¼Œåœ¨ä¸€ŒD‰|—¶é—´åŽåQŒä‹Éç”¨æ–‡æœ¬å¯¹æ¯”å·¥å…øP¼Œå¯ä»¥å¯ÒŽ(gu¨©)¯”出GC回收了哪些对象。jmap -dump:format=b,file=f1 3024å¯ä»¥ž®?024˜q›ç¨‹çš„内å˜heap输出出æ¥åˆ°f1æ–‡äšg里ã€?
4ã€jconsole 是一个用java写的GUI½E‹åºåQŒç”¨æ¥ç›‘控VMåQŒåƈå¯ç›‘控远½E‹çš„VMåQŒéžå¸¸æ˜“用,而且功能éžå¸¸å¼ºã€‚由于是GUI½E‹åºåQŒè¿™é‡Œå°±ä¸è¯¦¾l†ä»‹¾l了åQŒä¸ä¼?x¨¬)的地方å¯ä»¥å‚考SåQµï¼®çš„官æ–ÒŽ(gu¨©)–‡æ¡£ã€?
使用æ–ÒŽ(gu¨©)³•åQšå‘½ä»¤è¡Œé‡Œæ‰“ jconsoleåQŒé€‰åˆ™˜q›ç¨‹ž®±å¯ä»¥äº†ã€?
å‹å¥½æç¤ºåQšwindows查看˜q›ç¨‹åøP¼Œç”׃ºŽä»ÕdŠ¡½Ž¡ç†å™¨é»˜è®¤çš„æƒ…å†µä¸‹æ˜¯ä¸æ˜¾½Cø™¿›½E‹idåïL(f¨¥ng)š„åQŒæ‰€ä»¥å¯ä»¥é€šè¿‡å¦‚下æ–ÒŽ(gu¨©)³•åŠ ä¸Šã€‚ctrl+alt+del打开ä»ÕdŠ¡½Ž¡ç†å™¨ï¼Œé€‰æ‹©‘˜q›ç¨‹’选项å¡ï¼Œç‚?#8216;查看’->''选择åˆ?'->åŠ ä¸Š''PID''åQŒå°±å¯ä»¥äº†ã€‚当然还有其他很好的选项ã€?/p>
三ã€å‚考资料:(x¨¬)
article:http://elf8848.javaeye.com/blog/442806
jps:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jps.html
jstat:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jstat.html
jmap:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jmap.html
jconsole:http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html
package com.tongking.spring;
public class DbHello implements Hello {
private DictionaryDAO dao;
public void setDao(DictionaryDAO dao) {
this.dao = dao;
}
}
其实åQŒè¿™æ ïL(f¨¥ng)š„è®¤äØ“(f¨´)是错误的åQŒæˆ‘仔细阅读了《POJOs in Action》这本书的有关部分和POJO的最原始的出处http://martinfowler.com/bliki/POJO.htmlåQ?br />
The term was coined while Rebecca Parsons, Josh MacKenzie and I were preparing for a talk at a conference in September 2000. In the talk we were pointing out the many benefits of encoding business logic into regular java objects rather than using Entity Beans. We wondered why people were so against using regular objects in their systems and concluded that it was because simple objects lacked a fancy name. So we gave them one, and it''s caught on very nicely.
åŸºæœ¬çš„æ„æ€æ˜¯æˆ‘们è¦ç»™å…ähœ‰ä¸šåŠ¡é€»è¾‘å¤„ç†çš„规则的Java对象åQˆregular java objectsåQ‰è“v了一个åå———POJOåQŒè¿™äº›Javaå¯¹è±¡ä¸æ˜¯EntityBeansåQˆEJB的一¿U)ã€?/p>
我åˆåœ¨http://www.webopedia.com/TERM/P/POJO.htm查到解释如下åQ?/p>
POJO, or Plain Old Java Object, is a normal Java object class (that is, not a JavaBean, EntityBean etc.) and does not serve any other special role nor does it implement any special interfaces of any of the Java frameworks. This term was coined by Martin Fowler, Rebbecca Parsons and Josh MacKenzie who believed that by creating the acronym POJO, such objects would have a "fancy name", thereby convincing people that they were worthy of use.
åŸºæœ¬æ„æ€æ˜¯è¯´POJO一个æ£è§„çš„Java对象åQˆä¸æ˜¯JavaBeanåQŒEntityBean½{‰ï¼‰åQŒä¹Ÿä¸æ‹…当ä“Q何的ç‰ÒŽ(gu¨©)®Šçš„è§’è‰ÔŒ¼Œä¹Ÿä¸å®žçްä»ÖM½•Java框架指定的接å£ã€?br />
我觉得上é¢çš„解释很准¼‹®ï¼ŒPOJOåº”è¯¥ä¸æ˜¯æˆ‘们开始认为的JavaBeanåQŒå½“ç„¶æ›´ä¸æ˜¯EJBåQŒå®ƒä¸åº”该ä¾èµ–于框架å³ç‘ô承或实现æŸäº›æ¡†æž¶¾cÀLˆ–接å£ã€‚例如:(x¨¬)Struts1ä¸çš„Actionå’ŒActionForm当然ä¸å±žäºŽPOJO了,而在Struts2ä¸çš„Actionç”׃ºŽå¯ä»¥ä¸ç‘ô承ä“Q何的接å£åQŒæ‰€ä»¥åœ¨˜q™ç§æƒ…况下Action是POJOåQŒä½†æ˜¯Struts2ä¸çš„Action也å¯ä»¥ç‘ô承ActionSupport¾cÕd°±ä¸å†å±žäºŽPOJO了。POJOé‡Œé¢æ˜¯å¯ä»¥åŒ…å«ä¸šåŠ¡é€»è¾‘å¤„ç†å’ŒæŒä¹…化逻辑åQŒä¹Ÿå¯ä»¥åŒ…嫾cÖM¼¼ä¸ŽJavaBean属性和对属性访问的setå’Œgetæ–ÒŽ(gu¨©)³•çš„ã€?br />
最åŽï¼Œæˆ‘们æ€È»“一下给一个定义把åQŒPOJO是一个简å•çš„ã€æ£è§„Java对象åQŒå®ƒåŒ…å«ä¸šåŠ¡é€»è¾‘å¤„ç†æˆ–æŒä¹…化逻辑½{‰ï¼Œä½†ä¸æ˜¯JavaBeanã€EntityBean½{‰ï¼Œä¸å…·æœ‰ä“Q何特ŒDŠè§’色和ä¸ç‘ô承或ä¸å®žçŽîC“Q何其它Java框架的类或接å£ã€?br />
æ–‡ç« å‡ºå¤„åQšé£žè¯ºç½‘(www.firnow.com):http://dev.firnow.com/course/3_program/java/javashl/200845/108451.html
关于“侵入å¼?#8221;å’?#8220;éžäçR入弔设计
有读者讲“侵入å¼?#8221;˜q™ä¸€æœ¯è¯æ— 法ç†è§£åQŒè¿™é‡Œç»™ä¸€ä¸ªç®€å•解释,是我个äh的看法ã€?
例如åQŒæˆ‘们å¯èƒ½éœ€è¦å¯¹¾c»A的对象åšå¼•用计数åQŒè¿™é‡Œæœ‰ä¸¤ç§åŸºæœ¬å¯èƒ½æ€§ï¼š(x¨¬)ž®†è®¡æ•°åŠŸèƒ½çº³å…¥ç±»A的设计内åQˆäçRå…¥å¼å¼•用计数设计åQŒæ¤æ—¶ç±»A的对象ä¸åŒ…å«äº†ä¸Žå¼•用计数有关的è¦ç´ ,˜q™æ˜¾ç„¶æ˜¯ä¸Žç±»A所è¦è¡¨½Cºçš„æ¦‚å¿µæ— å…³çš„ä¸œè¥¿ï¼‰åQŒæˆ–者将计数功能攑֜¨¾c»A之外åQˆéžä¾µå…¥å¼å¼•用计敎ͼ‰ã€?
我基本上知é“了,从å¤å¤§è™¾å¾—著作ä¸å¾—知ã€?
比如strutsåQŒéœ€è¦ç‘ô承一些strutså¾—ç±»åQŒè¿™ž®±æ˜¯ä¾µå…¥å¼ï¼Œä½¿å¾—¾pÈ»Ÿ¼›ÖM¸å¼€é‚£ä¸ªæ¡†æž¶ã€?
而springä¸ï¼Œä¸šåŠ¡¾cÖM¸éœ€è¦ç‘ô承框架得¾c»ï¼Œž®†æ¥æŠ›å¼ƒspring也比较方ä¾Ñ€?
æ¥ég¸Šå¤§è™¾åQˆåœŸè±†å—åQ‰èƒ½å¦è°ˆä¸‹ejb与spring之间得关¾p…R€‚ä½ ç”¨ejbå—?如果用了åQŒæ„Ÿè§‰å¦‚何?
éžäçRå…¥å¼(non-intrusive)设计是目å‰éžå¸¸çƒé—¨çš„è¯é¢˜ã€‚在一般的讨论ä¸ï¼ŒéžäçRå…¥å¼è®¾è®¡æ€ÀL˜¯å’ŒSpring˜q™æ ·çš„IoC容器或者AOP技术蔾pÕdœ¨ä¸€èµ—÷€‚ä½†æ˜¯ä»Žæ€æƒ³ä¸Šè¯´åQŒnon-intrusiveòq¶ä¸½{‰äh(hu¨¢n)于IoC或者AOPåQŒå®ƒæ˜¯ä¸€ä¸ªæ¯”AOPæ›´åŠ å®½æ³›çš„æ¦‚å¿üc€?br />
首先åQŒæˆ‘们考察一下何谓intrusive。典型的intrusive实现是ç‘ô承特定的基类, 或者实现特定的接å£. 在抽象的æ„义上说, intrusiveæ„味ç€åœ¨åŸº¼‹€¾l“æž„ä¸é¢„留了一些特ŒDŠçš„,专用的结æž? ˜q™äº›¾l“构对于基础功能而言ä¸ä»…ä»…æ˜¯æ— ç”¨çš? 甚至是有害的, 例如影哿€§èƒ½æˆ–者模¾pŠäº†åŽŸæœ‰çš„æ¦‚å¿ëŠ»“æž? 而系¾lŸæ•´ä½“çš„åŽæœŸæ‰©å±•能力也å—到这些预讄¡š„¾l“构通é“çš„é™åˆ?
non-intrusive设计的基本特ç‚ÒŽ(gu¨©)˜¯ž®½é‡åˆ©ç”¨åŸºç¡€¾l“构的元ç´? è€Œä¸æ˜¯å¼•å…¥é¢å¤–çš„ç‰ÒŽ(gu¨©)®Š¾l“æž„.例如, 在witrixòq›_°çš„tpl模æ¿ä¸?br />
åQœbutton tpl:tag="ui:FlatButton" value="xx" onclick="alert('ok')" /åQ?br />
如果åŽå°tpl引擎ä¸è§£æžï¼œui:FlatButtonåQžæ ‡½{? é‚£ä¹ˆè¯¥æ ‡½{„¡š„表现ž®±æ˜¯æ™®é€šçš„html button. ˜q™é‡Œæ•´ä¸ª™åµé¢çš„界é¢è¡¨çŽ°ç»“æž„æ²¡æœ‰è¢«tplæ ‡ç¾æ‰€ç ´å,而如果åƒjsp tagé‚£æ ·å¼ø™¡Œè§„å®šå¿…é¡»é‡‡ç”¨èŠ‚ç‚¹è¯æ³•, å?br />
åQœui:FlatButton value="xx" onclick="alert('ok')" /åQ?br />
则在没有tpl引擎的情况下, 界颾l“构被tplæ ‡ç¾æ‰€ç ´å,æ¤æ—¶åœ¨dreamweaver˜q™æ ·çš„å¯è§†åŒ–工具䏿ˆ‘ä»¬æ— æ³•å†è¯†åˆ«å‡ºæœ‰æ•ˆçš„界é¢å…ƒç´ , 丧失了WYSIWYG¾~–辑的能åŠ?
tpl:tag属性属于htmlè¯æ³•本èín规定了的自定义属æ€? 它在htmlä¸çš„å˜åœ¨æ˜¯ç¬¦åˆè§„范的, 而且它对于buttonæ¥è¯´æ²¡æœ‰é€ æˆä»€ä¹ˆé™åˆ¶æˆ–æŸå®³, å› è€Œæ˜¯ä¸€¿Uæ— å®³çš„æ ‡è®°. 在没有tpl模æ¿å¼•擎的情况下, tpl:tagå±žæ€§ä¸Žå…¶ä»–è‡ªå®šä¹‰å±žæ€§ä¸€æ ·å¤„äºŽåŒæ ïL(f¨¥ng)š„åœîC½, 没有什么特ŒDŠçš„作用. 而一旦tpl模æ¿å¼•æ“Žè¯†åˆ«å‡ø™¯¥ç‰ÒŽ(gu¨©)®Šæ ‡è®°, 整个节点ž®Þp¢«è§£é‡Šæˆä¸€ä¸ªå…·æœ‰ä¸°å¯Œè¡¨çްåÅžå¼çš„òq³é¢æŒ‰é’®è€Œä¸æ˜¯ç³»¾lŸç¼ºçœé£Žæ ¼çš„æ™®é€šæŒ‰é’? 从çñ”列设计的角度上说, button对应于ui:FlatButton在没有tplè§£æžèƒ½åŠ›æƒ…å†µæ—‰™€€åŒ–了的结æž? 在EJB3的规范ä¸, 普通的POJO(Plain Old Java Object)对象在绘q‡æ— å®³çš„æ ‡è®°(annotation)之åŽé€šè¿‡Enhance˜q‡ç¨‹èŽ·å¾—æŒä¹…化ç‰ç‰ÒŽ(gu¨©)€? POJOæ£å¯¹åº”于EJB Object的退化åÅžå¼? 在柿Uæ„义上我们å¯ä»¥è¯? å˜åœ¨ç€å¤šå°‘¿Uå¯é€€åŒ–æ–¹å¼ï¼Œž®±å¯¹åº”ç€å¤šå°‘¿Unon-intrusive designã€?br />
ä¸Žä¼ ¾lŸè®¾è®¡ä¸çš„ç»“æž„å †ç Œä¸å? çŽîC»£æŠ€æœ¯æ›´åŠ å¼ºè°ƒåœ¨åŽŸæœ‰¾l“æž„åŸºç¡€ä¸Šçš„åŒæ€å˜åŒ? å…Ïx³¨åŽŸæœ‰¾l“æž„ä¸çš„æŸäº›éƒ¨åˆ†å‡ºçŽ°ç‰ÒŽ(gu¨©)®Šæ„ä¹‰åŽæ‰€äº§ç”Ÿçš„对¿U°ç ´¾~? 在non-intrusive设计ä¸? åŸºç¡€çš„ç»“æž„ä¸æ²¡æœ‰ä¸ºæ‰©å±•内¾|®ä»€ä¹ˆç‰¹ŒDŠçš„¾l“æž„, ä¸€èˆ¬ä»…ä»…æ˜¯æ ‡è®°è€Œå·², ˜q™äº›æ ‡è®°æ˜¯æ— 害的甚至本èín在基¼‹€¾l“æž„ä¸æ˜¯æœ‰ç”¨çš? 例如æŸäº›javascript库在å‰å°html™åµé¢ä¸åˆ©ç”¨htmlæ ‡ç¾çš„classå±žæ€§ä½œä¸ºæ ‡è®? ä¸ÞZº†è¯†åˆ«˜q™äº›å±žäºŽ¾l“æž„æ ‡å‡†éƒ¨åˆ†çš„æ ‡è®°åÆˆå¯¹ä¹‹˜q›è¡Œå¤„ç†,我们需è¦ä¸€¿Uå¯é€‰æ‹©çš„ç»“æž„é€æ˜Žæ€? 具体æ¥è¯´æˆ‘们需è¦èƒ½æ¸—é€åˆ°¾pÈ»Ÿå†…部,准确的定ä½åˆ°æ ‡è®°å¤? ˜q™å°±¾cÖM¼¼äºŽx光检‹¹? xå…‰åªä¸ŽæŸäº›ç‰¹ŒDŠææ–™å‘生强烈作用而普通部分对于xå…‰è€Œè¨€æ˜¯é€æ˜Žçš? è€Œå½“å¤–éƒ¨å¼•æ“Žè¯†åˆ«å‡ø™¿™äº›ç‰¹ŒDŠçš„æ ‡è®°ä¹‹åŽ, å¯èƒ½éœ€è¦æ“¾Uµè¯¥å±€éƒ¨ç»“æž? 例如在基¼‹€¾l“æž„ä¸æ’入一些新的结构以实现基础¾l“构的增å¼? ˜q™äº›éƒ½å¯èƒ½éœ€è¦åº”用类ä¼égºŽAOP的技æœ? 而在˜q™ä¸€å¢žå¼º˜q‡ç¨‹ä¸å…³äºŽæ‰©å±•结构的具体知识å˜åœ¨äºŽæ‰©å±•引擎ä¸è€Œä¸æ˜¯åŸº¼‹€¾l“æž„ä¸? å› è€Œå¾€å¾€æ•´ä½“è¡¨çŽ°å‡ÞZ¸€¿UIoC的特æ€?
å‡è®¾åQšçˆ¶½H—å£ index.html åQŒæœ‰ id ä¸?subifrm çš?iframe
1. 在index.html执行JS直接讉K—®å窗å£ä¸æŸå…ƒç´?:
2. 利用jquery æ¥è®¿é—®å½H—å£
====================================================================
====================================================================
<2> 用DOMæ–ÒŽ(gu¨©)³•与jqueryæ–ÒŽ(gu¨©)³•¾l“åˆçš„æ–¹å¼å®žçŽîCº’动æ“ä½?/strong>
1.在父½H—å£ä¸æ“ä½?选ä¸IFRAMEä¸çš„æ‰€æœ‰å•选钮
====================================================================
====================================================================
<3> 使用jqueryæ“作iframe
1 ™åµé¢é‡Œæœ‰ä¸¤ä¸ªifame
leftiframeä¸jQuery改å˜mainiframeçš„src代ç åQ?/p>
2ã€?å¦‚æžœå†…å®¹é‡Œé¢æœ‰ä¸€ä¸ªID为mainiframeçš„ifame
ifame包å«ä¸€ä¸ªsomeID
得到someID的内�/p>
2 ã€å¦‚ä¸Šé¢æ‰€½C?
leftiframeä¸çš„jQueryæ“作mainiframe的内容someID的内å®?/p>