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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ȫջʽJavaScript
 
ÒëÕߣº³ÂöÎΰ À´Ô´£ºsmashingmagazine ·¢²¼ÓÚ 2015-03-24
  2494  次浏览      27
 

Èç½ñ£¬ÔÚ´´½¨Ò»¸öWebÓ¦ÓõĹý³ÌÖУ¬ÄãÐèÒª×ö³öÐí¶à¼Ü¹¹·½ÃæµÄ¾ö²ß¡£µ±È»£¬Äã»áÏ£Íû×öµÄÿһ¸ö¾ö¶¨¶¼ÊÇÕýÈ·µÄ£ºÄãÏëҪʹÓÃÄܹ»¿ìËÙ¿ª·¢µÄ¼¼Êõ£¬Ö§³Ö³ÖÐøµÄµü´ú£¬×î¸ßµÄ¹¤×÷ЧÂÊ£¬Ñ¸ËÙ£¬½¡×³ÐÔÇ¿¡£ÄãÏëÒª¾«ÒæÇ󾫲¢ÇÒ×ã¹»Ãô½Ý¡£ÄãÏ£ÍûÄãÑ¡ÔñµÄ¼¼ÊõÄܹ»ÔÚ¶ÌÆÚºÍ³¤ÆÚÉ϶¼ÈÃÄãµÄÏîĿȡµÃ³É¹¦¡£µ«ÕâЩ¼¼Êõ¶¼²»ÊÇÇá¶øÒ×¾Ù¾ÍÄÜÑ¡³öÀ´µÄ¡£

Îҵľ­Ñ鏿ËßÎÒ£¬È«Õ»Ê½JavaScript·ûºÏÁËÕâËùÓеÄÒªÇ󡣿ÉÄÜÄãÒѾ­·¢ÏÖÁËЩÐí¶ËÄߣ¬ÓÖ»òÐíÄãÒѾ­ÔÚ¿¼ÂÇËüµÄʵÓÃÐÔ£¬²¢ÇÒÔÚºÍÅóÓÑÌÖÂÛÕùÂÛËüµÄ»°Ìâ¡£µ«ÊÇÄãÊÇ·ñÇ××Ô³¢ÊÔ¹ýÄØ£¿ÔÚÕâÆªÎÄÕÂÖУ¬ÎÒ»á¶ÔÓÚȫջʽJavaScript¸ø³öÒ»¸ö±È½ÏÈ«ÃæµÄ½éÉÜ£¬ÎªÊ²Ã´Ëü»áÊÇÕýÈ·µÄÑ¡Ôñ£¬ËüÓÖÊÇÈçºÎʩչËüµÄħ·¨µÄ¡£

Ïȸø³öÒ»¸ö¸ÅÀ¨Ô¤ÀÀ£º

½ÓÏÂÀ´ÎÒ»áÒ»ÏîÒ»ÏîµØ½éÉÜÕâЩ×é¼þ¡£µ«ÊÇÔÚÕâ֮ǰ£¬ÎÒÃǼò¶ÌµØ»Ø¹Ëһϣ¬ÎÒÃÇÊÇÈçºÎ·¢Õ¹µ½ÏÖÔÚµÄÕâ¸ö½×¶ÎµÄ¡£

ÎÒΪʲôѡÔñÓÃJavaScript

´Ó1998Ä꿪ʼ£¬ÎÒ¾ÍÊÇÒ»¸öWeb¿ª·¢Õß¡£µ±Ê±£¬ÎÒÃÇʹÓÃPerl½øÐдó¶àÊýµÄ·þÎñÆ÷¶ËµÄ¿ª·¢£»µ«ÊÇ´ÓÄÇʱºò¿ªÊ¼£¬ÎÒÃǾÍÔÚ¿Í»§¶ËʹÓÃJavaScript¡£Web·þÎñÆ÷¶ËµÄ¼¼ÊõÒѾ­·¢ÉúÁË·­Ì츲µØµÄ±ä»¯£ºÎÒÃDZ»Ò»²¨ÓÖÒ»²¨µÄ¼¼Êõ³±Á÷ÍÆ×ÅÍùǰ×ߣ¬PHP£¬ASP£¬JSP£¬.NET£¬Ruby£¬Python£¬ÕâÀïÖ»ÁгöÁ˼¸¸öÀý×Ó¡£¿ª·¢ÈËÔ±ÃÇ¿ªÊ¼Òâʶµ½£¬ÔÚ·þÎñÆ÷¶ËºÍ¿Í»§¶ËʹÓò»Í¬µÄÓïÑÔʹµÃÊÂÇé±äµÃ¸´ÔÓ»¯¡£

ÔÚÔçÆÚµÄPHPºÍASPµÄʱ´ú£¬ÄǸöʱºòÄ£°åÒýÇæ»¹½ö½öÊǸöÉèÏ룬¿ª·¢ÈËÔ±ÃÇÔÚHTMLÖÐǶÈëËûÃǵÄÓ¦ÓôúÂë¡£ÎÒÃǾ­³£¿ÉÒÔ¿´µ½ÏÂÃæÕâÖֽű¾Ç¶ÈëµÄд·¨£º

<script>
<?php
if ($login == true){
?>
alert("Welcome");
<?php
}
?>
</script>

»òÕ߸üÔã¸â£º

<script>
var users_deleted = [];
<?php
$arr_ids = array(1,2,3,4);
foreach($arr_ids as $value){
?>
users_deleted.push("<php>");
<?php
}
?>
</script>

¶ÔÓÚÐÂÊÖÀ´Ëµ£¬ºÜÈÝÒ×±»²»Í¬ÓïÑÔÖ®¼äµÄÓ÷¨¶ø»ìÏý£¬·¸ÏÂһЩºÜµäÐ͵ĴíÎ󣬱ÈÈçforºÍforeach¡£¸üΪ²»Ë¬µÄÊÇ£¬ÒÔÕâÑùµÄ·½Ê½À´Ð´´úÂ룬ʹµÃ·þÎñÆ÷¶ËºÍ¿Í»§¶ËºÜÄÑÒԷdz£ºÍгµÄ·½Ê½´¦ÀíÏàͬµÄÊý¾Ý½á¹¹£¬¼´Ê¹ÊǽñÌìÒ²ÊÇÈç´Ë£¨µ±È»³ý·ÇÄãµÄ¿ª·¢ÍŶÓÓÐרְµÄǰ¶ËºÍºó¶Ë¹¤³Ìʦ ¡ª µ«¼´Ê¹ËûÃÇÖ®¼äÄܹ»¹²ÏíÐÅÏ¢£¬µ«ÈÔÈ»²»Äܽö½ö»ùÓÚ¶Ô·½µÄ´úÂë½øÐкÏ×÷£©¡£

