Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
±àд¸ßÐÔÄÜJavaScript
 
×÷Õß Addy Osmani£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-08-08
  9118  次浏览      29
 

ºÜ¶àJavaScriptÒýÇæ£¬ÈçGoogleµÄV8ÒýÇæ£¨±»ChromeºÍNodeËùÓã©£¬ÊÇרÃÅΪÐèÒª¿ìËÙÖ´ÐеĴóÐÍJavaScriptÓ¦ÓÃËùÉè¼ÆµÄ¡£Èç¹ûÄãÊÇÒ»¸ö¿ª·¢Õߣ¬²¢ÇÒ¹ØÐÄÄÚ´æÊ¹ÓÃÇé¿öÓëÒ³ÃæÐÔÄÜ£¬ÄãÓ¦¸ÃÁ˽âÓû§ä¯ÀÀÆ÷ÖеÄJavaScriptÒýÇæÊÇÈçºÎÔË×÷µÄ¡£ÎÞÂÛÊÇV8£¬SpiderMonkeyµÄ£¨Firefox£©µÄCarakan£¨Opera£©£¬Chakra£¨IE£©»òÆäËûÒýÇæ£¬ÕâÑù×ö¿ÉÒÔ°ïÖúÄã¸üºÃµØÓÅ»¯ÄãµÄÓ¦ÓóÌÐò¡£Õâ²¢²»ÊÇ˵Ӧ¸ÃרÃÅΪijһä¯ÀÀÆ÷»òÒýÇæ×öÓÅ»¯£¬Ç§Íò±ðÕâô×ö¡£

µ«ÊÇ£¬ÄãÓ¦¸ÃÎÊ×Ô¼º¼¸¸öÎÊÌ⣺

1.ÔÚÎҵĴúÂëÀÊÇ·ñ¿ÉÒÔʹ´úÂë¸ü¸ßЧһЩ

2.Ö÷Á÷µÄJavaScriptÒýÇæ¶¼×öÁËÄÄЩÓÅ»¯

3.ʲôÊÇÒýÇæÎÞ·¨ÓÅ»¯µÄ£¬À¬»ø»ØÊÕÆ÷£¨GC£©ÊÇ·ñÄÜ»ØÊÕÎÒËùÆÚÍûµÄ¶«Î÷

¼ÓÔØ¿ìËÙµÄÍøÕ¾¾ÍÏñÊÇÒ»Á¾¿ìËÙµÄÅܳµ£¬ÐèÒªÓõ½Ìرð¶¨ÖƵÄÁã¼þ. ͼƬÀ´Ô´: dHybridcars.

±àд¸ßÐÔÄÜ´úÂëʱÓÐһЩ³£¼ûµÄÏÝÚ壬ÔÚÕâÆªÎÄÕÂÖУ¬ÎÒÃǽ«Õ¹Ê¾Ò»Ð©¾­¹ýÑéÖ¤µÄ¡¢¸üºÃµÄ±àд´úÂ뷽ʽ¡£

ÄÇô£¬JavaScriptÔÚV8ÀïÊÇÈçºÎ¹¤×÷µÄ£¿

Èç¹ûÄã¶ÔJSÒýÇæÃ»ÓнÏÉîµÄÁ˽⣬¿ª·¢Ò»¸ö´óÐÍWebÓ¦ÓÃҲûɶÎÊÌ⣬¾ÍºÃ±È»á¿ª³µµÄÈËÒ²Ö»ÊÇ¿´¹ýÒýÇæ¸Ç¶øÃ»Óп´¹ý³µ¸ÇÄÚµÄÒýÇæÒ»Ñù¡£¼øÓÚChromeÊÇÎÒµÄä¯ÀÀÆ÷Ê×Ñ¡£¬ËùÒÔ̸һÏÂËüµÄJavaScriptÒýÇæ¡£V8ÊÇÓÉÒÔϼ¸¸öºËÐIJ¿·Ö×é³É£º

1.Ò»¸ö»ù±¾µÄ±àÒëÆ÷£¬Ëü»áÔÚ´úÂëÖ´ÐÐǰ½âÎöJavaScript´úÂë²¢Éú³É±¾µØ»úÆ÷Â룬¶ø²»ÊÇÖ´ÐÐ×Ö½ÚÂë»ò¼òµ¥µØ½âÊÍËü¡£ÕâЩ´úÂë×ʼ²¢²»ÊǸ߶ÈÓÅ»¯µÄ¡£

2.V8½«¶ÔÏó¹¹½¨Îª¶ÔÏóÄ£ÐÍ¡£ÔÚJavaScriptÖжÔÏó±íÏÖΪ¹ØÁªÊý×飬µ«ÊÇÔÚV8ÖжÔÏ󱻿´×÷ÊÇÒþ²ØµÄÀ࣬һ¸öΪÁËÓÅ»¯²éѯµÄÄÚ²¿ÀàÐÍϵͳ¡£

3.ÔËÐÐʱ·ÖÎöÆ÷¼àÊÓÕýÔÚÔËÐеÄϵͳ£¬²¢±êʶÁË¡°hot¡±µÄº¯Êý£¨ÀýÈ绨·ÑºÜ³¤Ê±¼äÔËÐеĴúÂ룩¡£

4.ÓÅ»¯±àÒëÆ÷ÖØÐ±àÒëºÍÓÅ»¯ÄÇЩ±»ÔËÐÐʱ·ÖÎöÆ÷±êʶΪ¡°hot¡±µÄ´úÂ룬²¢½øÐС°ÄÚÁª¡±µÈÓÅ»¯£¨ÀýÈçÓñ»µ÷ÓÃÕßµÄÖ÷ÌåÌæ»»º¯Êýµ÷ÓõÄλÖã©¡£

5.V8Ö§³ÖÈ¥ÓÅ»¯£¬ÕâÒâζ×ÅÓÅ»¯±àÒëÆ÷Èç¹û·¢ÏÖ¶ÔÓÚ´úÂëÓÅ»¯µÄ¼ÙÉè¹ýÓÚÀÖ¹Û£¬Ëü»áÉáÆúÓÅ»¯¹ýµÄ´úÂë¡£

6.V8ÓиöÀ¬»øÊÕ¼¯Æ÷£¬Á˽âËüÊÇÈçºÎ¹¤×÷µÄºÍÓÅ»¯JavaScriptÒ»ÑùÖØÒª¡£

À¬»ø»ØÊÕ

À¬»ø»ØÊÕÊÇÄÚ´æ¹ÜÀíµÄÒ»ÖÖÐÎʽ£¬Æäʵ¾ÍÊÇÒ»¸öÊÕ¼¯Æ÷µÄ¸ÅÄ³¢ÊÔ»ØÊÕ²»ÔÙ±»Ê¹ÓõĶÔÏóËùÕ¼ÓõÄÄÚ´æ¡£ÔÚJavaScriptÕâÖÖÀ¬»ø»ØÊÕÓïÑÔÖУ¬Ó¦ÓóÌÐòÖÐÈÔÔÚ±»ÒýÓõĶÔÏ󲻻ᱻÇå³ý¡£

ÊÖ¶¯Ïû³ý¶ÔÏóÒýÓÃÔÚ´ó¶àÊýÇé¿öÏÂÊÇûÓбØÒªµÄ¡£Í¨¹ý¼òµ¥µØ°Ñ±äÁ¿·ÅÔÚÐèÒªËüÃǵĵط½£¨ÀíÏëÇé¿öÏ£¬¾¡¿ÉÄÜÊǾֲ¿×÷ÓÃÓò£¬¼´ËüÃDZ»Ê¹Óõĺ¯ÊýÀï¶ø²»ÊǺ¯ÊýÍâ²ã£©£¬Ò»Çн«ÔË×÷µØºÜºÃ¡£

À¬»ø»ØÊÕÆ÷³¢ÊÔ»ØÊÕÄÚ´æ. ͼƬÀ´Ô´: Valtteri M?ki.

ÔÚJavaScriptÖУ¬ÊDz»¿ÉÄÜÇ¿ÖÆ½øÐÐÀ¬»ø»ØÊյġ£Äã²»Ó¦¸ÃÕâô×ö£¬ÒòΪÀ¬»øÊÕ¼¯¹ý³ÌÊÇÓÉÔËÐÐʱ¿ØÖƵģ¬ËüÖªµÀʲôÊÇ×îºÃµÄÇåÀíʱ»ú¡£

¡°Ïû³ýÒýÓá±µÄÎó½â

ÍøÉÏÓÐÐí¶à¹ØÓÚJavaScriptÄÚ´æ»ØÊÕµÄÌÖÂÛ¶¼Ì¸µ½deleteÕâ¸ö¹Ø¼ü×Ö£¬ËäÈ»Ëü¿ÉÒÔ±»ÓÃÀ´É¾³ý¶ÔÏó£¨map£©ÖеÄÊôÐÔ£¨key£©£¬µ«Óв¿·Ö¿ª·¢ÕßÈÏΪËü¿ÉÒÔÓÃÀ´Ç¿ÖÆ¡°Ïû³ýÒýÓᱡ£½¨Ò龡¿ÉÄܱÜÃâʹÓÃdelete£¬ÔÚÏÂÃæµÄÀý×ÓÖÐdelete o.x µÄ±×´óÓÚÀû£¬ÒòΪËü¸Ä±äÁËoµÄÒþ²ØÀ࣬²¢Ê¹Ëü³ÉΪһ¸ö"Âý¶ÔÏó"¡£