<?php
$arr = array("apples", "bananas", "oranges", "strawberries"),
$obj = array();
$i = 10;
foreach($arr as $fruit){
$obj[$fruit] = $i;
$i += 10;
}
echo json_encode(obj);
?>
<script>
$.ajax({
url:"/json.php",
success: function(data){
var x;
for(x in data){
alert("fruit:" + x + " points:" + data[x]);
}
}
});
</script>

×î³õ£¬¶ÔÓÚͳһʹÓÃÒ»ÖÖ±à³ÌÓïÑԵij¢ÊÔÊÇʹÓúǫ́µÄÓïÑÔ±àд¿Í»§¶ËµÄ×é¼þ£¬È»ºó±àÒë³ÉJavaScript¡£µ«ÕâÖÖ·½Ê½²¢Ã»ÓÐÈçÆÚÍûµÄÒ»ÑùºÜºÃµØ¹¤×÷£¬Ðí¶àÏà¹ØµÄÏîÄ¿¶¼Ê§°ÜÁË£¨±ÈÈç±»ASP MVCÈ¡´úÁ˵ÄASP.NET Web forms£¬ ÓÖ±ÈÈçÕýÔÚÖð²½±»PolymerÈ¡´úµÄGWT£©¡£µ±È»ÕâЩÏë·¨¶¼ÊÇΰ´óµÄ£¬´Ó±¾ÖÊÉϽ²£¬¶¼ÊÇÏëÔÚ·þÎñÆ÷¶ËºÍ¿Í»§¶ËʹÓÃͬһÖÖÓïÑÔ£¬ÈÃÎÒÃÇ¿ÉÒÔÖØÓÃһЩ×é¼þºÍ×ÊÔ´£¨×¢ÒâÕâÀïµÄ¹Ø¼ü´Ê£º×ÊÔ´£©¡£

×îÖյóöµÄ´ð°¸ºÜ¼òµ¥£º½«JavaScript·Åµ½·þÎñ¶Ë

ÆäʵJavaScriptµ®ÉúÖ®³õÊÇÔÚÍø¾°¹«Ë¾µÄÆóÒµ¼°·þÎñÆ÷µÄ·þÎñ¶Ë£¬Ö»Êǵ±Ê±Ëü»¹Ã»ÓÐÍêȫ׼±¸ºÃ¡£¾­¹ýÊýÄêµÄÄ¥Á¶ºÍ´íʧ£¬×îÖÕNode.js³öÏÖÁË£¬Ëü²»½ö½«JavaScript·Åµ½ÁË·þÎñÆ÷¶Ë£¬Í¬Ê±Ò²ÍƹãÁË·Ç×èÈûʽ±à³Ì£¨non-blocking programming£©µÄ˼Ï룬ÕâÖÖ˼ÏëÀ´×ÔÓÚnginxµÄÊÀ½ç¡£¸ÐлNodeµÄ´´Ê¼ÕßÃÇnginxµÄ¼¼Êõ±³¾°£¬²¢ÇÒ¼ÌÐø£¨´ÏÃ÷µØ£©±£³ÖÁËËüµÄ¼òµ¥ÐÔ£¬Ò²¸ÐлJavaScriptÌìÉúµÄʼþÂÖѯ»úÖÆ¡£

£¨Ò»¾ä»°¸ÅÀ¨£¬·Ç×èÈûʽ±à³ÌÄ¿µÄÔÚÓÚ½«ÏûºÄʱ¼äµÄÈÎÎñ·Åµ½Ò»±ß£¬Í¨¹ýÖ¸¶¨ÔÚÕâЩÈÎÎñ½áÊøÊ±ÐèÒª×öµÄ²Ù×÷£¬ÕâÑù¿ÉÒÔÔÚͬһʱ¿ÌÈô¦ÀíÆ÷È¥´¦ÀíÆäËûµÄÇëÇó¡££©

Node.jsÓÀ¾ÃÐԵظıäÁËÎÒÃÇ´¦ÀíI/O·ÃÎʵķ½Ê½¡£×÷ΪWeb¿ª·¢Õߣ¬ÎÒÃǹýȥһֱʹÓÃÈçϵķ½Ê½·ÃÎÊÊý¾Ý¿â£¨I/O£©:

var resultset = db.query("SELECT * FROM 'table'");
drawTable(resultset);

ÕâÀïµÄµÚÒ»ÐдúÂë±¾ÖÊÉÏÒѾ­×èÈûÁËÄãµÄ´úÂ룬ÒòΪÄãµÄ´úÂëÍ£Ö¹ÏÂÀ´µÈ´ýÊý¾Ý¿âÇý¶¯·µ»ØÒ»¸ö½á¹û¼¯£¨resultset£©¡£¶øÓë´Ëͬʱ£¬ÄãµÄƽ̨¼Ü¹¹Æäʵ¸øÄãÌṩÁ˲¢·¢µÄ·½·¨£¬Í¨³£ÊÇͨ¹ýỊ̈߳¨threads£©ºÍÅÉÉú£¨forks£©¡£

ÔÚNode.jsºÍ·Ç×èÈûʽ±à³ÌµÄ°ïÖúÏ£¬ÎÒÃÇ¿ÉÒÔ¸ü¶àµÄ¿ØÖÆÎÒÃdzÌÐòµÄÖ´ÐÐÁ÷¡£ÏÖÔÚ£¨¾¡¹ÜÔÚÊý¾Ý¿âI/OÇý¶¯Æ÷µÄ±³ºó¿ÉÄÜÒѾ­Óв¢ÐÐÖ´ÐУ©£¬Äã¿ÉÒÔ¶¨ÒåÄãµÄ³ÌÐòÔÚI/O²Ù×÷ÆÚ¼ä²¢ÐÐ×öµÄÊÂÇ飬ÒÔ¼°ÔÚ½ÓÊÕµ½½á¹û¼¯Ö®ºó×öµÄ²Ù×÷¡£

db.query("SELECT * FROM 'table'", function(resultset){
drawTable(resultset);
});
doSomeThingElse();

ÉÏÃæµÄ´úÂëÆ¬¶ÎÖУ¬ÎÒÃǶ¨ÒåÁËÁ½¸ö³ÌÐòÁ÷£ºµÚÒ»¸öÔÚÎÒÃÇ·¢³öÊý¾Ý¿â²éѯ֮ºóÖ´ÐеIJÙ×÷£¬µÚ¶þ¸öÊÇÒԻص÷µÄ·½Ê½ÔÚÎÒÃǽÓÊÕµ½½á¹û¼¯Ö®ºó×öµÄ²Ù×÷¡£ÕâÊÇÒ»¸ö·Ç³£ÓÅÑŲ¢ÇÒÇ¿´óµÄ´¦Àí²¢·¢µÄ·½Ê½¡£ÕýÈçËûÃÇËù˵µÄ£¬¡°Ò»Çж¼ÔÚ²¢ÐÐÖ´ÐСª¡ª³ýÁËÄãµÄ´úÂë¡££¨Evetything runs in parallel ¡ª except your code.£©¡±ÕâÑù£¬ÄãµÄ´úÂë»á¸üÒ×д£¬Óиü¸ßµÄ¿É¶ÁÐÔ£¬ÈÝÒ×Àí½â£¬Ò²±ãÓÚά»¤£¬ÕâЩ¶¼»ùÓÚÄãÕÒ»ØÁ˶ԳÌÐòÁ÷µÄ¿ØÖÆ¡£

ÕâЩ¹ÛµãÔç¾Í²»ÊǺÜеĹ۵㣬ÄÇΪʲôËûÃÇËæ×ÅNode.js±äµÃÈç´ËÁ÷ÐÐÆðÀ´¡£ºÜ¼òµ¥£º·Ç×èÈûʽ±à³Ì¿ÉÒÔÓжàÖØÊµÏֵķ½Ê½¡£µ«¿ÉÄÜ×î¼òµ¥µÄ¾ÍÊÇʹÓûص÷ºÍʼþÂÖѯ¡£ÔÚ´ó¶àÊýÓÚÓïÑÔÀ×öµ½Õâµã²¢²»ÊÇÒ»¸ö¼òµ¥µÄÊÂÇé¡£»Øµ÷»úÖÆÔÚÆäËûµÄһЩÓÚÓïÑÔÀïÊÇÒ»¸ö±È½Ï³£¼ûµÄ¹¦ÄÜ£¬µ«ÊÇʼþÂÖѯȴ²»ÊÇ¡£Äã»á¾­³£·¢ÏÖ×Ô¼º»¹ÐèÒªÔÚһЩÀ©Õ¹¿âÉÏ×öÕõÔú£¨±ÈÈ磬PythonÖÐʹÓÃTornado£©¡£

µ«ÊÇÔÚJavaScriptÖУ¬»Øµ÷»úÖÆÒѾ­±»ÄÚ½¨ÔÚÓïÑÔÖУ¬ ʼþÂÖѯҲÊÇÈç´Ë¡£¶ø¶ÔJavaScriptÉÔÓÐÁ˽âµÄ³ÌÐòÔ±¶ÔËüÃÇÒ²·Ç³£ÊìϤ£¨»òÕßÖÁÉÙʹÓùýËüÃÇ£¬¼´Ê¹ËûÃÇÓпÉÄܲ¢²»ÍêÈ«Àí½âʲôÊÇʼþÂÖѯ£©¡£Í»È»Ö®¼ä£¬µØÇòÉÏËùÓеĴ´Òµ¹«Ë¾¶¼¿ÉÒÔÔÚ¿Í»§¶ËºÍ·þÎñÆ÷¶ËÖØÓÿª·¢ÈËÔ±£¨»òÕß×ÊÔ´£©£¬½â¾öÁË¡°ÐèÒªPython´óʦ£¨Python Guru Needed£©¡±µÄÕÐÆ¸·¢²¼ÎÊÌâ¡£

Òò´Ë£¬ÏÖÔÚÎÒÃÇÓÐÁËÒ»¸ö·¢Õ¹Ñ¸ËÙµÄÆ½Ì¨£¨¸ÐлÓÚ·Ç×èÈûʽ±à³Ì£©£¬ºÍÒ»¸ö·Ç³£Ò×ÓÚʹÓõÄÓïÑÔ£¨¸ÐлJavaScript£©¡£µ«ÊÇÕâ¾Í×ã¹»ÁËÂð£¿ËüÊǿɳÖÐøµÄÂð£¿ÎÒÈ·ÐÅ£¬JavaScriptÔÚ½«À´»áÓÐÒ»¸ö·Ç³£ÖØÒªµÄµØÎ»¡£ÏÂÃæÎÒÀ´¸æËßÄãΪʲô¡£

º¯Êýʽ±à³Ì

JavaScriptÊǵÚÒ»¸ö½«º¯Êýʽ·¶Ê½´ø¸øÃñÖÚµÄÓïÑÔ£¨µ±È»£¬LispµÚÒ»¸ö³öÏÖ£¬µ«ÊÇ´ó¶àÊýµÄ³ÌÐòÔ±¶¼Ã»ÓÐʹÓÃËü¿ª·¢¹ýÒ»¸ö¿ÉÒÔ×÷Ϊ²úÆ·µÄÓ¦Óã©¡£LispºÍSelf£¬ÕâÁ½¸öÉîÉîÓ°ÏìÁËJavaScriptµÄÓïÑÔ£¬³äÂúÁË´´ÐµÄÀíÄËüÃǽâ·ÅÁËÎÒÃǵÄ˼Ï룬ȥÍÚ¾òеļ¼Êõ£¬Ä£Ê½ºÍ¹æ·¶¡£ÕâЩ¶¼ÑÓÐøµ½ÁËJavaScriptÉÏ¡£¿´Ò»ÏÂmondas, Church number, »òÕßÉõÖÁ£¨×÷Ϊ¸üÓÐʵ¼ùÐÔµÄÀý×Ó£©UnderscoreµÄCollections functions£¬ÕâЩ¿ÉÒÔ½ÚÔ¼ÄãÒ»ÐÐÓÖÒ»ÐеĴúÂë¡£

¶¯Ì¬¶ÔÏóÒÔ¼°Ô­Ðͼ̳Ð

ûÓÐÀࣨClasses£©£¬Ò²Ã»ÓÐÎÞÇîÎÞ¾¡µÄÀà²ã´Î½á¹¹µÄÃæÏò¶ÔÏó£¨Object-oriented£©±à³ÌÊÇÌṩÁ˸ü¿ìËٵıà³ÌÌåÑ顪¡ªÖ»Òª´´½¨¶ÔÏó£¬Ìí¼Ó·½·¨È»ºóʹÓÃËûÃÇ¡£¸üÖØÒªµÄÊÇ£¬Ëü´ó´ó¼õÉÙÁËά»¤Ê±Öع¹µÄ³É±¾£¬ÒòΪËüÔÊÐí³ÌÐòÔ±Ö±½ÓÐ޸ĶÔÏóµÄʵÀý£¬¶ø²»ÐèÒªÐÞ¸ÄÀà¡£ÕâÖÖËٶȺÍÁé»îµÄ·½Ê½Îª¿ìËÙ¿ª·¢ÆÌƽÁ˵À·¡£