var o = { x: 1 }; 
delete o.x; // true
o.x; // undefined

Äã»áºÜÈÝÒ×µØÔÚÁ÷ÐеÄJS¿âÖÐÕÒµ½ÒýÓÃɾ³ý¡ª¡ªÕâÊǾßÓÐÓïÑÔÄ¿µÄÐԵġ£ÕâÀïÐèҪעÒâµÄÊDZÜÃâÔÚÔËÐÐʱÐ޸ġ±hot¡±¶ÔÏóµÄ½á¹¹¡£JavaScriptÒýÇæ¿ÉÒÔ¼ì²â³öÕâÖÖ¡°hot¡±µÄ¶ÔÏ󣬲¢³¢ÊÔ¶ÔÆä½øÐÐÓÅ»¯¡£Èç¹û¶ÔÏóÔÚÉúÃüÖÜÆÚÖÐÆä½á¹¹Ã»ÓнϴóµÄ¸Ä±ä£¬ÒýÇæ½«»á¸üÈÝÒ×ÓÅ»¯¶ÔÏ󣬶ødelete²Ù×÷ʵ¼ÊÉϻᴥ·¢ÕâÖֽϴóµÄ½á¹¹¸Ä±ä£¬Òò´Ë²»ÀûÓÚÒýÇæµÄÓÅ»¯¡£

¶ÔÓÚnullÊÇÈçºÎ¹¤×÷Ò²ÊÇÓÐÎó½âµÄ¡£½«Ò»¸ö¶ÔÏóÒýÓÃÉèÖÃΪnull£¬²¢Ã»ÓÐʹ¶ÔÏó±ä¡°¿Õ¡±£¬Ö»Êǽ«ËüµÄÒýÓÃÉèÖÃΪ¿Õ¶øÒÑ¡£Ê¹ÓÃo.x= null±ÈʹÓÃdelete»á¸üºÃЩ£¬µ«¿ÉÄÜÒ²²»ÊǺܱØÒª¡£

var o = { x: 1 }; 
o = null;
o; // null
o.x // TypeError

Èç¹û´ËÒýÓÃÊǵ±Ç°¶ÔÏóµÄ×îºóÒýÓã¬ÄÇô¸Ã¶ÔÏ󽫱»×÷ΪÀ¬»ø»ØÊÕ¡£Èç¹û´ËÒýÓò»Êǵ±Ç°¶ÔÏóµÄ×îºóÒýÓã¬Ôò¸Ã¶ÔÏóÊǿɷÃÎʵÄÇÒ²»»á±»À¬»ø»ØÊÕ¡£
ÁíÍâÐèҪעÒâµÄÊÇ£¬È«¾Ö±äÁ¿ÔÚÒ³ÃæµÄÉúÃüÖÜÆÚÀïÊDz»±»À¬»ø»ØÊÕÆ÷ÇåÀíµÄ¡£ÎÞÂÛÒ³Ãæ´ò¿ª¶à¾Ã£¬JavaScriptÔËÐÐʱȫ¾Ö¶ÔÏó×÷ÓÃÓòÖеıäÁ¿»áÒ»Ö±´æÔÚ¡£

var myGlobalNamespace = {};

È«¾Ö¶ÔÏóÖ»»áÔÚË¢ÐÂÒ³Ãæ¡¢µ¼º½µ½ÆäËûÒ³Ãæ¡¢¹Ø±Õ±êǩҳ»òÍ˳öä¯ÀÀÆ÷ʱ²Å»á±»ÇåÀí¡£º¯Êý×÷ÓÃÓòµÄ±äÁ¿½«ÔÚ³¬³ö×÷ÓÃÓòʱ±»ÇåÀí£¬¼´Í˳öº¯Êýʱ£¬ÒѾ­Ã»ÓÐÈκÎÒýÓã¬ÕâÑùµÄ±äÁ¿¾Í±»ÇåÀíÁË¡£

¾­Ñé·¨Ôò

ΪÁËʹÀ¬»ø»ØÊÕÆ÷¾¡ÔçÊÕ¼¯¾¡¿ÉÄܶàµÄ¶ÔÏ󣬲»Òªhold×Ų»ÔÙʹÓõĶÔÏó¡£ÕâÀïÓм¸¼þÊÂÐèÒª¼Çס£º

ÕýÈçÇ°ÃæÌáµ½µÄ£¬ÔÚºÏÊʵķ¶Î§ÄÚʹÓñäÁ¿ÊÇÊÖ¶¯Ïû³ýÒýÓõĸüºÃÑ¡Ôñ¡£¼´Ò»¸ö±äÁ¿Ö»ÔÚÒ»¸öº¯Êý×÷ÓÃÓòÖÐʹÓ㬾Ͳ»ÒªÔÚÈ«¾Ö×÷ÓÃÓòÉùÃ÷Ëü¡£ÕâÒâζןü¸É¾»Ê¡ÐĵĴúÂë¡£

È·±£½â°óÄÇЩ²»ÔÙÐèÒªµÄʼþ¼àÌýÆ÷£¬ÓÈÆäÊÇÄÇЩ¼´½«±»Ïú»ÙµÄDOM¶ÔÏóËù°ó¶¨µÄʼþ¼àÌýÆ÷¡£

Èç¹ûʹÓõÄÊý¾Ý»º´æÔÚ±¾µØ£¬È·±£ÇåÀíһϻº´æ»òʹÓÃÀÏ»¯»úÖÆ£¬ÒÔ±ÜÃâ´óÁ¿²»±»ÖØÓõÄÊý¾Ý±»´æ´¢¡£

º¯Êý

½ÓÏÂÀ´£¬ÎÒÃÇ̸̸º¯Êý¡£ÕýÈçÎÒÃÇÒѾ­Ëµ¹ý£¬À¬»øÊÕ¼¯µÄ¹¤×÷Ô­Àí£¬ÊÇͨ¹ý»ØÊÕ²»ÔÙÊÇ·ÃÎʵÄÄÚ´æ¿é£¨¶ÔÏ󣩡£ÎªÁ˸üºÃµØËµÃ÷ÕâÒ»µã£¬ÕâÀïÓÐһЩÀý×Ó¡£

function foo() {
var bar = new LargeObject();
bar.someCall();
}

µ±foo·µ»ØÊ±£¬barÖ¸ÏòµÄ¶ÔÏ󽫻ᱻÀ¬»øÊÕ¼¯Æ÷×Ô¶¯»ØÊÕ£¬ÒòΪËüÒÑûÓÐÈκδæÔÚµÄÒýÓÃÁË¡£

¶Ô±Èһϣº

function foo() {
var bar = new LargeObject();
bar.someCall();
return bar;
}

// somewhere else
var b = foo();

ÏÖÔÚÎÒÃÇÓÐÒ»¸öÒýÓÃÖ¸Ïòbar¶ÔÏó£¬ÕâÑùbar¶ÔÏóµÄÉú´æÖÜÆÚ¾Í´ÓfooµÄµ÷ÓÃÒ»Ö±³ÖÐøµ½µ÷ÓÃÕßÖ¸¶¨±ðµÄ±äÁ¿b£¨»òb³¬³ö·¶Î§£©¡£

±Õ°ü£¨CLOSURES£©

µ±Äã¿´µ½Ò»¸öº¯Êý£¬·µ»ØÒ»¸öÄÚ²¿º¯Êý£¬¸ÃÄÚ²¿º¯Êý½«»ñµÃ·¶Î§ÍâµÄ·ÃÎÊȨ£¬¼´Ê¹ÔÚÍⲿº¯ÊýÖ´ÐÐÖ®ºó¡£ÕâÊÇÒ»¸ö»ù±¾µÄ±Õ°ü ¡ª¡ª ¿ÉÒÔÔÚÌØ¶¨µÄÉÏÏÂÎÄÖÐÉèÖõıäÁ¿µÄ±í´ïʽ¡£ÀýÈ磺

function sum (x) {
function sumIt(y) {
return x + y;
};
return sumIt;
}

// Usage
var sumA = sum(4);
var sumB = sumA(3);
console.log(sumB); // Returns 7

ÔÚsumµ÷ÓÃÉÏÏÂÎÄÖÐÉú³ÉµÄº¯Êý¶ÔÏó£¨sumIt£©ÊÇÎÞ·¨±»»ØÊյģ¬Ëü±»È«¾Ö±äÁ¿£¨sumA£©ËùÒýÓ㬲¢ÇÒ¿ÉÒÔͨ¹ýsumA(n)µ÷Óá£

ÈÃÎÒÃÇÀ´¿´¿´ÁíÍâÒ»¸öÀý×Ó£¬ÕâÀïÎÒÃÇ¿ÉÒÔ·ÃÎʱäÁ¿largeStrÂð£¿

var a = function () {
var largeStr = new Array(1000000).join('x');
return function () {
return largeStr;
};
}();

Êǵģ¬ÎÒÃÇ¿ÉÒÔͨ¹ýa()·ÃÎÊlargeStr£¬ËùÒÔËüûÓб»»ØÊÕ¡£ÏÂÃæÕâ¸öÄØ£¿

var a = function () {
var smallStr = 'x';
var largeStr = new Array(1000000).join('x');
return function (n) {
return smallStr;
};
}();