JavaScript¾ÍÊÇ»¥ÁªÍø

JavaScriptÊÇÒò»¥ÁªÍø¶øÉúµÄ¡£Ëü´ÓÒ»¿ªÊ¼¾Í³öÏÖÁË£¬²¢ÇÒ°éËæµ½ÏÖÔÚ¡£ÈκÎÏëÒª´Ý»ÙËüµÄ³¢ÊÔ¶¼ÒÔʧ°Ü¶ø¸æÖÕ£¬±ÈÈçJava AppletsµÄË¥Â䣬VBScript±»Î¢ÈíµÄTypeScript£¨Ëü×îÖջᱻ±àÒë³ÉJavaScript£©ËùÈ¡´ú£¬ÒÔ¼°FlashÔÚÊÖ»úÊг¡ÒÔ¼°HTML5ÉϵÄÒ»°ÜÍ¿µØ¡£Èç¹ûÏë²»ÆÆ»µ³ÉǧÉÏÍò¸öWebÒ³Ãæ¶øÈ¡´úJavaScriptÊDz»¿ÉÄܵģ¬ËùÒÔÎÒÃǽÓÏÂÀ´µÄÄ¿±êÓ¦¸ÃÊÇÌá¸ßºÍÍêÉÆËü¡£Õâ¸ö¹¤×÷£¬Ã»ÓÐË­±ÈECMAµÄTechnical Committee 39¸üÊʺÏÁË¡£

µ±È»£¬JavaScriptµÄÌæ´úÕßÃÇÿÌì¶¼ÔÚµ®Éú£¬±ÈÈçCoffeeScript£¬TypeScript£¬ÒÔ¼°³ÉǧÉÏÍòÄܱ»±àÒë³ÉJavaScriptµÄÓïÑÔ¡£ÕâÐ©Ìæ´úÕßÃÇÔÚ¿ª·¢¹ý³ÌÖÐÒ²ÐíÊÇÓÐÓõģ¨Í¨¹ýsource maps£©£¬µ«ÊÇËûÃÇ×îÖÕ¶¼²»¿ÉÄܳɹ¦µØ´úÌæJavaScript£¬Á½¸öÖ÷ÒªÔ­Òò£ºËûÃǵÄÉçÇøÓÀÔ¶²»»á±ÈJavaScript¸ü´ó£¬ËûÃÇÖеÄÓÅÐãÌØÐԻᱻECMAScript£¨Ò²¾ÍÊÇJavaScript£©ËùÎüÊÕ¡£JavaScript²»ÊÇ»ã±àÓïÑÔ£¬ËüÊÇÒ»¸öÄãÄÜÀí½â´úÂëµÄ¸ß¼¶±à³ÌÓïÑÔ¡ª¡ªËùÒÔÄãÓ¦¸ÃÀí½âËü¡£

¶Ëµ½¶Ë£¨End-to-End£©JavaScript£ºNode.jsºÍMongoDB

ÎÒÃÇÒѾ­½éÉÜÁËΪʲôҪʹÓÃJavaScript¡£½Ó×Å£¬ÎÒÃÇÀ´¿´¿´Ê¹ÓÃNode.jsºÍMongoDBµÄÀíÓÉ¡£

NODE.JS

Node.jsÊÇÒ»¸ö´î½¨¿ìËٺͿÉÀ©Õ¹µÄÍøÂçÓ¦ÓÃµÄÆ½Ì¨¡ª¡ªÕýÈçNode.jsÍøÕ¾ÉÏËù˵¡£µ«ÊÇNode.jsÔ¶²»Ö¹ÕâЩ£ºËüÊÇÈç½ñ×î»ðµÄJavaScriptÔËÐл·¾³£¬±»´óÁ¿µÄÓ¦ÓúͳÌÐò¿âËùʹÓ᪡ªÉõÖÁÊÇä¯ÀÀÆ÷µÄ¿â´úÂëÒ²ÔËÐÐÔÚNode.jsÉÏ¡£¸üÖØÒªµÄÊÇ£¬ÕâÖÖ·þÎñÆ÷¶ËµÄ¿ìËÙÖ´ÐÐÈóÌÐòÔ±¿ÉÒÔרעÓÚ¸ü¸´ÔÓµÄÎÊÌ⣬±ÈÈç×ö×ÔÈ»ÓïÑÔ´¦ÀíµÄNatural¡£¼´Ê¹Ä㲢ûÓмƻ®ÓÃNode.jsÀ´Ð´ÄãµÄ·þÎñÆ÷¶ËÓ¦Óã¬ÄãÒ²ÓпÉÄÜʹÓûùÓÚNode.jsµÄ¹¤¾ßÀ´¸Ä½øÄãµÄ¿ª·¢Á÷³Ì¡£¾ÙÀýÀ´Ëµ£ºÓÃBowerÀ´×öǰ¶Ë°üÒÀÀµ¹ÜÀí£¬Mocha×öµ¥Ôª²âÊÔ£¬Grunt×ö×Ô¶¯»¯´ò°ü£¬ÉõÖÁÓÃBrachets×öÈ«ÎÄ´úÂë±à¼­¡£

Òò´Ë£¬Èç¹ûÄãÕý×¼±¸¿ª·¢·þÎñÆ÷¶Ë»î¿Í»§¶ËµÄJavaScriptÓ¦Óã¬Äã¾ÍÐèÒª¶ÔNode.js¸ü¼ÓÊìϤ£¬ÒòΪÄãÔÚÈÕ³£¹¤×÷ÖлáÐèÒªËû¡£ÓÐһЩºÜÓÐȤµÄ´úÌæµÄÑ¡Ôñ£¬µ«ÊÇËüÃÇÖеÄÈκÎÒ»¸öµÄÉçÇø¶¼²»¼°Node.jsµÄ10%¡£

MONGODB

MongoDBÊÇÒ»¸ö»ùÓÚÎĵµ£¨Document-based£©NoSQLÊý¾Ý¿â£¬ËüʹÓÃJavaScript×÷ΪËüµÄ²éѯÓïÑÔ£¨µ«ÊÇËü²»ÊÇÓÃJavaScriptдµÄ£©£¬ËüÍêÉÆÁËÎÒÃǶ˵½¶ËµÄJavaScriptƽ̨¡£µ«ÊÇÕâ¸ö²¢²»ÊÇÎÒÃÇÑ¡ÔñMonoDBµÄÖ÷ÒªÔ­Òò¡£

MongoDB ÊÇÎÞģʽµÄ£¨schema-less£©£¬ÔÊÐíÄãÒԷdz£Áé»îµÄ·½Ê½°Ñ¶ÔÏó³Ö¾Ã»¯£¬Òò´ËÄܹ»Ñ¸ËÙµÄÓ¦¶ÔÐèÇó±ä¸ü¡£´ËÍ⣬Ëü¾ßÓи߶ȿÉÀ©Õ¹ÐÔ£¬²¢ÇÒ»ùÓÚmap-reduce£¬ÈÃËü·Ç³£ÊʺÏÓÚ´óÊý¾ÝµÄÓ¦Óá£MongoDBÈç´ËÁé»î£¬ÒÔÖÁÓÚËü¼È¿ÉÒÔÓÃ×÷ÎÞģʽµÄÎĵµÊý¾Ý¿â£¬Ò²¿ÉÒÔÓÃ×÷¹ØÏµÊý¾Ý´æ´¢£¨¾¡¹ÜËüȱÉÙÊÂÎñ£¬Ö»ÄÜͨ¹ýÄ£ÄâÀ´ÊµÏÖ£©£¬ÉõÖÁÊÇÓÃÀ´»º´æ½á¹ûµÄ¼üÖµ¶Ô´æ´¢£¬¾ÍÏñMemcachedºÍRedis¡£

»ùÓÚExpressµÄ·þÎñÆ÷¶Ë×é¼þ»¯

·þÎñÆ÷¶ËµÄ×é¼þ»¯¿ª·¢Ò»Ö±²»ÊÇÒ»¼þÈÝÒ×µÄÊÇ¡£µ«ÊÇ Express£¨ºÍConnect£©´øÀ´ÁË¡°Öмä¼þ£¨middleware£©µÄ˼Ï롱¡£ÔÚÎÒ¿´À´£¬Öмä¼þÊÇ·þÎñÆ÷¶Ë¶¨Òå×é¼þ×îºÃµÄ·½Ê½¡£Èç¹ûÄãÏëÕÒ¸öÊìϤµÄģʽÀ´¶Ô±ÈÒ»ÏµĻ°£¬ÄÇËü·Ç³£½Ó½üÓڹܵÀºÍ¹ýÂËÆ÷£¨pipes and filters£©¡£

»ù±¾Ë¼Ïë¾ÍÊǽ«ÄãµÄ×é¼þ×÷Ϊ¹ÜµÀµÄÒ»²¿·Ö¡£¹ÜµÀ´¦ÀíÒ»¸öÇëÇó£¨Ò²½ÐÊäÈ룩£¬Éú³ÉÒ»¸ö½á¹û£¨Ò²½ÐÊä³ö£©£¬µ«ÊÇÄãµÄ×é¼þ²¢²»¸ºÔðÕû¸öÏìÓ¦½á¹û¡£Ïà·´£¬ËüÖ»×öËüÐèÒª×öµÄÐ޸ģ¬È»ºó½«Î¯ÅɸøÏ¹ܵÀµÄÏÂÒ»½Úµã¡£µ±¹ÜµÀµÄ×îºóµÄ½Úµã´¦ÀíÍêÖ®ºó£¬Õâ¸ö½á¹ûÔÙ·µ»Ø¸ø¿Í»§¶Ë¡£

ÎÒÃdzÆÕâЩ¹ÜµÀµÄ½ÚµãΪÖмä¼þ¡£ºÜÃ÷ÏÔ£¬ÎÒÃÇ¿ÉÒÔ´´½¨Á½ÖÖÀàÐ͵ÄÖмä¼þ£º

ÖмäÐÍ£¨Intermediates£©

Ò»¸öÖмäÐͽÚÖмä¼þÀíÇëÇóºÍÏìÓ¦£¬µ«ÊÇËü²»¸ºÈ«È¨ÔðÕû¸öÏìÓ¦£¬¶øÊǼÌÐø½«ËüÃÇ·ÖÅɸøÏÂÒ»¸öÖмä¼þ¡£

ÖÕ½áÐÍ£¨Finals£©

Ò»¸ö½áÊøÐÍÖмä¼þ¸ºÔð×îÖÕµÄÏìÓ¦½á¹û¡£Ëü¶ÔÇëÇóºÍÏìÓ¦½øÐд¦Àí£¬Ö®ºó²»»á·ÖÅɸøÏÂÒ»¸öÖмä¼þ¡£µ«Êµ¼ùÖУ¬¼ÌÐø·ÖÅɸøÒ»¸öÖмä¼þ¿ÉÒÔ¸ø¼Ü¹¹´øÀ´¸ü¸ßµÄÁé»îÐÔ£¨±ÈÈ磬֮ºóÐèÒªÔö¼ÓÆäËûµÄÖмä¼þ£©£¬¼´Ê¹ÏÂÒ»¸öÖмä¼þ²¢²»´æÔÚ£¨ÕâÖÖÇé¿öÏ£¬½á¹û»áÖ±½Ó±»´«µÝµ½¿Í»§¶Ë£©¡£

ȡһ¸ö¾ßÌåµÄÀý×Ó£¬¼ÙÉè·þÎñÆ÷¶ËÓÐÒ»¸ö¡°Óû§¹ÜÀí¡±µÄ×é¼þ¡£¸ù¾ÝÖмä¼þµÄ·½Ê½£¬ÎÒÃÇ×îºÃÄÜÓÐÖÕ½áÐͺÍÖмäÐ͵ÄÖмä¼þ¡£¶ÔÓÚÖÕ½á½Úµã£¬ÎÒÃÇÒªÓд´½¨Óû§ºÍÁгöÓû§µÄ¹¦ÄÜ¡£µ«ÊÇÔÚÎÒÃÇ×öÕâЩ²Ù×÷֮ǰ£¬ÎÒÃÇÐèҪʹÓÃÖмä½ÚµãÀ´×öÈÏÖ¤£¨ÒòΪÎÒÃDz»Ï£ÍûûÓÐÈÏÖ¤¹ýµÄÇëÇóÄܽøÀ´£¬ÉõÖÁ´´½¨Óû§£©¡£Ò»µ©ÎÒÃÇ´´½¨ºÃÁËÕâЩÈÏÖ¤Öмä¼þ£¬µ±ÎÒÃÇÏëÒª°ÑÒ»¸öÔ­ÏȲ»ÐèÒªÈÏÖ¤µÄ¹¦Äܸıä³ÉÈÏÖ¤¹¦ÄܵÄʱºò£¬ÎÒÃÇÖ»ÐèÒª½«Õâ¸öÖмä¼þ°²²åÔÚÏàÓ¦µÄλÖá£