ÎÒÃDz»ÄÜÔÙ·ÃÎÊlargeStrÁË£¬ËüÒѾ­ÊÇÀ¬»ø»ØÊÕºòÑ¡ÈËÁË¡£¡¾ÒëÕß×¢£ºÒòΪlargeStrÒѲ»´æÔÚÍⲿÒýÓÃÁË¡¿

¶¨Ê±Æ÷

×îÔãµÄÄÚ´æÐ¹Â©µØ·½Ö®Ò»ÊÇÔÚÑ­»·ÖУ¬»òÕßÔÚsetTimeout()/ setInterval()ÖУ¬µ«ÕâÊÇÏ൱³£¼ûµÄ¡£Ë¼¿¼ÏÂÃæµÄÀý×Ó:

var myObj = {
callMeMaybe: function () {
var myRef = this;
var val = setTimeout(function () {
console.log('Time is running out!');
myRef.callMeMaybe();
}, 1000);
}
};

Èç¹ûÎÒÃÇÔËÐÐmyObj.callMeMaybe();À´Æô¶¯¶¨Ê±Æ÷£¬¿ÉÒÔ¿´µ½¿ØÖÆÌ¨Ã¿Ãë´òÓ¡³ö¡°Time is running out!¡±¡£Èç¹û½Ó×ÅÔËÐÐmyObj = null£¬¶¨Ê±Æ÷ÒÀ¾É´¦ÓÚ¼¤»î״̬¡£ÎªÁËÄܹ»³ÖÐøÖ´ÐУ¬±Õ°ü½«myObj´«µÝ¸øsetTimeout£¬ÕâÑùmyObjÊÇÎÞ·¨±»»ØÊյġ£Ïà·´£¬ËüÒýÓõ½myObjµÄÒòΪËü²¶»ñÁËmyRef¡£Õâ¸úÎÒÃÇΪÁ˱£³ÖÒýÓý«±Õ°ü´«¸øÆäËûµÄº¯ÊýÊÇÒ»ÑùµÄ¡£

ͬÑùÖµµÃÀμǵÄÊÇ£¬setTimeout/setIntervalµ÷ÓÃ(È纯Êý)ÖеÄÒýÓ㬽«ÐèÒªÖ´ÐкÍÍê³É£¬²Å¿ÉÒÔ±»À¬»øÊÕ¼¯¡£

µ±ÐÄÐÔÄÜÏÝÚå

ÓÀÔ¶²»ÒªÓÅ»¯´úÂ룬ֱµ½ÄãÕæÕýÐèÒª¡£ÏÖÔÚ¾­³£¿ÉÒÔ¿´µ½Ò»Ð©»ù×¼²âÊÔ£¬ÏÔʾN±ÈMÔÚV8ÖиüΪÓÅ»¯£¬µ«ÊÇÔÚÄ£¿é´úÂë»òÓ¦ÓÃÖвâÊÔһϻᷢÏÖ£¬ÕâЩÓÅ»¯ÕæÕýµÄЧ¹û±ÈÄãÆÚÍûµÄҪСµÄ¶à¡£

×öµÄ¹ý¶à»¹²»Èçʲô¶¼²»×ö. ͼƬÀ´Ô´: Tim Sheerman-Chase.

±ÈÈçÎÒÃÇÏëÒª´´½¨ÕâÑùÒ»¸öÄ£¿é£º

1.ÐèÒªÒ»¸ö±¾µØµÄÊý¾ÝÔ´°üº¬Êý×ÖID

2.»æÖưüº¬ÕâЩÊý¾ÝµÄ±í¸ñ

3.Ìí¼Óʼþ´¦Àí³ÌÐò£¬µ±Óû§µã»÷µÄÈκε¥Ôª¸ñʱÇл»µ¥Ôª¸ñµÄcss class

Õâ¸öÎÊÌâÓм¸¸ö²»Í¬µÄÒòËØ£¬ËäȻҲºÜÈÝÒ×½â¾ö¡£ÎÒÃÇÈçºÎ´æ´¢Êý¾Ý£¬ÈçºÎ¸ßЧµØ»æÖƱí¸ñ²¢ÇÒappendµ½DOMÖУ¬ÈçºÎ¸üÓŵش¦Àí±í¸ñʼþ£¿

Ãæ¶ÔÕâЩÎÊÌâ×ʼ£¨ÌìÕæ£©µÄ×ö·¨ÊÇʹÓöÔÏó´æ´¢Êý¾Ý²¢·ÅÈëÊý×éÖУ¬Ê¹ÓÃjQuery±éÀúÊý¾Ý»æÖƱí¸ñ²¢appendµ½DOMÖУ¬×îºóʹÓÃʼþ°ó¶¨ÎÒÃÇÆÚÍûµØµã»÷ÐÐΪ¡£

×¢Ò⣺Õâ²»ÊÇÄãÓ¦¸Ã×öµÄ

var moduleA = function () {

return {

data: dataArrayObject,

init: function () {
this.addTable();
this.addEvents();
},

addTable: function () {

for (var i = 0; i < rows; i++) {
$tr = $('<tr></tr>');
for (var j = 0; j < this.data.length; j++) {
$tr.append('<td>' + this.data[j]['id'] + '</td>');
}
$tr.appendTo($tbody);
}

},
addEvents: function () {
$('table td').on('click', function () {
$(this).toggleClass('active');
});
}

};
}();

Õâ¶Î´úÂë¼òµ¥ÓÐЧµØÍê³ÉÁËÈÎÎñ¡£

µ«ÔÚÕâÖÖÇé¿öÏ£¬ÎÒÃDZéÀúµÄÊý¾ÝÖ»ÊDZ¾Ó¦¸Ã¼òµ¥µØ´æ·ÅÔÚÊý×éÖеÄÊý×ÖÐÍÊôÐÔID¡£ÓÐȤµÄÊÇ£¬Ö±½ÓʹÓÃDocumentFragmentºÍ±¾µØDOM·½·¨±ÈʹÓÃjQuery£¨ÒÔÕâÖÖ·½Ê½£©À´Éú³É±í¸ñÊǸüÓŵÄÑ¡Ôñ£¬µ±È»£¬Ê¼þ´úÀí±Èµ¥¶À°ó¶¨Ã¿¸ötd¾ßÓиü¸ßµÄÐÔÄÜ¡£

ҪעÒâËäÈ»jQueryÔÚÄÚ²¿Ê¹ÓÃDocumentFragment£¬µ«ÊÇÔÚÎÒÃǵÄÀý×ÓÖУ¬´úÂëÔÚÑ­»·ÄÚµ÷ÓÃappend²¢ÇÒÕâЩµ÷ÓÃÉæ¼°µ½Ò»Ð©ÆäËûµÄС֪ʶ£¬Òò´ËÔÚÕâÀïÆðµ½µÄÓÅ»¯×÷Óò»´ó¡£Ï£ÍûÕâ²»»áÊÇÒ»¸öÍ´µã£¬µ«ÇëÎñ±Ø½øÐлù×¼²âÊÔ£¬ÒÔÈ·±£×Ô¼º´úÂëok¡£

¶ÔÓÚÎÒÃǵÄÀý×Ó£¬ÉÏÊöµÄ×ö·¨´øÀ´ÁË£¨ÆÚÍûµÄ£©ÐÔÄÜÌáÉý¡£Ê¼þ´úÀí¶Ô¼òµ¥µÄ°ó¶¨ÊÇÒ»ÖָĽø£¬¿ÉÑ¡µÄDocumentFragmentÒ²Æðµ½ÁËÖúÍÆ×÷Óá£

var moduleD = function () {

return {

data: dataArray,

init: function () {
this.addTable();
this.addEvents();
},
addTable: function () {
var td, tr;
var frag = document.createDocumentFragment();
var frag2 = document.createDocumentFragment();

for (var i = 0; i < rows; i++) {
tr = document.createElement('tr');
for (var j = 0; j < this.data.length; j++) {
td = document.createElement('td');
td.appendChild(document.createTextNode(this.data[j]));

frag2.appendChild(td);
}
tr.appendChild(frag2);
frag.appendChild(tr);
}
tbody.appendChild(frag);
},
addEvents: function () {
$('table').on('click', 'td', function () {
$(this).toggleClass('active');
});
}

};

}();

½ÓÏÂÀ´¿´¿´ÆäËûÌáÉýÐÔÄܵķ½Ê½¡£ÄãÒ²ÐíÔø¾­ÔÚÄĶÁµ½¹ýʹÓÃÔ­ÐÍģʽ±ÈÄ£¿éģʽ¸üÓÅ£¬»òÌý˵¹ýʹÓÃJSÄ£°æ¿ò¼ÜÐÔÄܸüºÃ¡£ÓÐʱµÄÈ·Èç´Ë£¬²»¹ýʹÓÃËüÃÇÆäʵÊÇΪÁË´úÂë¸ü¾ß¿É¶ÁÐÔ¡£¶ÔÁË£¬»¹ÓÐÔ¤±àÒ룡ÈÃÎÒÃÇ¿´¿´ÔÚʵ¼ùÖбíÏÖµÄÈçºÎ£¿

moduleG = function () {};

moduleG.prototype.data = dataArray;
moduleG.prototype.init = function () {
this.addTable();
this.addEvents();
};
moduleG.prototype.addTable = function () {
var template = _.template($('#template').text());
var html = template({'data' : this.data});
$tbody.append(html);
};
moduleG.prototype.addEvents = function () {
$('table').on('click', 'td', function () {
$(this).toggleClass('active');
});
};