µ¥Ò³Ã棨Single-Page£©Ó¦ÓÃ

µ±ÄãʹÓÃȫջʽJavaScriptµÄʱºò£¬¶àÊýÇé¿öÏÂÄã»áרע¿ª·¢µ¥Ò³ÃæÓ¦Óᣴó¶àÊýµÄWeb¿ª·¢ÕßÃǶ¼½û²»×¡²»Ö¹Ò»´ÎµØ³¢ÊÔ×Å×ÅÊÖÓÚµ¥Ò³ÃæÓ¦Óá£ÎÒÒѾ­´´½¨Á˼¸¸ö£¨¶àÊýΪ¸öÈ˵ģ©£¬ÎÒÏàÐÅËûÃǾÍÊÇWebÓ¦ÓõÄδÀ´¡£ÄãÊÇ·ñÔÚÒÆ¶¯Á´½ÓÉ϶Աȹýµ¥Ò³ÃæÓ¦ÓúÍͨ³£µÄWebÓ¦Óã¿ËûÃÇÔÚÏìÓ¦ËٶȵIJî¾àÓÐÊýÊ®ÃëÖ®¶à¡£

£¨×¢Ò⣺ÓÐЩÈË¿ÉÄܲ»Í¬ÒâÎҵĹ۵㡣±ÈÈçTwitter£¬»Ø¹öÁËËûÃǵĵ¥Ò³ÃæÍ¾¾¶¡£Óë´Ëͬʱ£¬ºÜ¶à´óµÄÍøÕ¾ÕýÔÚ²½Èëµ¥Ò³ÃæÊ±´ú£¬±ÈÈçZendesk¡£ÎÒÒѾ­¿´µ½×ã¹»µÄÖ¤¾ÝÖ¤Ã÷µ¥Ò³ÃæÓ¦ÓôøÀ´µÄºÃ´¦£¬²¢ÇÒ¶Ô´ËÉîÐŲ»ÒÉ¡£µ«ÊǾßÌ廹ÊÇÒòÇé¿ö¶øÒì¡££©

Èç¹ûµ¥Ò³ÃæÓ¦ÓÃÈç´ËÇ¿´ó£¬ÄÇΪʲô»¹ÊÇҪѡÔñÀÏÍÁµÄ·½Ê½À´´´½¨ÄãµÄÓ¦ÓÃÄØ£¿ÎÒ¾­³£Ìýµ½µÄÒ»ÖÖÕùÂÛ¾ÍÊÇËûÃǵ£ÐÄSEO£¨Search Engine Optimization£©¡£µ«ÊÇÈç¹ûÄã¶Ô´Ë×öÁËÕýÈ·µÄ´¦Àí£¬Õ⽫²»ÊÇÒ»¸öÎÊÌ⣺Äã¿ÉÒÔÓжàÖÖ½â¾ö·½Ê½£¬´ÓʹÓÃÎÞ½çÃæµÄä¯ÀÀÆ÷£¨headless browser£©£¬±ÈÈçPhantomJS£¬ÔÚ¼ì²âµ½ÍøÂçÅÀ³æµÄʱºòäÖȾHTML£¬µ½Ê¹ÓÃһЩÏÖÓпò¼ÜÖ´ÐзþÎñÆ÷¶ËäÖȾ¡£

»ùÓÚBackbones.js£¬MarionetteºÍTwitter BootstrapµÄ¿Í»§¶ËMV*ģʽ

¹ØÓÚʹÓÃMV*¿ò¼Ü¿ª·¢µ¥Ò³ÃæÓ¦ÓÃÒѾ­ÓÐÌ«¶àµÄÌÖÂÛÁË¡£¾¡¹ÜºÜÄÑÑ¡Ôñ£¬µ«ÊÇÎÒÏë˵ÅÅÃûǰÈýµÄÊÇBackbone.js, EmberºÍAngularJS¡£

ÕâÈý¸ö¶¼ÊǷdz£±»ÍƳçµÄ£¬µ«ÄĸöÊÇ×îÊʺÏÄãµÄ£¿

²»ÐÒµÄÊÇ£¬ÎÒ±ØÐëµÃ³ÐÈÏÎÒÔÚAngularJSÉϵľ­ÑéÓÐÏÞ£¬ËùÒÔÎҾͰÑËü·ÅÔÚÌÖÂÛ·¶Î§Ö®Íâ¡£ÄÇô£¬EmberºÍBackbone.js´ú±íÁ˽â¾öͬһÎÊÌâµÄÁ½ÖÖ²»Í¬·½Ê½¡£

Backbone.jsºÜС£¬µ«ÊÇÇ¡µ½ºÃ´¦µÄÌṩÁË´´½¨Ò»¸ö¼òµ¥µÄµ¥Ò³ÃæÓ¦ÓÃËùÐèÒªµÄ¹¦ÄÜ¡£ÁíÒ»·½Ã棬EmberÊÇÒ»¸ö´´½¨µ¥Ò³ÃæÓ¦ÓõÄÍêÕûÇÒרҵµÄ¿ò¼Ü¡£ËüÓиü¶àµÄ¸¨Öú¹¤¾ß£¬µ«ÊÇÒ²Óиü¼Ó¶¸Ç͵ÄѧϰÇúÏß¡££¨Äã¿ÉÒÔÔĶÁ¸ü¶à¹ØÓÚEmber.jsµÄÄÚÈÝ¡££©

»ùÓÚÄãµÄÓ¦ÓõĴóС£¬¿ÉÒÔ¼òµ¥µØÍ¨¹ý±È½Ï¡°ÐèÒªµÄ¹¦ÄÜ¡±Õ¼¡°¿ÉÓõŦÄÜ¡±µÄ±ÈÀýÀ´×ö³ö¾ö¶¨£¬Ëü»á¸øÄãºÜ´óµÄÌáʾ¡£

ÑùʽÉè¼ÆÒ²Í¬ÑùÊÇÒ»¸öÌôÕ½£¬µ«ÊÇÔٴΣ¬ÎÒÃÇÒ²¿ÉÒÔÁоٳöһЩ¿ÉÒÔÖúÎÒÃÇÒ»±ÛÖ®Á¦µÄ¿ò¼Ü¡£¶ÔÓÚCSS£¬Twitter BootstrapÊÇÒ»¸ö·Ç³£ºÃµÄÑ¡Ôñ£¬ËüÌṩÁËÒ»Ì×ÍêÕûµÄÑùʽ£¬ËüÃÇ¿ÉÒÔÁ¢¼´Ê¹Óã¬Ò²·Ç³£±ãÓÚ×Ô¶¨Òå¡£