var modG = new moduleG();

ÊÂʵ֤Ã÷£¬ÔÚÕâÖÖÇé¿öϵĴøÀ´µÄÐÔÄÜÌáÉý¿ÉÒÔºöÂÔ²»¼Æ¡£Ä£°åºÍÔ­Ð͵ÄÑ¡Ôñ²¢Ã»ÓÐÕæÕýÌṩ¸ü¶àµÄ¶«Î÷¡£Ò²¾ÍÊÇ˵£¬ÐÔÄܲ¢²»ÊÇ¿ª·¢ÕßʹÓÃËüÃǵÄÔ­Òò£¬¸ø´úÂë´øÀ´µÄ¿É¶ÁÐÔ¡¢¼Ì³ÐÄ£ÐͺͿÉά»¤ÐÔ²ÅÊÇÕæÕýµÄÔ­Òò¡£

¸ü¸´ÔÓµÄÎÊÌâ°üÀ¨¸ßЧµØÔÚcanvasÉÏ»æÖÆÍ¼Æ¬ºÍ²Ù×÷´ø»ò²»´øÀàÐÍÊý×éµÄÏñËØÊý¾Ý¡£

ÔÚ½«Ò»Ð©·½·¨ÓÃÔÚÄã×Ô¼ºµÄÓ¦ÓÃ֮ǰ£¬Ò»¶¨Òª¶àÁ˽âÕâЩ·½°¸µÄ»ù×¼²âÊÔ¡£Ò²ÐíÓÐÈË»¹¼ÇµÃJSÄ£°æµÄshoot-offºÍËæºóµÄÀ©Õ¹°æ¡£ÄãÒª¸ãÇå³þ»ù×¼²âÊÔ²»ÊÇ´æÔÚÓÚÄã¿´²»µ½µÄÄÇЩÐéÄâÓ¦Ó㬶øÊÇÓ¦¸ÃÔÚÄãµÄʵ¼Ê´úÂëÖÐÈ¥²âÊÔ´øÀ´µÄÓÅ»¯¡£

V8ÓÅ»¯¼¼ÇÉ

Ïêϸ½éÉÜÁËÿ¸öV8ÒýÇæµÄÓÅ»¯µãÔÚ±¾ÎÄÌÖÂÛ·¶Î§Ö®Í⣬µ±È»ÕâÀïÒ²ÓÐÐí¶àÖµµÃÒ»ÌáµÄ¼¼ÇÉ¡£¼ÇסÕâЩ¼¼ÇÉÄã¾ÍÄܼõÉÙÄÇЩÐÔÄܵÍϵĴúÂëÁË¡£

ÌØ¶¨Ä£Ê½¿ÉÒÔʹV8°ÚÍÑÓÅ»¯µÄÀ§¾³£¬±ÈÈç˵try-catch¡£ÓûÁ˽â¸ü¶àÓйØÄÄЩº¯ÊýÄÜ»ò²»ÄܽøÐÐÓÅ»¯£¬Äã¿ÉÒÔÔÚV8µÄ½Å±¾¹¤¾ßd8ÖÐʹÓèCtrace-opt file.jsÃüÁî¡£

Èç¹ûÄã¹ØÐÄËÙ¶È£¬¾¡Á¿Ê¹ÄãµÄº¯ÊýÖ°Ôðµ¥Ò»£¬¼´È·±£±äÁ¿£¨°üÀ¨ÊôÐÔ£¬Êý×飬º¯Êý²ÎÊý£©Ö»Ê¹ÓÃÏàͬÒþ²ØÀà°üº¬µÄ¶ÔÏó¡£¾Ù¸öÀý×Ó£¬±ðÕâô¸É£º

function add(x, y) { 
return x+y;
}

add(1, 2);
add('a','b');
add(my_custom_object, undefined);

²»Òª¼ÓÔØÎ´³õʼ»¯»òÒÑɾ³ýµÄÔªËØ¡£Èç¹ûÕâô×öÒ²²»»á³öÏÖʲô´íÎ󣬵«ÊÇÕâÑù»áʹËٶȱäÂý¡£

²»ÒªÊ¹º¯ÊýÌå¹ý´ó£¬ÕâÑù»áʹµÃÓÅ»¯¸ü¼ÓÀ§ÄÑ¡£

¸ü¶àÄÚÈÝ¿ÉÒÔÈ¥¿´Daniel CliffordÔÚGoogle I/OµÄ·ÖÏí Breaking the JavaScript Speed Limit with V8¡£ Optimizing For V8 ¡ª A SeriesÒ²·Ç³£ÖµµÃÒ»¶Á¡£

¶ÔÏóVSÊý×飺ÎÒÓ¦¸ÃÓÃÄĸö£¿

Èç¹ûÄãÏë´æ´¢Ò»´®Êý×Ö£¬»òÕßһЩÏàͬÀàÐ͵ĶÔÏó£¬Ê¹ÓÃÒ»¸öÊý×é¡£

Èç¹ûÄãÓïÒåÉÏÐèÒªµÄÊÇÒ»¶ÑµÄ¶ÔÏóµÄÊôÐÔ£¨²»Í¬ÀàÐ͵ģ©£¬Ê¹ÓÃÒ»¸ö¶ÔÏóºÍÊôÐÔ¡£ÕâÔÚÄÚ´æ·½Ãæ·Ç³£¸ßЧ£¬ËÙ¶ÈÒ²Ï൱¿ì¡£

ÕûÊýË÷ÒýµÄÔªËØ£¬ÎÞÂÛ´æ´¢ÔÚÒ»¸öÊý×é»ò¶ÔÏóÖУ¬¶¼Òª±È±éÀú¶ÔÏóµÄÊôÐÔ¿ìµÃ¶à¡£

¶ÔÏóµÄÊôÐԱȽϸ´ÔÓ£ºËüÃÇ¿ÉÒÔ±»setterÃÇ´´½¨£¬¾ßÓв»Í¬µÄö¾ÙÐԺͿÉдÐÔ¡£Êý×éÖÐÔò²»¾ßÓÐÈç´ËµÄ¶¨ÖÆÐÔ£¬¶øÖ»´æÔÚÓкÍÎÞÕâÁ½ÖÖ״̬¡£ÔÚÒýÇæ²ãÃæ£¬ÕâÔÊÐí¸ü¶à´æ´¢½á¹¹·½ÃæµÄÓÅ»¯¡£ÌرðÊǵ±Êý×éÖдæÔÚÊý×Öʱ£¬ÀýÈçµ±ÄãÐèÒªÈÝÆ÷ʱ£¬²»Óö¨Òå¾ßÓÐx,y,zÊôÐÔµÄÀ࣬¶øÖ»ÓÃÊý×é¾Í¿ÉÒÔÁË¡£

JavaScriptÖжÔÏóºÍÊý×éÖ®¼äÖ»ÓÐÒ»¸öµÄÖ÷񻂿±ð£¬ÄǾÍÊÇÊý×éÉñÆæµÄlengthÊôÐÔ¡£Èç¹ûÄã×Ô¼ºÀ´Î¬»¤Õâ¸öÊôÐÔ£¬ÄÇôV8ÖжÔÏóºÍÊý×éµÄËÙ¶ÈÊÇÒ»Ñù¿ìµÄ¡£

ʹÓöÔÏóʱµÄ¼¼ÇÉ

ʹÓÃÒ»¸ö¹¹Ô캯ÊýÀ´´´½¨¶ÔÏó¡£Õ⽫ȷ±£Ëü´´½¨µÄËùÓжÔÏó¾ßÓÐÏàͬµÄÒþ²ØÀ࣬²¢ÓÐÖúÓÚ±ÜÃâ¸ü¸ÄÕâЩÀà¡£×÷Ϊһ¸ö¶îÍâµÄºÃ´¦£¬ËüÒ²ÂÔ¿ìÓÚObject.create()

ÄãµÄÓ¦ÓÃÖУ¬¶ÔÓÚʹÓò»Í¬ÀàÐ͵ĶÔÏóºÍÆä¸´ÔÓ¶È£¨ÔÚºÏÀíµÄ·¶Î§ÄÚ£º³¤Ô­ÐÍÁ´ÍùÍùÊÇÓк¦µÄ£¬³ÊÏÖÖ»ÓÐÒ»¸ö¼«ÉÙÊýÊôÐԵĶÔÏó±È´ó¶ÔÏó»á¿ìÒ»µã£©ÊÇÓÐûÏÞÖÆµÄ¡£¶ÔÓÚ¡°hot¡±¶ÔÏ󣬾¡Á¿±£³Ö¶ÌÔ­ÐÍÁ´£¬²¢ÇÒÉÙÊôÐÔ¡£

¶ÔÏó¿Ë¡

¶ÔÓÚÓ¦ÓóÌÐò¿ª·¢ÈËÔ±£¬¶ÔÏó¿Ë¡ÊÇÒ»¸ö³£¼ûµÄÎÊÌâ¡£ËäÈ»¸÷ÖÖ»ù×¼²âÊÔ¿ÉÒÔÖ¤Ã÷V8¶ÔÕâ¸öÎÊÌâ´¦ÀíµÃºÜºÃ£¬µ«ÈÔҪСÐÄ¡£¸´ÖÆ´óµÄ¶«Î÷ͨ³£ÊǽÏÂýµÄ¡ª¡ª²»ÒªÕâô×ö¡£JSÖеÄfor..inÑ­»·ÓÈÆäÔã¸â£¬ÒòΪËüÓÐ×Ŷñħ°ãµÄ¹æ·¶£¬²¢ÇÒÎÞÂÛÊÇÔÚÄĸöÒýÇæÖУ¬¶¼¿ÉÄÜÓÀÔ¶²»»á±ÈÈκζÔÏó¿ì¡£

µ±ÄãÒ»¶¨ÒªÔڹؼüÐÔÄÜ´úÂë·¾¶Éϸ´ÖƶÔÏóʱ£¬Ê¹ÓÃÊý×é»òÒ»¸ö×Ô¶¨ÒåµÄ¡°¿½±´¹¹Ô캯Êý¡±¹¦ÄÜÃ÷È·µØ¸´ÖÆÃ¿¸öÊôÐÔ¡£Õâ¿ÉÄÜÊÇ×î¿ìµÄ·½Ê½£º

function clone(original) {
this.foo = original.foo;
this.bar = original.bar;
}
var copy = new clone(original);

Ä£¿éģʽÖлº´æº¯Êý

ʹÓÃÄ£¿éģʽʱ»º´æº¯Êý£¬¿ÉÄܻᵼÖÂÐÔÄÜ·½ÃæµÄÌáÉý¡£²ÎÔÄÏÂÃæµÄÀý×Ó£¬ÒòΪËü×ÜÊÇ´´½¨³ÉÔ±º¯ÊýµÄи±±¾£¬Äã¿´µ½µÄ±ä»¯¿ÉÄÜ»á±È½ÏÂý¡£

ÁíÍâÇë×¢Ò⣬ʹÓÃÕâÖÖ·½·¨Ã÷ÏÔ¸üÓÅ£¬²»½ö½öÊÇÒÀ¿¿Ô­ÐÍģʽ£¨¾­¹ýjsPerf²âÊÔÈ·ÈÏ£©¡£

ʹÓÃÄ£¿éģʽ»òÔ­ÐÍģʽʱµÄÐÔÄÜÌáÉý

ÕâÊÇÒ»¸öÔ­ÐÍģʽÓëÄ£¿éģʽµÄÐÔÄܶԱȲâÊÔ£º

// Prototypal pattern
Klass1 = function () {}
Klass1.prototype.foo = function () {
log('foo');
}
Klass1.prototype.bar = function () {
log('bar');
}

// Module pattern
Klass2 = function () {
var foo = function () {
log('foo');
},
bar = function () {
log('bar');
};

return {
foo: foo,
bar: bar
}
}

// Module pattern with cached functions
var FooFunction = function () {
log('foo');
};
var BarFunction = function () {
log('bar');
};

Klass3 = function () {
return {
foo: FooFunction,
bar: BarFunction
}
}

// Iteration tests

// Prototypal
var i = 1000,
objs = [];
while (i--) {
var o = new Klass1()
objs.push(new Klass1());
o.bar;
o.foo;
}

// Module pattern
var i = 1000,
objs = [];
while (i--) {
var o = Klass2()
objs.push(Klass2());
o.bar;
o.foo;
}

// Module pattern with cached functions
var i = 1000,
objs = [];
while (i--) {
var o = Klass3()
objs.push(Klass3());
o.bar;
o.foo;
}
// See the test for full details

ʹÓÃÊý×éʱµÄ¼¼ÇÉ

½ÓÏÂÀ´ËµËµÊý×éÏà¹ØµÄ¼¼ÇÉ¡£ÔÚÒ»°ãÇé¿öÏ£¬²»ÒªÉ¾³ýÊý×éÔªËØ£¬ÕâÑù½«Ê¹Êý×é¹ý¶Éµ½½ÏÂýµÄÄÚ²¿±íʾ¡£µ±Ë÷Òý±äµÃÏ¡Ê裬V8½«»áÊ¹ÔªËØ×ªÎª¸üÂýµÄ×Öµäģʽ¡£

Êý×é×ÖÃæÁ¿

Êý×é×ÖÃæÁ¿·Ç³£ÓÐÓã¬Ëü¿ÉÒÔ°µÊ¾VMÊý×éµÄ´óСºÍÀàÐÍ¡£Ëüͨ³£ÓÃÔÚÌå»ý²»´óµÄÊý×éÖС£

// Here V8 can see that you want a 4-element array containing numbers:
var a = [1, 2, 3, 4];

// Don't do this:
a = []; // Here V8 knows nothing about the array
for(var i = 1; i <= 4; i++) {
a.push(i);
}

´æ´¢µ¥Ò»ÀàÐÍVS¶àÀàÐÍ

½«»ìºÏÀàÐÍ£¨±ÈÈçÊý×Ö¡¢×Ö·û´®¡¢undefined¡¢true/false£©µÄÊý¾Ý´æÔÚÊý×éÖоø²»ÊÇÒ»¸öºÃÏë·¨¡£ÀýÈçvar arr = [1, ¡°1¡±, undefined, true, ¡°true¡±]

1.ÀàÐÍÍÆ¶ÏµÄÐÔÄܲâÊÔ

ÕýÈçÎÒÃÇËù¿´µ½µÄ½á¹û£¬ÕûÊýµÄÊý×éÊÇ×î¿ìµÄ¡£

Ï¡ÊèÊý×éÓëÂúÊý×é

µ±ÄãʹÓÃÏ¡ÊèÊý×éʱ£¬Òª×¢Òâ·ÃÎÊÔªËØ½«Ô¶Ô¶ÂýÓÚÂúÊý×é¡£ÒòΪV8²»»á·ÖÅäÒ»Õû¿é¿Õ¼ä¸øÖ»Óõ½²¿·Ö¿Õ¼äµÄÊý×顣ȡ¶ø´úÖ®µÄÊÇ£¬Ëü±»¹ÜÀíÔÚ×ÖµäÖУ¬¼È½ÚÔ¼Á˿ռ䣬µ«»¨·Ñ·ÃÎʵÄʱ¼ä¡£

2.Ï¡ÊèÊý×éÓëÂúÊý×éµÄ²âÊÔ

Ô¤·ÖÅä¿Õ¼äVS¶¯Ì¬·ÖÅä

²»ÒªÔ¤·ÖÅä´óÊý×飨Èç´óÓÚ64KµÄÔªËØ£©£¬Æä×î´óµÄ´óС£¬¶øÓ¦¸Ã¶¯Ì¬·ÖÅä¡£ÔÚÎÒÃÇÕâÆªÎÄÕµÄÐÔÄܲâÊÔ֮ǰ£¬Çë¼ÇסÕâÖ»ÊÊÓò¿·ÖJavaScriptÒýÇæ¡£

¿Õ×ÖÃæÁ¿ÓëÔ¤·ÖÅäÊý×éÔÚ²»Í¬µÄä¯ÀÀÆ÷½øÐвâÊÔ

Nitro (Safari)¶ÔÔ¤·ÖÅäµÄÊý×é¸üÓÐÀû¡£¶øÔÚÆäËûÒýÇæ£¨V8£¬SpiderMonkey£©ÖУ¬Ô¤ÏÈ·ÖÅä²¢²»ÊǸßЧµÄ¡£

3.Ô¤·ÖÅäÊý×é²âÊÔ

// Empty array
var arr = [];
for (var i = 0; i < 1000000; i++) {
arr[i] = i;
}

// Pre-allocated array
var arr = new Array(1000000);
for (var i = 0; i < 1000000; i++) {
arr[i] = i;
}

ÓÅ»¯ÄãµÄÓ¦ÓÃ

ÔÚWebÓ¦ÓõÄÊÀ½çÖУ¬ËٶȾÍÊÇÒ»ÇС£Ã»ÓÐÓû§Ï£ÍûÓÃÒ»¸öÒª»¨¼¸ÃëÖÓ¼ÆËãijÁÐ×ÜÊý»ò»¨¼¸·ÖÖÓ»ã×ÜÐÅÏ¢µÄ±í¸ñÓ¦Óá£ÕâÊÇΪʲôÄãÒªÔÚ´úÂëÖÐѹեÿһµãÐÔÄܵÄÖØÒªÔ­Òò¡£

ͼƬÀ´Ô´: Per Olof Forsberg.

Àí½âºÍÌá¸ßÓ¦ÓóÌÐòµÄÐÔÄÜÊǷdz£ÓÐÓõÄͬʱ£¬ËüÒ²ÊÇÀ§Äѵġ£ÎÒÃÇÍÆ¼öÒÔϵIJ½ÖèÀ´½â¾öÐÔÄܵÄÍ´µã£º

1.²âÁ¿£ºÔÚÄúµÄÓ¦ÓóÌÐòÖÐÕÒµ½ÂýµÄµØ·½£¨Ô¼45£¥£©

2.Àí½â£ºÕÒ³öʵ¼ÊµÄÎÊÌâÊÇʲô£¨Ô¼45£¥£©

3.ÐÞ¸´Ëü£¡ £¨Ô¼10£¥£©

ÏÂÃæÍÆ¼öµÄһЩ¹¤¾ßºÍ¼¼Êõ¿ÉÒÔЭÖúÄã¡£

»ù×¼»¯£¨BENCHMARKING£©