BootstrapÊÇʹÓÃLESSÓïÑÔ´´½¨µÄ£¬ËüÊÇ¿ªÔ´µÄ£¬ÎÒÃÇ¿ÉÒÔ¸ù¾ÝÎÒÃǵÄÐèÒªÀ´ÐÞ¸ÄËü¡£°éËæËüµÄ»¹ÓÐÒ»´ó¶ÑÓû§ÓѺõÄ×é¼þ£¬ËüÃÇÒ²Óзdz£ÍêÉÆµÄÎĵµ¡£´ËÍ⣬һ¸ö¶¨ÖÆ»¯Ä£Ê½ÈÃÄãºÜ·½±ãµØ´´½¨Äã×Ô¼ºµÄ¡£ºÁÎÞÒÉÎÊ£¬ËüÕýÊÇÕâ¸ö¹¤×÷ËùÐèÒªµÄÕýÈ·µÄ¹¤¾ß¡£

×î¼Ñʵ¼ù£ºGrunt£¬Mocha£¬Chai£¬RequireJS ºÍ CoverJS

×îºó£¬ÎÒÃǽ«¶¨ÒåһЩ×î¼Ñʵ¼ù£¬Í¬Ê±Ì¸Ì¸¸ÃÈçºÎʵÏÖºÍά»¤ËüÃÇ¡£¾ßÓдú±íÐԵģ¬ÎҵĽâ¾ö·½°¸£¬×îÖÕ¾Û½¹µ½¼¸¸ö¹¤¾ßÉÏ£¬ËûÃDZ¾Éí¶¼ÊÇ»ùÓÚNode.js¡£

MOCHA ºÍ CHAI

ÕâЩ¹¤¾ßÄܰïÖúÄãʹÓòâÊÔÇý¶¯¿ª·¢Ä£Ê½£¨test-driven development£©»òÕßÐÐΪÇý¶¯¿ª·¢Ä£Ê½£¨behavior-driven development£©À´¸Ä½øÄãµÄ¿ª·¢Á÷³Ì£¬´´½¨Ò»Ð©»ù´¡¼Ü¹¹À´¹ÜÀíÄãµÄµ¥Ôª²âÊÔ£¬²¢ÇÒ×Ô¶¯ÔËÐÐÕâЩ²âÊÔ¡£

ÏÖÔÚÓдóÁ¿µÄJavaScriptµ¥Ôª²âÊÔ¿ò¼Ü£¬ÎªÊ²Ã´ÒªÓÃMocha£¿¼ò¶ÌµÄ»Ø´ð¾ÍÊÇËü¼´Áé»îÓÖÍêÉÆ¡£ÎÒÀ´½âÊÍһϣº

Óû§½çÃæ£¨Interfaces£©

Ò²ÐíÄãϰ¹ßÓÚ²âÊÔÇý¶¯µÄ³ÌÐò×éºÍµ¥Ôª²âÊԵĸÅÄÓÖ»òÐíÇãÏòÓÚÐÐΪÇý¶¯²âÊÔµÄʹÓÃdescribleºÍshouldÀ´¶¨ÒåÐÐΪ¶¨ÒåµÄÀíÄî¡£MochaÈÃÄã¿ÉÒÔͬʱʹÓÃÕâÁ½ÖÖ·½Ê½¡£

±¨±íÉú³ÉÆ÷£¨reporter£©

ÔËÐÐÄãµÄ²âÊÔ´úÂë»áÉú³É²âÊÔ½á¹ûµÄ±¨±í£¬Äã¿ÉÒÔʹÓø÷ʽ¸÷ÑùµÄreporterÀ´¸ñʽ»¯ÕâЩ½á¹û¡£¾ÙÀýÀ´Ëµ£¬Èç¹ûÄãÐèÒªÌṩһ¸ö³ÖÐø¼¯³É·þÎñÆ÷ÐÅÏ¢£¬Äã¿ÉÒÔÕÒµ½Ò»¸öreportÀ´×öÕâЩ¡£

ûÓÐÖ¸¶¨¶ÏÑԿ⣨Lack of an assertion library£©

Õ⼸ºõ²»ÊÇÒ»¸öÎÊÌ⣬Mocha¾ö¶¨ÈÃÄãÑ¡Ôñ×Ô¼ºÒªÊ¹ÓõĶÏÑԿ⣬´Ó¶ø¸øÄã¸ü¶àµÄÁé»îÐÔ¡£ÄãÓкܶàµÄÑ¡Ôñ£¬ÕâÕýÊÇChaiʩչÉíÊֵĵط½¡£
Chai ÊÇÒ»¸ö·Ç³£Áé»îµÄ¶ÏÑԿ⣬Ëü¿ÉÒÔÈÃÄãʹÓÃÈçÏÂÈýÖÐÖ÷Òª¶ÏÑÔ·½Ê½µÄÈκÎÒ»ÖÖ£º

assert

ÕâÊÇÀ´×ÔÀÏÅɲâÊÔÇý¶¯¿ª·¢µÄ¾­µäµÄassert·½Ê½¡£±ÈÈ磺

assert.equal(variable, "value");

expect

ÕâÖÖÁ´Ê½µÄ¶ÏÑÔ·ç¸ñÔÚÐÐΪÇý¶¯¿ª·¢ÖÐ×îΪ³£¼û¡£±ÈÈ磺

expect(variable).to.equal("value");

should

ÕâÒ²ÊÇÓÃÔÚ²âÊÔÇý¶¯¿ª·¢ÖУ¬µ«ÊÇÎÒ¸üÍÆ¼öexpect£¬ÒòΪshould¾­³£ÌýÆðÀ´±È½Ï·´¸´£¨±ÈÈ磬¶¨ÒåÒ»¸öÐÐΪ¹æ·¶£¬¡±it (should do something¡­)¡±£©¡£¾ÙÀý£º

variable.should.equal("value");

ChaiºÍMocha¿ÉÒÔÎ޷켯³É¡£Ê¹ÓÃÕâÁ½¸ö³ÌÐò¿â£¬Äã¿ÉÒÔʹÓòâÊÔÇý¶¯£¬ÐÐΪÇý¶¯»îÈκÎÏëµÃµ½µÄ·½Ê½À´Ð´ÄãµÄ²âÊÔ´úÂë¡£