Óкܶ෽ʽÀ´ÔËÐÐJavaScript´úÂëÆ¬¶ÎµÄ»ù×¼²âÊÔÆäÐÔÄÜ¡ª¡ªÒ»°ãµÄ¼ÙÉèÊÇ£¬»ù×¼¼òµ¥µØ±È½ÏÁ½¸öʱ¼ä´Á¡£ÕâÖÐģʽ±»jsPerfÍŶÓÖ¸³ö£¬²¢ÔÚSunSpiderºÍKrakenµÄ»ù×¼Ì×¼þÖÐʹÓãº

var totalTime,
start = new Date,
iterations = 1000;
while (iterations--) {
// Code snippet goes here
}
// totalTime ¡ú the number of milliseconds taken
// to execute the code snippet 1000 times
totalTime = new Date - start;

ÔÚÕâÀҪ²âÊԵĴúÂë±»·ÅÖÃÔÚÒ»¸öÑ­»·ÖУ¬²¢ÔËÐÐÒ»¸öÉ趨µÄ´ÎÊý£¨ÀýÈç6´Î£©¡£ÔÚ´ËÖ®ºó£¬¿ªÊ¼ÈÕÆÚ¼õÈ¥½áÊøÈÕÆÚ£¬¾ÍµÃ³öÔÚÑ­»·ÖÐÖ´ÐвÙ×÷Ëù»¨·ÑµÄʱ¼ä¡£

È»¶ø£¬ÕâÖÖ»ù×¼²âÊÔ×öµÄÊÂÇé¹ýÓÚ¼òµ¥ÁË£¬ÌرðÊÇÈç¹ûÄãÏëÔËÐÐÔÚ¶à¸öä¯ÀÀÆ÷ºÍ»·¾³µÄ»ù×¼¡£À¬»øÊÕ¼¯Æ÷±¾Éí¶Ô½á¹ûÊÇÓÐÒ»¶¨Ó°ÏìµÄ¡£¼´Ê¹ÄãʹÓÃwindow.performanceÕâÑùµÄ½â¾ö·½°¸£¬Ò²±ØÐ뿼Âǵ½ÕâЩȱÏÝ¡£

²»¹ÜÄãÊÇ·ñÖ»ÔËÐлù×¼²¿·ÖµÄ´úÂ룬±àдһ¸ö²âÊÔÌ×¼þ»ò±àÂë»ù×¼¿â£¬JavaScript»ù×¼Æäʵ±ÈÄãÏëÏóµÄ¸ü¶à¡£ÈçÐè¸üÏêϸµÄÖ¸ÄÏ»ù×¼£¬ÎÒÇ¿ÁÒ½¨ÒéÄãÔĶÁÓÉMathias BynensºÍJohn-David DaltonÌṩµÄJavascript»ù×¼²âÊÔ¡£

·ÖÎö£¨PROFILING£©

Chrome¿ª·¢Õß¹¤¾ßΪJavaScript·ÖÎöÓкܺõÄÖ§³Ö¡£¿ÉÒÔʹÓô˹¦Äܼì²âÄÄЩº¯ÊýÕ¼ÓÃÁ˴󲿷Öʱ¼ä£¬ÕâÑùÄã¾Í¿ÉÒÔÈ¥ÓÅ»¯ËüÃÇ¡£ÕâºÜÖØÒª£¬¼´Ê¹ÊÇ´úÂëºÜСµÄ¸Ä±ä»á¶ÔÕûÌå±íÏÖ²úÉúÖØÒªµÄÓ°Ïì¡£

Chrome¿ª·¢Õß¹¤¾ßµÄ·ÖÎöÃæ°å

·ÖÎö¹ý³Ì¿ªÊ¼»ñÈ¡´úÂëÐÔÄÜ»ùÏߣ¬È»ºóÒÔʱ¼äÏßµÄÐÎʽÌåÏÖ¡£Õ⽫¸æËßÎÒÃÇ´úÂëÐèÒª¶à³¤Ê±¼äÔËÐС£¡°Profiles¡±Ñ¡Ï¸øÁËÎÒÃÇÒ»¸ö¸üºÃµÄÊÓ½ÇÀ´Á˽âÓ¦ÓóÌÐòÖз¢ÉúÁËʲô¡£JavaScript CPU·ÖÎöÎļþչʾÁ˶àÉÙCPUʱ¼ä±»ÓÃÓÚÎÒÃǵĴúÂ룬CSSÑ¡ÔñÆ÷·ÖÎöÎļþչʾÁ˶àÉÙʱ¼ä»¨·ÑÔÚ´¦ÀíÑ¡ÔñÆ÷ÉÏ£¬¶Ñ¿ìÕÕÏÔʾ¶àÉÙÄÚ´æÕý±»ÓÃÓÚÎÒÃǵĶÔÏó¡£

ÀûÓÃÕâЩ¹¤¾ß£¬ÎÒÃÇ¿ÉÒÔ·ÖÀë¡¢µ÷ÕûºÍÖØÐ·ÖÎöÀ´ºâÁ¿ÎÒÃǵŦÄÜ»ò²Ù×÷ÐÔÄÜÓÅ»¯ÊÇ·ñÕæµÄÆðµ½ÁËЧ¹û¡£

¡°Profile¡±Ñ¡ÏչʾÁË´úÂëÐÔÄÜÐÅÏ¢¡£

Ò»¸öºÜºÃµÄ·ÖÎö½éÉÜ£¬ÔĶÁZack GrossbartµÄ JavaScript Profiling With The Chrome Developer Tools¡£

Ìáʾ£ºÔÚÀíÏëÇé¿öÏ£¬ÈôÏëÈ·±£ÄãµÄ·ÖÎö²¢Î´Êܵ½ÒѰ²×°µÄÓ¦ÓóÌÐò»òÀ©Õ¹µÄÈκÎÓ°Ï죬¿ÉÒÔʹÓÃ--user-data-dir <empty_directory>±êÖ¾À´Æô¶¯Chrome¡£ÔÚ´ó¶àÊýÇé¿öÏ£¬ÕâÖÖ·½·¨ÓÅ»¯²âÊÔÓ¦¸ÃÊÇ×ã¹»µÄ£¬µ«Ò²ÐèÒªÄã¸ü¶àµÄʱ¼ä¡£ÕâÊÇV8±êÖ¾ÄÜÓÐËù°ïÖúµÄ¡£

±ÜÃâÄÚ´æÐ¹Â©¡ª¡ª3¿ìÕÕ¼¼Êõ

ÔڹȸèÄÚ²¿£¬Chrome¿ª·¢Õß¹¤¾ß±»GmailµÈÍŶӴóÁ¿Ê¹Óã¬ÓÃÀ´°ïÖú·¢ÏÖºÍÅųýÄÚ´æÐ¹Â©¡£

Chrome¿ª·¢Õß¹¤¾ßÖеÄÄÚ´æÍ³¼Æ

ÄÚ´æÍ³¼Æ³öÎÒÃÇÍŶÓËù¹ØÐĵÄ˽ÓÐÄÚ´æÊ¹Óá¢JavaScript¶ÑµÄ´óС¡¢DOM½ÚµãÊýÁ¿¡¢´æ´¢ÇåÀí¡¢Ê¼þ¼àÌý¼ÆÊýÆ÷ºÍÀ¬»øÊÕ¼¯Æ÷ÕýÒª»ØÊյĶ«Î÷¡£ÍƼöÔĶÁLoreena LeeµÄ¡°3¿ìÕÕ¡±¼¼Êõ¡£¸Ã¼¼ÊõµÄÒªµãÊÇ£¬ÔÚÄãµÄÓ¦ÓóÌÐòÖмǼһЩÐÐΪ£¬Ç¿ÖÆÀ¬»ø»ØÊÕ£¬¼ì²éDOM½ÚµãµÄÊýÁ¿ÓÐûÓлָ´µ½Ô¤ÆÚµÄ»ùÏߣ¬È»ºó·ÖÎöÈý¸ö¶ÑµÄ¿ìÕÕÀ´È·¶¨ÊÇ·ñÓÐÄÚ´æÐ¹Â©¡£

µ¥Ò³ÃæÓ¦ÓõÄÄÚ´æ¹ÜÀí

µ¥Ò³ÃæÓ¦ÓóÌÐò£¨ÀýÈçAngularJS£¬Backbone£¬Ember£©µÄÄÚ´æ¹ÜÀíÊǷdz£ÖØÒªµÄ£¬ËüÃǼ¸ºõÓÀÔ¶²»»áË¢ÐÂÒ³Ãæ¡£ÕâÒâζ×ÅÄÚ´æÐ¹Â©¿ÉÄÜÏ൱Ã÷ÏÔ¡£Òƶ¯ÖÕ¶ËÉϵĵ¥Ò³ÃæÓ¦ÓóäÂúÁËÏÝÚ壬ÒòΪÉ豸µÄÄÚ´æÓÐÏÞ£¬²¢ÔÚ³¤ÆÚÔËÐÐEmail¿Í»§¶Ë»òÉç½»ÍøÂçµÈÓ¦ÓóÌÐò¡£ÄÜÁ¦Óú´óÔðÈÎÓúÖØ¡£