GRUNT

GruntÊÇÄãÄܹ»×Ô¶¯»¯ÄãµÄbuildÈÎÎñ£¬°üº¬¼òµ¥µÄ¸´ÖÆÕ³ÌùºÍÎļþÆ´½Ó£¬Ä£°åÔ¤±àÒ룬styleÓïÑÔ£¨SASSºÍLESS£©±àÒ룬µ¥Ôª²âÊÔ£¨Ê¹ÓÃMocha£©£¬´úÂë¼ì²é£¬ÒÔ¼°´úÂë×îС»¯£¨±ÈÈ磬ʹÓÃUglifyJS»òÕßClosure Compiler£©¡£Äã¿ÉÒÔÌí¼ÓÄã×Ô¼ºµÄ×Ô¶¯»¯ÈÎÎñµ½GruntÖлòÕßËÑË÷registry£¬ÄÇÀïÊý°Ù¸ö²å¼þ¿É¹©Ê¹Óã¨ÔÙ´ÎÌáÐÑ£¬Ñ¡ÔñʹÓÃÓÐÁ¼ºÃµÄÉçÇøÖ§³ÖµÄ¹¤¾ß£©¡£GruntÒ²¿ÉÒÔ¼à¿ØÄãµÄÎļþ£¬µ±·¢Éú¸ü¸Äʱ´¥·¢Ò»Ð©²Ù×÷¡£

REQUIREJS

RequireJS ÌýÆðÀ´ÊÇ»ùÓÚAMD APIµÄÁíÒ»ÖÖ¼ÓÔØÄ£¿éµÄ·½Ê½£¬µ«ÊÇÎÒ¸Ò±£Ö¤µØ¸æËßÄ㣬ËüÔ¶Ô¶²»Ö¹Õâ¸ö¹¦ÄÜ¡£Ê¹ÓÃRequireJS£¬Äã¿ÉÒÔ¶¨ÒåÄãµÄÄ£¿éÖ®¼äµÄÒÀÀµºÍ²ã´Î½á¹¹£¬ÈÃRequireJS¿â°ïÄãÀ´¼ÓÔØËûÃÇ¡£Ëü»¹ÌṩÁËÒ»Öַdz£¼ò±ãµÄ·½Ê½À´±ÜÃâÈ«¾Ö±äÁ¿ÎÛȾ£¬Í¨¹ýÔÚº¯ÊýÌåÖж¨ÒåÄãµÄÄ£¿é¡£ÕâÈÃÄ£¿é¿ÉÒÔÖØÓ㬲»ÏñÃüÃû¿Õ¼äÄ£¿é£¨namespaced modules£©¡£ÊÔÏëһϣºÈç¹û¶¨ÒåÁËÒ»¸öÀàËÆÓÚDemoapp.helloWorlModuleµÄÄ£¿é£¬ÄãÏë°ÑËû¸Ä³ÉFirstapp.helloWorldModule£¬ÄÇôÄãÐèÒª°ÑËùÓÐÒýÓõ½DemoappÃüÃû¿Õ¼äµÄµØ·½¶¼×öÐ޸쬲ÅÄÜÈÃËü±äµÃ¿ÉÒÆÖ²¡£

RequireJS»¹ÄÜÈÃÄãÓµ±§ÒÀÀµ×¢Èëģʽ¡£¼ÙÉèÄãÓÐÒ»¸öÄ£¿éÐèÒªÓõ½Ö÷Ó¦ÓöÔÏ󣨵¥Àý£©µÄÒ»¸öʵÀý¡£Í¨¹ýʹÓÃRequireJS£¬ÄãÒâʶµ½Äã²»ÐèҪʹÓÃÈ«¾Ö±äÁ¿À´´æ´¢Ëü£¬ÄãÒ²²»ÄÜʹÓÃÒ»¸öʵÀý×÷ΪRequireJSµÄÒÀÀµ¡£ËùÒÔ£¬ÄãÐèÒªÔÚÄãµÄÄ£¿é¹¹ÔìÆ÷ÖмÓÔØÕâ¸öÒÀÀµ¡£ÈÃÎÒÃÇ¿´Ò»¸öÀý×Ó£º

ÔÚmain.js:

define(
["App","module"],
function(App, Module){
var app = new App();

var module = new Module({
app: app
})

return app;
}
);

ÔÚmodule.js

define([],
function(){
var module = function(options){
this.app = options.app;
};
module.prototype.useApp = function(){
this.app.performAction();
};
return module
}
);

×¢Ò⣬ÎÒÃDz»ÄÜÔÚmoduleµÄ¶¨ÒåÖмÓÈë¶Ômain.jsµÄÒÀÀµ£¬·ñÔòÎÒÃǻᴴ½¨³öÒ»¸öÑ­»·ÒýÓá£

COVERJS

´úÂ븲¸ÇÂÊ£¨Code coverage£©ÊÇÄã²âÊÔµÄÒ»¸ö¶ÈÁ¿±ê×¼¡£ÕýÈçËüµÄÃû×ÖËùʾ£¬ËüÄܸæËßÄ㵱ǰµÄ²âÊÔ¼¯¸²¸ÇÁËÄã´úÂëµÄ¶àÉÙ²¿·Ö¡£CoverJSͨ¹ý¼ì²âÄã´úÂëÖеÄÓï¾ä£¨¶ø²»ÊÇÏñJSCoverageÄÇÑù¿´´úÂëÐУ©²¢Éú³ÉÒ»¸ö¼ì²â¹ýµÄ°æ±¾µÄ´úÂëÀ´²âÁ¿ÄãµÄ²âÊÔ´úÂëµÄ¸²¸ÇÂÊ¡£ËüÒ²¿ÉÒÔÖ§³Ö¶Ô³ÖÐø¼¯³É·þÎñÆ÷Ìṩ³ÖÐø±¨±íÉú³É¡£

×ܽá

ȫջʽJavaScript²¢²»Äܽâ¾öËùÓеÄÎÊÌâ¡£µ«ÊÇËüµÄÉçÇøºÍ¼¼Êõ»á´øÁìÄã×ߺܳ¤Ò»¶Î·¡£Ê¹ÓÃJavaScript£¬Äã¿ÉÒÔ´´½¨»ùÓÚͳһµÄÓïÑԵĿÉÀ©Õ¹µÄ£¬¿Éά»¤µÄÓ¦Ó᣺ÁÎÞÒÉÎÊ£¬ÕâÊǾø¶ÔÖµµÃÎÒÃǹØ×¢µÄ¡£

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



Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹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Ó¦Óÿª·¢