Óкܶà°ì·¨½â¾öÕâ¸öÎÊÌâ¡£ÔÚBackboneÖУ¬È·±£Ê¹ÓÃdispose()À´´¦Àí¾ÉÊÓͼºÍÒýÓã¨Ä¿Ç°ÔÚBackbone(Edge)ÖпÉÓã©¡£Õâ¸öº¯ÊýÊÇ×î½ü¼ÓÉϵģ¬ÒƳýÌí¼Óµ½ÊÓͼ¡°event¡±¶ÔÏóÖеĴ¦Àíº¯Êý£¬ÒÔ¼°Í¨¹ý´«¸øviewµÄµÚÈý¸ö²ÎÊý£¨»Øµ÷ÉÏÏÂÎÄ£©µÄmodel»òcollectionµÄʼþ¼àÌýÆ÷¡£dispose()Ò²»á±»ÊÓͼµÄremove()µ÷Ó㬴¦Àíµ±ÔªËØ±»ÒƳýʱµÄÖ÷ÒªÇåÀí¹¤×÷¡£Ember µÈÆäËûµÄ¿âµ±¼ì²âµ½ÔªËر»ÒƳýʱ£¬»áÇåÀí¼àÌýÆ÷ÒÔ±ÜÃâÄÚ´æÐ¹Â©¡£

Derick BaileyµÄһЩÃ÷ÖǵĽ¨Ò飺

ÓëÆäÁ˽âʼþÓëÒýÓÃÊÇÈçºÎ¹¤×÷µÄ£¬²»Èç×ñÑ­µÄ±ê×¼¹æÔòÀ´¹ÜÀíJavaScriptÖеÄÄÚ´æ¡£Èç¹ûÄãÏë¼ÓÔØÊý¾Ýµ½µÄÒ»¸ö´æÂúÓû§¶ÔÏóµÄBackbone¼¯ºÏÖУ¬ÄãÒªÇå¿ÕÕâ¸ö¼¯ºÏʹËü²»ÔÙÕ¼ÓÃÄڴ棬ÄDZØÐëÕâ¸ö¼¯ºÏµÄËùÓÐÒýÓÃÒÔ¼°¼¯ºÏÄÚ¶ÔÏóµÄÒýÓá£Ò»µ©Çå³þÁËËùÓõÄÒýÓã¬×ÊÔ´¾Í»á±»»ØÊÕ¡£Õâ¾ÍÊDZê×¼µÄJavaScriptÀ¬»ø»ØÊÕ¹æÔò¡£

ÔÚÎÄÕÂÖУ¬Derickº­¸ÇÁËÐí¶àʹÓÃBackbone.jsʱµÄ³£¼ûÄÚ´æÈ±ÏÝ£¬ÒÔ¼°ÈçºÎ½â¾öÕâЩÎÊÌâ¡£

Felix Geisend?rferµÄÔÚNodeÖе÷ÊÔÄÚ´æÐ¹Â©µÄ½Ì³ÌÒ²ÖµµÃÒ»¶Á£¬ÓÈÆäÊǵ±ËüÐγÉÁ˸ü¹ã·ºSPA¶ÑÕ»µÄÒ»²¿·Ö¡£

¼õÉÙ»ØÁ÷£¨REFLOWS£©

µ±ä¯ÀÀÆ÷ÖØÐÂäÖȾÎĵµÖеÄÔªËØÊ±ÐèÒª ÖØÐ¼ÆËãËüÃǵÄλÖúͼ¸ºÎÐÎ×´£¬ÎÒÃdzÆÖ®Îª»ØÁ÷¡£»ØÁ÷»á×èÈûÓû§ÔÚä¯ÀÀÆ÷ÖеIJÙ×÷£¬Òò´ËÀí½âÌáÉý»ØÁ÷ʱ¼äÊǷdz£ÓаïÖúµÄ¡£

»ØÁ÷ʱ¼äͼ±í

ÄãÓ¦¸ÃÅúÁ¿µØ´¥·¢»ØÁ÷»òÖØ»æ£¬µ«ÊÇÒª½ÚÖÆµØÊ¹ÓÃÕâЩ·½·¨¡£¾¡Á¿²»´¦ÀíDOMÒ²ºÜÖØÒª¡£¿ÉÒÔʹÓÃDocumentFragment£¬Ò»¸öÇáÁ¿¼¶µÄÎĵµ¶ÔÏó¡£Äã¿ÉÒÔ°ÑËü×÷ΪһÖÖ·½·¨À´ÌáÈ¡ÎĵµÊ÷µÄÒ»²¿·Ö£¬»ò´´½¨Ò»¸öеÄÎĵµ¡°Æ¬¶Î¡±¡£ÓëÆä²»¶ÏµØÌí¼ÓDOM½Úµã£¬²»ÈçʹÓÃÎĵµÆ¬¶ÎºóÖ»Ö´ÐÐÒ»´ÎDOM²åÈë²Ù×÷£¬ÒÔ±ÜÃâ¹ý¶àµÄ»ØÁ÷¡£
ÀýÈ磬ÎÒÃÇдһ¸öº¯Êý¸øÒ»¸öÔªËØÌí¼Ó20¸ödiv¡£Èç¹ûÖ»ÊǼòµ¥µØÃ¿´ÎappendÒ»¸ödivµ½ÔªËØÖУ¬Õâ»á´¥·¢20´Î»ØÁ÷¡£

function addDivs(element) {
var div;
for (var i = 0; i < 20; i ++) {
div = document.createElement('div');
div.innerHTML = 'Heya!';
element.appendChild(div);
}
}

Òª½â¾öÕâ¸öÎÊÌ⣬¿ÉÒÔʹÓÃDocumentFragmentÀ´´úÌæ£¬ÎÒÃÇ¿ÉÒÔÿ´ÎÌí¼ÓÒ»¸öеÄdivµ½ÀïÃæ¡£Íê³Éºó½«DocumentFragmentÌí¼Óµ½DOMÖÐÖ»»á´¥·¢Ò»´Î»ØÁ÷¡£

function addDivs(element) {
var div;
// Creates a new empty DocumentFragment.
var fragment = document.createDocumentFragment();
for (var i = 0; i < 20; i ++) {
div = document.createElement('a');
div.innerHTML = 'Heya!';
fragment.appendChild(div);
}
element.appendChild(fragment);
}

JSÄÚ´æÐ¹Â©Ì½²âÆ÷

ΪÁ˰ïÖú·¢ÏÖJavaScriptÄÚ´æÐ¹Â©£¬¹È¸èµÄ¿ª·¢ÈËÔ±£¨(Marja H?ltt?ºÍJochen Eisinger£©¿ª·¢ÁËÒ»ÖÖ¹¤¾ß£¬ËüÓëChrome¿ª·¢ÈËÔ±¹¤¾ß½áºÏʹÓ㬼ìË÷¶ÑµÄ¿ìÕÕ²¢¼ì²â³öÊÇʲô¶ÔÏóµ¼ÖÂÁËÄÚ´æÐ¹Â©¡£

Ò»¸öJavaScriptÄÚ´æÐ¹Â©¼ì²â¹¤¾ß

ÓÐÍêÕûµÄÎÄÕ½éÉÜÁËÈçºÎʹÓÃÕâ¸ö¹¤¾ß£¬½¨ÒéÄã×Ô¼ºµ½ÄÚ´æÐ¹Â©Ì½²âÆ÷ÏîÄ¿Ò³Ãæ¿´¿´¡£

Èç¹ûÄãÏëÖªµÀΪʲôÕâÑùµÄ¹¤¾ß»¹Ã»¼¯³Éµ½ÎÒÃǵĿª·¢¹¤¾ß£¬ÆäÔ­ÒòÓжþ¡£Ëü×î³õÊÇÔÚClosure¿âÖаïÖúÎÒÃDz¶×½Ò»Ð©Ìض¨µÄÄڴ泡¾°£¬Ëü¸üÊʺÏ×÷Ϊһ¸öÍⲿ¹¤¾ß¡£

V8ÓÅ»¯µ÷ÊÔºÍÀ¬»ø»ØÊյıê־λ

ChromeÖ§³ÖÖ±½Óͨ¹ý´«µÝһЩ±êÖ¾¸øV8£¬ÒÔ»ñµÃ¸üÏêϸµÄÒýÇæÓÅ»¯Êä³ö½á¹û¡£ÀýÈ磬ÕâÑù¿ÉÒÔ×·×ÙV8µÄÓÅ»¯£º

"/Applications/Google Chrome/Google Chrome" --js-flags="--trace-opt --trace-deopt"

WindowsÓû§¿ÉÒÔÕâÑùÔËÐÐ chrome.exe ¨Cjs-flags=¡±¨Ctrace-opt ¨Ctrace-deopt¡±

ÔÚ¿ª·¢Ó¦ÓóÌÐòʱ£¬ÏÂÃæµÄV8±êÖ¾¶¼¿ÉÒÔʹÓá£

1.trace-opt ¡ª¡ª ¼Ç¼ÓÅ»¯º¯ÊýµÄÃû³Æ£¬²¢ÏÔÊ¾Ìø¹ýµÄ´úÂ룬ÒòΪÓÅ»¯Æ÷²»ÖªµÀÈçºÎÓÅ»¯¡£

2.trace-deopt ¡ª¡ª ¼Ç¼ÔËÐÐʱ½«Òª¡°È¥ÓÅ»¯¡±µÄ´úÂë¡£

3.trace-gc ¡ª¡ª ¼Ç¼ÿ´ÎµÄÀ¬»ø»ØÊÕ¡£

V8µÄ´¦Àí½Å±¾ÓÃ*£¨ÐǺţ©±êʶÓÅ»¯¹ýµÄº¯Êý£¬ÓÃ~£¨²¨À˺ţ©±íʾδÓÅ»¯µÄº¯Êý¡£

Èç¹ûÄãÓÐÐËȤÁ˽â¸ü¶à¹ØÓÚV8µÄ±êÖ¾ºÍV8µÄÄÚ²¿ÊÇÈçºÎ¹¤×÷µÄ£¬Ç¿ÁÒ½¨Òé ÔĶÁVyacheslav EgorovµÄexcellent post on V8 internals¡£

HIGH-RESOLUTION TIME ºÍ NAVIGATION TIMING API

¸ß¾«¶Èʱ¼ä£¨HRT£©ÊÇÒ»¸öÌṩ²»ÊÜϵͳʱ¼äºÍÓû§µ÷ÕûÓ°ÏìµÄÑǺÁÃë¼¶¸ß¾«¶Èʱ¼ä½Ó¿Ú£¬¿ÉÒÔ°ÑËüµ±×öÊÇ±È new Date ºÍ Date.now()¸ü¾«×¼µÄ¶ÈÁ¿·½·¨¡£Õâ¶ÔÎÒÃDZàд»ù×¼²âÊÔ°ïÖúºÜ´ó¡£

¸ß¾«¶Èʱ¼ä£¨HRT£©ÌṩÁ˵±Ç°ÑǺÁÃë¼¶µÄʱ¼ä¾«¶È

ĿǰHRTÔÚChrome£¨Îȶ¨°æ£©ÖÐÊÇÒÔwindow.performance.webkitNow()·½Ê½Ê¹Ó㬵«ÔÚChrome CanaryÖÐǰ׺±»¶ªÆúÁË£¬ÕâʹµÃËü¿ÉÒÔͨ¹ýwindow.performance.now()·½Ê½µ÷Óá£Paul IrishÔÚHTML5RocksÉÏÁ˹ØÓÚHRT¸ü¶àÄÚÈݵÄÎÄÕ¡£

ÏÖÔÚÎÒÃÇÖªµÀµ±Ç°µÄ¾«×¼Ê±¼ä£¬ÄÇÓпÉÒÔ׼ȷ²âÁ¿Ò³ÃæÐÔÄܵÄAPIÂ𣿺ðɣ¬ÏÖÔÚÓиöNavigation Timing API¿ÉÒÔʹÓã¬Õâ¸öAPIÌṩÁËÒ»ÖÖ¼òµ¥µÄ·½Ê½£¬À´»ñÈ¡ÍøÒ³ÔÚ¼ÓÔØ³ÊÏÖ¸øÓû§Ê±£¬¾«È·ºÍÏêϸµÄʱ¼ä²âÁ¿¼Ç¼¡£¿ÉÒÔÔÚconsoleÖÐʹÓÃwindow.performance.timingÀ´»ñȡʱ¼äÐÅÏ¢£º

ÏÔʾÔÚ¿ØÖÆÌ¨ÖеÄʱ¼äÐÅÏ¢

ÎÒÃÇ¿ÉÒÔ´ÓÉÏÃæµÄÊý¾Ý»ñÈ¡ºÜ¶àÓÐÓõÄÐÅÏ¢£¬ÀýÈçÍøÂçÑÓʱΪresponseEnd ¨C fetchStart£¬Ò³Ãæ¼ÓÔØÊ±¼äΪloadEventEnd ¨C responseEnd£¬´¦Àíµ¼º½ºÍÒ³Ãæ¼ÓÔØµÄʱ¼äΪloadEventEnd ¨C navigationStart¡£

ÕýÈçÄãËù¿´µ½µÄ£¬perfomance.memoryµÄÊôÐÔÒ²ÄÜÏÔʾJavaScriptµÄÄÚ´æÊý¾ÝʹÓÃÇé¿ö£¬Èç×ܵĶѴóС¡£

¸ü¶àNavigation Timing APIµÄϸ½Ú£¬ÔĶÁ Sam DuttonµÄ Measuring Page Load Speed With Navigation Timing¡£

ABOUT:MEMORY ºÍ ABOUT:TRACING

ChromeÖеÄabout:tracingÌṩÁËä¯ÀÀÆ÷µÄÐÔÄÜÊÓͼ£¬¼Ç¼ÁËChromeµÄËùÓÐÏ̡߳¢tabÒ³ºÍ½ø³Ì¡£

About:TracingÌṩÁËä¯ÀÀÆ÷µÄÐÔÄÜÊÓͼ

Õâ¸ö¹¤¾ßµÄÕæÕýÓô¦ÊÇÔÊÐíÄã²¶»ñChromeµÄÔËÐÐÊý¾Ý£¬ÕâÑùÄã¾Í¿ÉÒÔÊʵ±µØµ÷ÕûJavaScriptÖ´ÐУ¬»òÓÅ»¯×ÊÔ´¼ÓÔØ¡£

Lilli ThompsonÓÐһƪд¸øÓÎÏ·¿ª·¢ÕßµÄʹÓÃabout:tracing·ÖÎöWebGLÓÎÏ·µÄÎÄÕ£¬Í¬Ê±Ò²ÊʺÏJavaScriptµÄ¿ª·¢Õß¡£

ÔÚChromeµÄµ¼º½À¸Àï¿ÉÒÔÊäÈëabout:memory£¬Í¬ÑùÊ®·ÖʵÓ㬿ÉÒÔ»ñµÃÿ¸ötabÒ³µÄÄÚ´æÊ¹ÓÃÇé¿ö£¬¶Ô¶¨Î»ÄÚ´æÐ¹Â©ºÜÓаïÖú¡£

×ܽá

ÎÒÃÇ¿´µ½£¬JavaScriptµÄÊÀ½çÖÐÓкܶàÒþ²ØµÄÏÝÚ壬ÇÒ²¢Ã»ÓÐÌáÉýÐÔÄܵÄÒøµ¯¡£Ö»ÓаÑһЩÓÅ»¯·½°¸×ÛºÏʹÓõ½£¨ÏÖʵÊÀ½ç£©²âÊÔ»·¾³£¬²ÅÄÜ»ñµÃ×î´óµÄÐÔÄÜÊÕÒæ¡£¼´±ãÈç´Ë£¬Á˽âÒýÇæÊÇÈçºÎ½âÊͺÍÓÅ»¯´úÂ룬¿ÉÒÔ°ïÖúÄãµ÷ÕûÓ¦ÓóÌÐò¡£

²âÁ¿£¬Àí½â£¬ÐÞ¸´¡£²»¶ÏÖØ¸´Õâ¸ö¹ý³Ì¡£

ͼƬÀ´Ô´: Sally Hunter

½÷¼Ç¹Ø×¢ÓÅ»¯£¬µ«ÎªÁ˱ãÀû¿ÉÒÔÉáÆúһЩºÜСµÄÓÅ»¯¡£ÀýÈ磬ÓÐЩ¿ª·¢ÕßÑ¡Ôñ.forEachºÍObject.keys´úÌæforºÍfor..inÑ­»·£¬¾¡¹ÜÕâ»á¸üÂýµ«Ê¹Óøü·½±ã¡£Òª±£Ö¤ÇåÐѵÄÍ·ÄÔ£¬ÖªµÀʲôÓÅ»¯ÊÇÐèÒªµÄ£¬Ê²Ã´ÓÅ»¯ÊDz»ÐèÒªµÄ¡£

ͬʱעÒ⣬ËäÈ»JavaScriptÒýÇæÔ½À´Ô½¿ì£¬µ«ÏÂÒ»¸öÕæÕýµÄÆ¿¾±ÊÇDOM¡£»ØÁ÷ºÍÖØ»æµÄ¼õÉÙÒ²ÊÇÖØÒªµÄ£¬ËùÒÔ±ØÒªÊ±ÔÙÈ¥¶¯DOM¡£»¹ÓоÍÊÇÒª¹Ø×¢ÍøÂ磬HTTPÇëÇóÊÇÕä¹óµÄ£¬ÌرðÊÇÒÆ¶¯ÖÕ¶ËÉÏ£¬Òò´ËҪʹÓÃHTTPµÄ»º´æÈ¥¼õÉÙ×ÊÔ´µÄ¼ÓÔØ¡£

¼ÇסÕ⼸µã¿ÉÒÔ±£Ö¤Äã»ñÈ¡Á˱¾ÎĵĴ󲿷ÖÐÅÏ¢£¬Ï£Íû¶ÔÄãÓÐËù°ïÖú£¡

   
9118 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕ Ïà¹ØÎĵµ Ïà¹Ø¿Î³Ì



Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Àí½âJavascript
·ÇµäÐÍajaxʵ¼ù
³¹µ×µÄAjax
javascript ʹÓÃCookies
ʹÓà jQuery ¼ò»¯ Ajax ¿ª·¢


Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ


ijº½¿Õ¹«Ë¾IT²¿ JavaScriptʵ¼ù
ijµçÊÓÈí¼þ HTML5ºÍJavaScript
Öк½ÐÅ JavaScript¸ß¼¶Ó¦Óÿª·¢
´óÇìÓÍÌï web½çÃæAjax¿ª·¢¼¼Êõ
ºÍÀûʱ ʹÓÃAJAX½øÐÐWEBÓ¦Óÿª·¢