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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
HHVM ÊÇÈçºÎÌáÉý PHP ÐÔÄܵģ¿
 
×÷Õߣºnwind À´Ô´£ºÎâ¶àÒæ ·¢²¼ÓÚ 2015-03-16
  3461  次浏览      27
 

±³¾°

HHVM ÊÇ Facebook ¿ª·¢µÄ¸ßÐÔÄÜ PHP ÐéÄâ»ú£¬Ðû³Æ±È¹Ù·½µÄ¿ì9±¶£¬ÎÒºÜºÃÆæ£¬ÓÚÊdzé¿Õ¼òµ¥Á˽âÁËһϣ¬²¢ÕûÀí³öÕâÆªÎÄÕ£¬Ï£ÍûÄܻشðÇå³þÁ½·½ÃæµÄÎÊÌ⣺

1.HHVM µ½µ×¿¿Æ×ô£¿ÊÇ·ñ¿ÉÒÔÓõ½²úÆ·ÖУ¿

2.ËüΪʲô±È¹Ù·½µÄ PHP ¿ìºÜ¶à£¿µ½µ×ÊÇÈçºÎÓÅ»¯µÄ£¿

Äã»áÔõô×ö£¿

ÔÚÌÖÂÛ HHVM ʵÏÖÔ­Àíǰ£¬ÎÒÃÇÏÈÉèÉí´¦µØÏëÏ룺¼ÙÉèÄãÓиö PHP дµÄÍøÕ¾Óöµ½ÁËÐÔÄÜÎÊÌ⣬¾­·ÖÎöºó·¢ÏֺܴóÒ»²¿·Ö×ÊÔ´¾ÍºÄÔÚ PHP ÉÏ£¬ÕâʱÄã»áÔõôÓÅ»¯ PHP ÐÔÄÜ£¿

±ÈÈç¿ÉÒÔÓÐÒÔϼ¸ÖÖ·½Ê½£º

·½°¸1£¬Ç¨ÒƵ½ÐÔÄܸüºÃµÄÓïÑÔÉÏ£¬Èç Java¡¢C++¡¢Go¡£

·½°¸2£¬Í¨¹ý RPC ½«¹¦ÄÜ·ÖÀë³öÀ´ÓÃÆäËüÓïÑÔʵÏÖ£¬Èà PHP ×ö¸üÉÙµÄÊÂÇ飬±ÈÈç Twitter ¾Í½«´óÁ¿ÒµÎñÂß¼­·Åµ½ÁË Scala ÖУ¬Ç°¶ËµÄ Rails Ö»¸ºÔðÕ¹ÏÖ¡£

·½°¸3£¬Ð´ PHP À©Õ¹£¬ÔÚÐÔÄÜÆ¿¾±µØ·½»» C/C++¡£

·½°¸4£¬ÓÅ»¯ PHP µÄÐÔÄÜ¡£

·½°¸1¼¸ºõ²»¿ÉÐУ¬Ê®Äêǰ Joel ¾ÍÄà Netscape µÄÀý×Ó¾¯¸æ¹ý£¬Ä㽫·ÅÆúÊǶàÄêµÄ¾­Ñé»ýÀÛ£¬ÓÈÆäÊÇÏñ Facebook ÕâÖÖÒµÎñÂß¼­¸´ÔӵIJúÆ·£¬PHP ´úÂëʵÔÚÌ«¶àÁË£¬¾Ý³ÆÓÐ2ǧÍòÐУ¨ÒýÓÃ×Ô [PHP on the Metal with HHVM]£©£¬ÐÞ¸ÄÆðÀ´µÄ³É±¾¿ÖűÈд¸öÐéÄâ»ú»¹´ó£¬¶øÇÒ¶ÔÓÚÒ»¸öÉÏǧÈ˵ÄÍŶӣ¬´ÓÍ·¿ªÊ¼Ñ§Ï°Ò²ÊDz»¿É½ÓÊܵġ£

·½°¸2ÊÇ×î±£Ïյķ½°¸£¬¿ÉÒÔÖð²½Ç¨ÒÆ£¬ÊÂʵÉÏ Facebook Ò²ÔÚ³¯Õâ·½ÃæÅ¬Á¦ÁË£¬¶øÇÒ»¹¿ª·¢ÁË Thrift ÕâÑùµÄ RPC ½â¾ö·½°¸£¬Facebook ÄÚ²¿Ö÷ҪʹÓõÄÁíÒ»¸öÓïÑÔÊÇ C++£¬´ÓÔçÆÚµÄ Thrift ´úÂë¾ÍÄÜ¿´³öÀ´£¬ÒòΪÆäËüÓïÑÔµÄʵÏÖ¶¼ºÜ¼òª£¬Ã»·¨ÔÚÉú²ú»·¾³ÏÂʹÓá£

ĿǰÔÚ Facebook ÖÐ¾Ý³Æ PHP:C++ ÒѾ­´Ó 9:1 Ôö¼Óµ½ 7:3 ÁË£¬¼ÓÉÏÓÐ Andrei Alexandrescu µÄ´æÔÚ£¬C++ ÔÚ Facebook ÖÐÔ½À´Ô½Á÷ÐУ¬µ«ÕâÖ»Äܽâ¾ö²¿·ÖÎÊÌ⣬±Ï¾¹ C++ ¿ª·¢³É±¾±È PHP ¸ßµÃ¶à£¬²»ÊʺÏÓÃÔÚ¾­³£Ð޸ĵĵط½£¬¶øÇÒÌ«¶à RPC µÄµ÷ÓÃÒ²»áÑÏÖØÓ°ÏìÐÔÄÜ¡£

·½°¸3¿´ÆðÀ´ÃÀºÃ£¬Êµ¼ÊÖ´ÐÐÆðÀ´È´ºÜÄÑ£¬Ò»°ãÀ´ËµÐÔÄÜÆ¿¾±²¢²»»áºÜÏÔÖø£¬´ó¶àÊDz»¶ÏÀۼӵĽá¹û£¬¼ÓÉÏ PHP À©Õ¹¿ª·¢³É±¾¸ß£¬ÕâÖÖ·½°¸Ò»°ãÖ»ÓÃÔÚ¹«¹²Çұ仯²»´óµÄ»ù´¡¿âÉÏ£¬ËùÒÔÕâÖÖ·½°¸½â¾ö²»Á˶àÉÙÎÊÌâ¡£

¿ÉÒÔ¿´µ½£¬Ç°Ãæ3¸ö·½°¸²¢²»Äܺܺõؽâ¾öÎÊÌ⣬ËùÒÔ Facebook ÆäʵûÓÐÑ¡ÔñµÄÓàµØ£¬Ö»ÄÜÈ¥¿¼ÂÇ PHP ±¾ÉíµÄÓÅ»¯ÁË¡£

¸ü¿ìµÄ PHP

¼ÈȻҪÓÅ»¯ PHP£¬ÄÇÈçºÎÈ¥ÓÅ»¯ÄØ£¿ÔÚÎÒ¿´À´¿ÉÒÔÓÐÒÔϼ¸ÖÖ·½·¨£º

·½°¸1£¬PHP ÓïÑÔ²ãÃæµÄÓÅ»¯¡£

·½°¸2£¬ÓÅ»¯ PHP µÄ¹Ù·½ÊµÏÖ£¨Ò²¾ÍÊÇ Zend£©¡£

·½°¸3£¬½« PHP ±àÒë³ÉÆäËüÓïÑ﵀ bytecode£¨×Ö½ÚÂ룩£¬½èÖúÆäËüÓïÑÔµÄÐéÄâ»ú£¨Èç JVM£©À´ÔËÐС£

·½°¸4£¬½« PHP ת³É C/C++£¬È»ºó±àÒë³É±¾µØ´úÂë¡£

·½°¸5£¬¿ª·¢¸ü¿ìµÄ PHP ÐéÄâ»ú¡£

PHP ÓïÑÔ²ãÃæµÄÓÅ»¯ÊÇ×î¼òµ¥¿ÉÐеģ¬Facebook µ±È»Ïëµ½ÁË£¬¶øÇÒ»¹¿ª·¢ÁË XHProf ÕâÑùµÄÐÔÄÜ·ÖÎö¹¤¾ß£¬¶ÔÓÚ¶¨Î»ÐÔÄÜÆ¿¾±ÊǺÜÓаïÖúµÄ¡£

²»¹ý XHProf »¹ÊÇûÄܺܺýâ¾ö Facebook µÄÎÊÌ⣬ËùÒÔÎÒÃǼÌÐø¿´£¬½ÓÏÂÀ´ÊÇ·½°¸2£¬¼òµ¥À´¿´£¬Zend µÄÖ´Ðйý³Ì¿ÉÒÔ·ÖΪÁ½²¿·Ö£º½« PHP ±àÒëΪ opcode¡¢Ö´ÐÐ opcode£¬ËùÒÔÓÅ»¯ Zend ¿ÉÒÔ´ÓÕâÁ½·½ÃæÀ´¿¼ÂÇ¡£

ÓÅ»¯ opcode ÊÇÒ»ÖÖ³£¼ûµÄ×ö·¨£¬¿ÉÒÔ±ÜÃâÖØ¸´½âÎö PHP£¬¶øÇÒ»¹ÄÜ×öһЩ¾²Ì¬µÄ±àÒëÓÅ»¯£¬±ÈÈç Zend Optimizer Plus£¬µ«ÓÉÓÚ PHP ÓïÑԵĶ¯Ì¬ÐÔ£¬ÕâÖÖÓÅ»¯·½·¨ÊÇÓоÖÏÞÐԵģ¬ÀÖ¹Û¹À¼ÆÒ²Ö»ÄÜÌáÉý20%µÄÐÔÄÜ¡£ÁíÒ»ÖÖ¿¼ÂÇÊÇÓÅ»¯ opcode ¼Ü¹¹±¾Éí£¬Èç»ùÓڼĴæÆ÷µÄ·½Ê½£¬µ«ÕâÖÖ×ö·¨ÐÞ¸ÄÆðÀ´¹¤×÷Á¿Ì«´ó£¬ÐÔÄÜÌáÉýÒ²²»»áÌØ±ðÃ÷ÏÔ£¨¿ÉÄÜ30%£¿£©£¬ËùÒÔͶÈë²ú³ö±È²»¸ß¡£

ÁíÒ»¸ö·½·¨ÊÇÓÅ»¯ opcode µÄÖ´ÐУ¬Ê×Ïȼòµ¥ÌáһϠZend ÊÇÈçºÎÖ´Ðеģ¬Zend µÄ interpreter£¨Ò²½Ð½âÊÍÆ÷£©ÔÚ¶Áµ½ opcode ºó£¬»á¸ù¾Ý²»Í¬µÄ opcode µ÷Óò»Í¬º¯Êý£¨ÆäʵÓÐЩÊÇ switch£¬²»¹ýΪÁËÃèÊö·½±ãÎÒ¼ò»¯ÁË£©£¬È»ºóÔÚÕâ¸öº¯ÊýÖÐÖ´Ðи÷ÖÖÓïÑÔÏà¹ØµÄ²Ù×÷£¨¸ÐÐËȤµÄ»°¿É¿´¿´ÉîÈëÀí½â PHP ÄÚºËÕâ±¾Ê飩£¬ËùÒÔ Zend Öв¢Ã»ÓÐʲô¸´ÔÓ·â×°ºÍ¼ä½Óµ÷Óã¬×÷Ϊһ¸ö½âÊÍÆ÷À´ËµÒѾ­×öµÃºÜºÃÁË¡£

ÏëÒªÌáÉý Zend µÄÖ´ÐÐÐÔÄÜ£¬¾ÍÐèÒª¶Ô³ÌÐòµÄµ×²ãÖ´ÐÐÓÐËù½â£¬±ÈÈ纯Êýµ÷ÓÃÆäʵÊÇÓпªÏúµÄ£¬ËùÒÔÄÜͨ¹ý Inline threading À´ÓÅ»¯µô£¬ËüµÄÔ­Àí¾ÍÏñ C ÓïÑÔÖÐµÄ inline ¹Ø¼ü×ÖÄÇÑù£¬µ«ËüÊÇÔÚÔËÐÐʱ½«Ïà¹ØµÄº¯ÊýÕ¹¿ª£¬È»ºóÒÀ´ÎÖ´ÐУ¨Ö»ÊÇ´ò¸ö±È·½£¬Êµ¼ÊʵÏÖ²»Ì«Ò»Ñù£©£¬Í¬Ê±»¹±ÜÃâÁË CPU Á÷Ë®ÏßÔ¤²âʧ°Üµ¼ÖµÄÀË·Ñ¡£

ÁíÍ⻹¿ÉÒÔÏñ JavaScriptCore ºÍ LuaJIT ÄÇÑùʹÓûã±àÀ´ÊµÏÖ interpreter£¬¾ßÌåϸ½Ú½¨Òé¿´¿´ Mike µÄ½âÊÍ

µ«ÕâÁ½ÖÖ×ö·¨Ð޸Ĵú¼ÛÌ«´ó£¬ÉõÖÁ±ÈÖØÐ´Ò»¸ö»¹ÄÑ£¬ÓÈÆäÊÇÒª±£Ö¤ÏòϼæÈÝ£¬ºóÃæÌáµ½ PHP µÄÌØµãʱÄã¾ÍÖªµÀÁË¡£

¿ª·¢Ò»¸ö¸ßÐÔÄܵÄÐéÄâ»ú²»ÊǼþ¼òµ¥µÄÊÂÇ飬JVM »¨ÁË10¶àÄê²Å´ïµ½ÏÖÔÚµÄÐÔÄÜ£¬ÄÇÊÇ·ñÄÜÖ±½ÓÀûÓÃÕâЩ¸ßÐÔÄܵÄÐéÄâ»úÀ´ÓÅ»¯ PHP µÄÐÔÄÜÄØ£¿Õâ¾ÍÊÇ·½°¸3µÄ˼·¡£

ÆäʵÕâÖÖ·½°¸Ôç¾ÍÓÐÈ˳¢ÊÔ¹ýÁË£¬±ÈÈç Quercus ºÍ IBM µÄ P8£¬Quercus ¼¸ºõû¼ûÓÐÈËʹÓ㬶ø P8 Ò²ÒѾ­ËÀµôÁË¡£Facebook Ò²Ôø¾­µ÷ÑйýÕâÖÖ·½Ê½£¬ÉõÖÁ»¹³öÏÖ¹ý²»¿¿Æ×µÄ´«ÎÅ £¬µ«Æäʵ Facebook ÔÚ2011Äê¾Í·ÅÆúÁË¡£

ÒòΪ·½°¸3¿´ÆðÀ´ÃÀºÃ£¬µ«Êµ¼ÊЧ¹ûÈ´²»ÀíÏ룬°´Õպܶà´óÅ£µÄ˵·¨£¨±ÈÈç Mike£©£¬VM ×ÜÊÇΪij¸öÓïÑÔÓÅ»¯µÄ£¬ÆäËüÓïÑÔÔÚÉÏÃæÊµÏÖ»áÓöµ½ºÜ¶àÆ¿¾±£¬±ÈÈ綯̬µÄ·½·¨µ÷Ó㬹ØÓÚÕâµãÔÚ Dart µÄÎĵµÖÐÓйý½éÉÜ£¬¶øÇÒ¾Ý˵ Quercus µÄÐÔÄÜÓë Zend+APC ±È²î²»ÁËÌ«¶à£¨[À´×ÔThe HipHop Compiler for PHP]£©£¬ËùÒÔû̫´óÒâÒå¡£

²»¹ý OpenJDK Õ⼸ÄêÒ²ÔÚŬÁ¦£¬×î½üµÄ Grall ÏîÄ¿¿´ÆðÀ´»¹²»´í£¬Ò²ÓÐÓïÑÔÔÚÉÏÃæÈ¡µÃÁËÏÔÖøµÄЧ¹û£¬µ«ÎÒ»¹Ã»¿ÕÑо¿ Grall£¬ËùÒÔÕâÀïÎÞ·¨Åжϡ£

½ÓÏÂÀ´ÊÇ·½°¸4£¬ËüÕýÊÇ HPHPc£¨HHVM µÄǰÉí£©µÄ×ö·¨£¬Ô­ÀíÊǽ« PHP ´úÂëת³É C++£¬È»ºó±àÒëΪ±¾µØÎļþ£¬¿ÉÒÔÈÏΪÊÇÒ»ÖÖ AOT£¨ahead of time£©µÄ·½Ê½£¬¹ØÓÚÆäÖдúÂëת»»µÄ¼¼Êõϸ½Ú¿ÉÒԲο¼ The HipHop Compiler for PHP ÕâÆªÂÛÎÄ£¬ÒÔÏÂÊǸÃÂÛÎÄÖеÄÒ»¸ö½ØÍ¼£¬¿ÉÒÔͨ¹ýËüÀ´´ó¸ÅÁ˽⣺

ÕâÖÖ×ö·¨µÄ×î´óÓŵãÊÇʵÏÖ¼òµ¥£¨Ïà¶ÔÓÚÒ»¸ö VM À´Ëµ£©£¬¶øÇÒÄÜ×öºÜ¶à±àÒëÓÅ»¯£¨ÒòΪÊÇÀëÏߵģ¬ÂýµãҲûÊ£©£¬±ÈÈçÉÏÃæµÄÀý×Ӿͽ«- 1ÓÅ»¯µôÁË£¬µ«ËüºÜÄÑÖ§³Ö PHP Öеĺܶද̬µÄ·½·¨£¬Èç eval()¡¢create_function()£¬ÒòΪÕâ¾ÍµÃÔÙÄÚǶһ¸ö interpreter£¬³É±¾²»Ð¡£¬ËùÒÔ HPHPc ¸É´à¾ÍÖ±½Ó²»Ö§³ÖÕâЩÓï·¨¡£

³ýÁË HPHPc£¬»¹ÓÐÁ½¸öÀàËÆµÄÏîÄ¿£¬Ò»¸öÊÇ Roadsend£¬ÁíÒ»¸öÊÇ phc £¬phc µÄ×ö·¨Êǽ« PHP ת³ÉÁË C ÔÙ±àÒ룬ÒÔÏÂÊÇËü½« file_get_contents($f) ת³É C ´úÂëµÄÀý×Ó£º

¡¶ÕâÀïÓеãÒªÌØ±ð˵Ã÷µÄµØ·½¡·

»°Ëµ phc ×÷ÕßÔø¾­ÔÚ²©¿ÍÉÏ¿ÞËߣ¬ËµËûÁ½Äêǰ¾ÍÈ¥ Facebook ÑÝʾ¹ý phc ÁË£¬»¹ºÍÄÇÀïµÄ¹¤³Ìʦ½»Á÷¹ý£¬½á¹ûÈ˼ÒÒ»·¢²¼¾Í»ðÁË£¬¶ø×Ô¼ºÃ¦»îÁË4ÄêȴĬĬÎÞÎÅ£¬ÏÖÔÚǰ;Ãìã¡£¡£¡£

Roadsend Ò²ÒѾ­²»Î¬»¤ÁË£¬¶ÔÓÚ PHP ÕâÑùµÄ¶¯Ì¬ÓïÑÔÀ´Ëµ£¬ÕâÖÖ×ö·¨ÓкܶàµÄ¾ÖÏÞÐÔ£¬ÓÉÓÚÎÞ·¨¶¯Ì¬ include£¬Facebook ½«ËùÓÐÎļþ¶¼±àÒëµ½ÁËÒ»Æð£¬ÉÏÏßʱµÄÎļþ²¿Êð¾ÓÈ»´ïµ½ÁË 1G£¬Ô½À´Ô½²»¿É½ÓÊÜÁË¡£

ÁíÍâÓл¹ÓÐÒ»¸ö½Ð PHP QB µÄÏîÄ¿£¬ÓÉÓÚʱ¼ä¹ØÏµÎÒûÓп´£¬¸Ð¾õ¿ÉÄÜÊÇÀàËÆµÄ¶«¶«¡£

ËùÒÔ¾ÍֻʣÏÂÒ»Ìõ·ÁË£¬ÄǾÍÊÇдһ¸ö¸ü¿ìµÄ PHP ÐéÄâ»ú£¬½«Ò»ÌõºÚ·×ßµ½µ×£¬»òÐíÄãºÍÎÒÒ»Ñù£¬Ò»¿ªÊ¼Ìýµ½ Facebook Òª×öÒ»¸öÐéÄâ»úÊǾõµÃÌ«ÀëÆ×£¬µ«Èç¹û×Ðϸ·ÖÎö¾Í»á·¢ÏÖÆäʵҲֻÓÐÕâÑùÁË¡£

¸ü¿ìµÄÐéÄâ»ú

HHVM Ϊʲô¸ü¿ì£¿ÔÚ¸÷ÖÖÐÂÎű¨µÀÖж¼Ìáµ½ÁË JIT Õâ¸ö¹Ø¼ü¼¼Êõ£¬µ«ÆäʵԶûÓÐÄÇô¼òµ¥£¬JIT ²»ÊÇʲôÉñÆæµÄħ·¨°ô£¬ÓÃËüÇáÇáÒ»»Ó¾ÍÄÜÌáÉýÐÔÄÜ£¬¶øÇÒ JIT Õâ¸ö²Ù×÷±¾ÉíÒ²ÊÇ»áºÄʱµÄ£¬¶ÔÓÚ¼òµ¥µÄ³ÌÐòû׼»¹±È interpreter Âý£¬×¶ËµÄÀý×ÓÊÇ LuaJIT 2 µÄ Interpreter ¾ÍÉÔ΢±È V8 µÄ JIT ¿ì£¬ËùÒÔ²¢²»´æÔÚ¾ø¶ÔµÄÊÂÇ飬¸ü¶à»¹ÊÇÔÚϸ½ÚÎÊÌâµÄ´¦ÀíÉÏ£¬HHVM µÄ·¢Õ¹ÀúÊ·¾ÍÊDz»¶ÏÓÅ»¯µÄÀúÊ·£¬Äã¿ÉÒÔ´ÓÏÂͼ¿´µ½ËüÊÇÈçºÎÒ»µãµã³¬¹ý HPHPc µÄ£º

ÖµµÃÒ»ÌáµÄÊÇÔÚ Android 4.4 ÖÐеÄÐéÄâ»ú ART ¾Í²ÉÓõÄÊÇ AOT ·½°¸£¨»¹¼ÇµÃô£¿Ç°ÃæÌáµ½µÄ HPHPc ¾ÍÊÇÕâÖÖ£©£¬½á¹û±È֮ǰʹÓà JIT µÄ Dalvik ¿ìÁËÒ»±¶£¬ËùÒÔ˵ JIT Ò²²»Ò»¶¨±È AOT ¿ì¡£

Òò´ËÕâ¸öÏîÄ¿ÊÇÓкܴó·çÏյģ¬Èç¹ûûÓÐÇ¿´óµÄÄÚÐĺÍÒãÁ¦£¬¼«ÓпÉÄܰë;¶ø·Ï£¬Google ¾ÍÔø¾­ÏëÓà JIT ÌáÉý Python µÄÐÔÄÜ£¬µ«×îÖÕʧ°ÜÁË£¬¶ÔÓÚ Google À´ËµÓõ½ Python µÄµØ·½Æäʵ²¢Ã»Ê²Ã´ÐÔÄÜÎÊÌ⣨ºÃ°É£¬ÒÔǰ Google ÊÇÓà Python д¹ý crawl [²Î¿¼ In The Plex]£¬µ«ÄǶ¼ÊÇ1996ÄêµÄÊÂÇéÁË£©¡£

±ÈÆð Google£¬Facebook ÏÔÈ»Óиü´óµÄ¶¯Á¦ºÍ¾öÐÄ£¬PHP ÊÇ Facebook ×îÖØÒªµÄÓïÑÔ£¬ÎÒÃÇÀ´¿´¿´ Facebook ¶¼Í¶ÈëÁËÄÄЩ´óÅ£µ½Õâ¸öÏîÄ¿ÖУ¨²»È«£©£º

Andrei Alexandrescu£¬¡ºModern C++ Design¡»ºÍ¡ºC++ Coding Standards¡»µÄ×÷Õߣ¬C++ ÁìÓòÎÞ¿ÉÕùÒéµÄ´óÉñ

Keith Adams£¬¸ºÔð¹ý VMware ºËÐļܹ¹£¬µ±Äê VMware ¾ÍÅÉËûÒ»ÈËÈ¥ºÍ Intel ½øÐм¼ÊõºÏ×÷£¬×ãÒÔÖ¤Ã÷ÔÚ VMM ÁìÓòËûÓжàÁ˽âÁË

Drew Paroski£¬ÔÚ΢Èí²ÎÓë¹ý .NET ÐéÄâ»ú¿ª·¢£¬¸Ä½øÁËÆäÖÐµÄ JIT

Jason Evans£¬¿ª·¢ÁË jemalloc£¬¼õÉÙÁË Firefox Ò»°ëµÄÄÚ´æÏûºÄ

Sara Golemon£¬¡ºExtending and Embedding PHP¡»µÄ×÷Õߣ¬PHP ÄÚºËר¼Ò£¬Õâ±¾Êé¹À¼ÆËùÓÐ PHP ¸ßÊÖ¶¼¿´¹ý°É£¬»òÐíÄã²»ÖªµÀÆäʵËýÊÇÅ®µÄ

ËäȻûÓÐÏñ Lars Bak¡¢Mike Pall ÕâÑùÔÚÐéÄâ»úÁìÓòµÄ¶¥¼¶×¨¼Ò£¬µ«Èç¹ûÕâЩ´óÅ£ÄÜÆëÐÄЭÁ¦£¬Ð´¸öÐéÄâ»ú»¹ÊÇÎÊÌâ²»´óµÄ£¬ÄÇôËûÃǽ«ÃæÁÙʲôÑùµÄÌôսĨ£¿½ÓÏÂÀ´ÎÒÃÇÒ»Ò»ÌÖÂÛ¡£

¹æ·¶ÊÇʲô£¿

×Ô¼ºÐ´ PHP ÐéÄâ»úÒªÃæÁٵĵÚÒ»¸öÎÊÌâ¾ÍÊÇ PHP ûÓÐÓïÑԹ淶£¬ºÜ¶à°æ±¾¼äµÄÓï·¨»¹»á²»¼æÈÝ£¨ÉõÖÁÊÇС°æ±¾ºÅ£¬±ÈÈç 5.2.1 ºÍ 5.2.3£©£¬PHP ÓïÑԹ淶¾¿¾¹ÈçºÎ¶¨ÒåÄØ£¿À´¿´Ò»ÆªÀ´×Ô IEEE µÄ˵·¨£º

The PHP group claim that they have the ?nal say in the speci?cation of (the language) PHP. This groups speci?cation is an implementation, and there is no prose speci?cation or agreed validation suite.

ËùÒÔΨһµÄ;¾¶¾ÍÊÇÀÏÀÏʵʵȥ¿´ Zend µÄʵÏÖ£¬ºÃÔÚ HPHPc ÖÐÒѾ­Í´¿à¹ýÒ»´ÎÁË£¬ËùÒÔ HHVM ÄÜÖ±½ÓÀûÓÃÏֳɣ¬Òò´ËÕâ¸öÎÊÌâ²¢²»ËãÌ«´ó¡£

ÓïÑÔ»¹ÊÇÀ©Õ¹£¿

ʵÏÖ PHP ÓïÑÔ²»½ö½öÖ»ÊÇʵÏÖÒ»¸öÐéÄâ»úÄÇô¼òµ¥£¬PHP ÓïÑÔ±¾Éí»¹°üÀ¨Á˸÷ÖÖÀ©Õ¹£¬ÕâЩÀ©Õ¹ºÍÓïÑÔÊÇÒ»ÌåµÄ£¬Zend ²»´ÇÐÁÀ͵ØÊµÏÖÁ˸÷ÖÖÄã¿ÉÄÜ»áÓõ½µÄ¹¦ÄÜ¡£Èç¹û·ÖÎö¹ý PHP µÄ´úÂ룬¾Í»á·¢ÏÖËüµÄ C ´úÂë³ýÈ¥¿ÕÐÐ×¢Êͺó¾ÓÈ»»¹ÓÐ80+ÍòÐУ¬¶øÄã²ÂÆäÖÐ Zend ÒýÇæ²¿·ÖÓжàÉÙ£¿Ö»Óв»µ½10ÍòÐС£

¶ÔÓÚ¿ª·¢ÕßÀ´ËµÕâ²»ÊÇʲô»µÊ£¬µ«¶ÔÓÚÒýÇæÊµÏÖÕßÀ´Ëµ¾ÍºÜ±¯¾çÁË£¬ÎÒÃÇ¿ÉÒÔÄà Java À´½øÐжԱȣ¬Ð´¸ö Java µÄÐéÄâ»úÖ»ÐèʵÏÖ×Ö½ÚÂë½âÊͼ°Ò»Ð©»ù´¡µÄ JNI µ÷Óã¬Java ¾ø´ó²¿·ÖÄÚÖÿⶼÊÇÓà Java ʵÏֵģ¬ËùÒÔÈç¹û²»¿¼ÂÇÐÔÄÜÓÅ»¯£¬µ¥´Ó¹¤×÷Á¿¿´£¬ÊµÏÖ PHP ÐéÄâ»ú±È JVM ÒªÄѵö࣬±ÈÈç¾ÍÓÐÈËÓÃ8ǧÐÐµÄ TypeScript ʵÏÖÁËÒ»¸ö JVM Doppio¡£

¶ø¶ÔÓÚÕâ¸öÎÊÌ⣬HHVM µÄ½â¾ö°ì·¨ºÜ¼òµ¥£¬ÄǾÍÊÇֻʵÏÖ Facebook ÖÐÓõ½µÄ£¬¶øÇÒͬÑù¿ÉÒÔÏÈÓà HPHPc ÖÐ֮ǰд¹ýµÄ£¬ËùÒÔÎÊÌâÒ²²»´ó¡£

ʵÏÖ Interpreter

½ÓÏÂÀ´ÊÇ Interpreter µÄʵÏÖ£¬ÔÚ½âÎöÍê PHP ºó»áÉú³É HHVM ×Ô¼ºÉè¼ÆµÄÒ»ÖÖ Bytecode£¬´æ´¢ÔÚ ~/.hhvm.hhbc£¨SQLite Îļþ£© ÖÐÒÔ±ãÖØÓã¬ÔÚÖ´ÐÐ Bytecode ʱºÍ Zend ÀàËÆ£¬Ò²Êǽ«²»Í¬µÄ×Ö½ÚÂë·Åµ½²»Í¬µÄº¯ÊýÖÐȥʵÏÖ£¨ÕâÖÖ·½Ê½ÔÚÐéÄâ»úÖÐÓиöרÃŵijƺô£ºSubroutine threading£©

Interpreter µÄÖ÷ÌåʵÏÖÔÚ bytecode.cpp ÖУ¬±ÈÈç VMExecutionContext::iopAdd ÕâÑùµÄ·½·¨£¬×îÖÕÖ´Ðлá¸ù¾Ý²»Í¬ÀàÐÍÀ´Çø·Ö£¬±ÈÈç add ²Ù×÷µÄʵÏÖÊÇÔÚ tv-arith.cpp ÖУ¬ÏÂÃæÕª³­ÆäÖеÄһС¶Î

if (c2.m_type == KindOfInt64)  return o(c1.m_data.num, c2.m_data.num);
if (c2.m_type == KindOfDouble) return o(c1.m_data.num, c2.m_data.dbl);

ÕýÊÇÒòΪÓÐÁË Interpreter£¬HHVM ÔÚ¶ÔÓÚ PHP Óï·¨µÄÖ§³ÖÉÏ±È HPHPc ÓÐÃ÷ÏԸĽø£¬ÀíÂÛÉÏ×öµ½ÍêÈ«¼æÈݹٷ½ PHP£¬µ«½öÕâô×öÔÚÐÔÄܲ¢²»»á±È Zend ºÃ¶àÉÙ£¬ÓÉÓÚÎÞ·¨È·¶¨±äÁ¿ÀàÐÍ£¬ËùÒÔÐèÒª¼ÓÉÏÀàËÆÉÏÃæµÄÌõ¼þÅжÏÓï¾ä£¬µ«ÕâÑùµÄ´úÂë²»ÀûÓÚÏÖ´ú CPU µÄÖ´ÐÐÓÅ»¯£¬ÁíÒ»¸öÎÊÌâÊÇÊý¾Ý¶¼ÊÇ boxed µÄ£¬Ã¿´Î¶ÁÈ¡¶¼ÐèҪͨ¹ýÀàËÆ m_data.num ºÍ m_data.dbl µÄ·½·¨À´¼ä½Ó»ñÈ¡¡£

¶ÔÓÚÕâÑùµÄÎÊÌ⣬¾ÍµÃ¿¿ JIT À´ÓÅ»¯ÁË¡£

ʵÏÖ JIT ¼°ÓÅ»¯

Ê×ÏÈÖµµÃÒ»ÌáµÄÊÇ PHP µÄ JIT ֮ǰ²¢·ÇûÈ˳¢ÊÔ¹ý£º

2008 Äê¾ÍÓÐÈËÓà LLVM ʵÑé¹ý£¬½á¹û»¹±ÈÔ­À´ÂýÁË 21 ±¶¡£¡£¡£

2010 Äê IBM ÈÕ±¾Ñо¿Ôº»ùÓÚËûÃÇµÄ JVM ÐéÄâ»ú´úÂ뿪·¢ÁË P9£¬ÐÔÄÜÊǹٷ½ PHP µÄ 2.5 µ½ 9.5 ±¶£¬¿ÉÒÔ¿´ËûÃǵÄÂÛÎÄ Evaluation of a just-in-time compiler retrofitted for PHP¡£

2011 Äê Andrei Homescu »ùÓÚ RPython ¿ª·¢¹ý£¬»¹Ð´ÁËÆªÂÛÎÄ HappyJIT: a tracing JIT compiler for PHP£¬µ«²âÊÔ½á¹ûÓкÃÓлµ£¬²¢²»ÀíÏë¡£

ÄÇô¾¿¾¹Ê²Ã´ÊÇ JIT£¿ÈçºÎʵÏÖÒ»¸ö JIT£¿

ÔÚ¶¯Ì¬ÓïÑÔÖлù±¾É϶¼»áÓиö eval ·½·¨£¬¿ÉÒÔ´«¸øËüÒ»¶Î×Ö·û´®À´Ö´ÐУ¬JIT ×öµÄ¾ÍÊÇÀàËÆµÄÊÂÇ飬ֻ²»¹ýËüҪƴ½Ó²»ÊÇ×Ö·û´®£¬¶øÊDz»Í¬Æ½Ì¨ÏµĻúÆ÷Â룬Ȼºó½øÐÐÖ´ÐУ¬µ«ÈçºÎÓà C À´ÊµÏÖÄØ£¿¿ÉÒԲο¼ Eli дµÄÕâ¸öÈëÃÅÀý×Ó£¬ÒÔÏÂÊÇÎÄÖеÄÒ»¶Î´úÂ룺

unsigned char code[] = {
0x48, 0x89, 0xf8, // mov %rdi, %rax
0x48, 0x83, 0xc0, 0x04, // add $4, %rax
0xc3 // ret
};
memcpy(m, code, sizeof(code));

È»¶øÊÖ¹¤±àд»úÆ÷ÂëºÜÈÝÒ׳ö´í£¬ËùÒÔ×îºÃµÄÓÐÒ»¸ö¸¨ÖúµÄ¿â£¬±ÈÈçµÄ Mozilla µÄ Nanojit ÒÔ¼° LuaJIT µÄ DynASM£¬µ« HHVM ²¢Ã»ÓÐʹÓÃÕâЩ£¬¶øÊÇ×Ô¼ºÊµÏÖÁËÒ»¸öÖ»Ö§³Ö x64 µÄ£¨ÁíÍ⻹ÔÚ³¢ÊÔÓà VIXL À´Éú³É ARM 64 λµÄ£©£¬Í¨¹ý mprotect µÄ·½Ê½À´ÈôúÂë¿ÉÖ´ÐС£

µ«ÎªÊ²Ã´ JIT ´úÂë»á¸ü¿ì£¿Äã¿ÉÒÔÏëÏëÆäʵÓà C++ ±àдµÄ´úÂë×îÖÕ±àÒë³öÀ´Ò²ÊÇ»úÆ÷Â룬Èç¹ûÖ»Êǽ«Í¬ÑùµÄ´úÂëÊÖ¶¯×ª³ÉÁË»úÆ÷Â룬ÄÇºÍ GCC Éú³É³öÀ´µÄÓÐÊ²Ã´Çø±ðÄØ£¿ËäÈ»Ç°ÃæÎÒÃÇÌáµ½ÁËһЩÕë¶Ô CPU ʵÏÖÔ­ÀíÀ´ÓÅ»¯µÄ¼¼ÇÉ£¬µ«ÔÚ JIT ÖиüÖØÒªµÄÓÅ»¯ÊǸù¾ÝÀàÐÍÀ´Éú³ÉÌØ¶¨µÄÖ¸Á´Ó¶ø´ó·ù¼õÉÙÖ¸ÁîÊýºÍÌõ¼þÅжϣ¬ÏÂÃæÕâÕÅÀ´×Ô TraceMonkey µÄͼ¶Ô´Ë½øÐÐÁ˺ÜÖ±¹ÛµÄ¶Ô±È£¬ºóÃæÎÒÃǽ«¿´µ½ HHVM ÖеľßÌåÀý×Ó£º

HHVM Ê×ÏÈͨ¹ý interpeter À´Ö´ÐУ¬ÄÇËü»áÔÚʱºòʹÓà JIT ÄØ£¿³£¼ûµÄ JIT ´¥·¢Ìõ¼þÓÐ 2 ÖÖ£º

trace£º¼Ç¼ѭ»·Ö´ÐдÎÊý£¬Èç¹û³¬¹ýÒ»¶¨ÊýÁ¿¾Í¶ÔÕâ¶Î´úÂë½øÐÐ JIT

method£º¼Ç¼º¯ÊýÖ´ÐдÎÊý£¬Èç¹û³¬¹ýÒ»¶¨ÊýÁ¿¾Í¶ÔÕû¸öº¯Êý½øÐÐ JIT£¬ÉõÖÁÖ±½Ó inline

¹ØÓÚÕâÁ½ÖÖ·½·¨ÄÄÖÖ¸üºÃÔÚ Lambada ÉÏÓиöÌû×ÓÒýÀ´Á˸÷·´óÉñµÄÌÖÂÛ£¬ÓÈÆäÊÇ Mike Pall£¨LuaJIT ×÷Õߣ© ¡¢Andreas Gal£¨Mozilla VP£© ºÍ Brendan Eich£¨Mozilla CTO£©¶¼·¢±íÁ˺ܶà×Ô¼ºµÄ¹Ûµã£¬ÍƼö´ó¼ÒΧ¹Û£¬ÎÒÕâÀï¾Í²»Ï׳óÁË¡£

ËüÃÇÖ®¼äµÄÇø±ð²»½ö½öÊDZàÒ뷶Χ£¬»¹Óкܶàϸ½ÚÎÊÌ⣬±ÈÈç¶Ô¾Ö²¿±äÁ¿µÄ´¦Àí£¬ÔÚÕâÀï¾Í²»Õ¹¿ªÁË

µ« HHVM ²¢Ã»ÓвÉÓÃÕâÁ½ÖÖ·½Ê½£¬¶øÊÇ×Ô´´ÁËÒ»¸ö½Ð tracelet µÄ×ö·¨£¬ËüÊǸù¾ÝÀàÐÍÀ´»®·ÖµÄ£¬¿´ÏÂÃæÕâÕÅͼ

¿ÉÒÔ¿´µ½Ëü½«Ò»¸öº¯Êý»®·ÖΪÁË 3 ²¿·Ö£¬ÉÏÃæ 2 ²¿·ÖÊÇÓÃÓÚ´¦Àí $k ΪÕûÊý»ò×Ö·û´®Á½ÖÖ²»Í¬Çé¿öµÄ£¬ÏÂÃæµÄ²¿·ÖÊÇ·µ»ØÖµ£¬ËùÒÔ¿´ÆðÀ´ËüÖ÷ÒªÊǸù¾ÝÀàÐ͵ı仯Çé¿öÀ´»®·Ö JIT ÇøÓòµÄ£¬¾ßÌåÊÇÈçºÎ·ÖÎöºÍ²ð½â Tracelet µÄϸ½Ú¿ÉÒԲ鿴 Translator.cpp ÖÐµÄ Translator::analyze ·½·¨£¬ÎÒ»¹Ã»¿Õ¿´£¬ÕâÀï¾Í²»ÌÖÂÛÁË¡£

µ±È»£¬ÒªÊµÏÖ¸ßÐÔÄÜµÄ JIT »¹Ðè½øÐи÷ÖÖ³¢ÊÔºÍÓÅ»¯£¬±ÈÈç×î³õ HHVM ÐÂÔöµÄ tracelet »á·Åµ½Ç°Ã棬Ҳ¾ÍÊǽ«ÉÏͼµÄ A ºÍ C µ÷»»Î»Ö㬺óÀ´³¢ÊÔÁËһϷŵ½ºóÃæ£¬½á¹ûÐÔÄÜÌáʾÁË 14%£¬ÒòΪ²âÊÔ·¢ÏÖÕâÑù¸üÈÝÒ×ÌáǰÃüÖÐÏìÓ¦µÄÀàÐÍ

JIT µÄÖ´Ðйý³ÌÊÇÊ×ÏȽ« HHBC ת³É SSA (hhbc-translator.cpp)£¬È»ºó¶Ô SSA ÉÏ×öÓÅ»¯£¨±ÈÈç Copy propagation£©£¬ÔÙÉú³É±¾µØ»úÆ÷Â룬±ÈÈçÔÚ X64 ÏÂÊÇÓÉ translator-x64.cpp ʵÏֵġ£

ÎÒÃÇÓÃÒ»¸ö¼òµ¥µÄÀý×ÓÀ´¿´¿´ HHVM ×îÖÕÉú³ÉµÄ»úÆ÷ÂëÊÇÔõÑùµÄ£¬±ÈÈçÏÂÃæÕâ¸ö PHP º¯Êý£º

<?php
function a($b){
echo $b + 2;
}

±àÒëºóÊÇÕâ¸öÑù×Ó£º

mov rcx,0x7200000
mov rdi,rbp
mov rsi,rbx
mov rdx,0x20
call 0x2651dfb 
<HPHP::Transl::traceCallback(HPHP::ActRec*, HPHP::TypedValue*, long, void*)>
cmp BYTE PTR [rbp-0x8],0xa
jne 0xae00306
; Ç°ÃæÊǼì²é²ÎÊýÊÇ·ñÓÐЧ

mov rcx,QWORD PTR [rbp-0x10]           ; ÕâÀォ %rcx ±»¸³ÖµÎª1ÁË
mov edi,0x2                            ; ½« %edi£¨Ò²¾ÍÊÇ %rdi µÄµÍ32룩¸³ÖµÎª2
add rdi,rcx                            ; ¼ÓÉÏ %rcx
call 0x2131f1b <HPHP::print_int(long)> ; µ÷Óà print_int º¯Êý£¬ÕâʱµÚÒ»¸ö²ÎÊý %rdi µÄÖµÒѾ­ÊÇ3ÁË

; ºóÃæÔݲ»ÌÖÂÛ
mov BYTE PTR [rbp+0x28],0x8
lea rbx,[rbp+0x20]
test BYTE PTR [r12],0xff
jne 0xae0032a
push QWORD PTR [rbp+0x8]
mov rbp,QWORD PTR [rbp+0x0]
mov rdi,rbp
mov rsi,rbx
mov rdx,QWORD PTR [rsp]
call 0x236b70e <HPHP::JIT::traceRet(HPHP::ActRec*, HPHP::TypedValue*, void*)>
ret 

¶ø HPHP::print_int º¯ÊýµÄʵÏÖÊÇÕâÑùµÄ£º

void print_int(int64_t i) {
char buf[256];
snprintf(buf, 256, "%" PRId64, i);
echo(buf);
TRACE(1, "t-x64 output(int): %" PRId64 "\n", i);
}

¿ÉÒÔ¿´µ½ HHVM ±àÒë³öÀ´µÄ´úÂëÖ±½ÓʹÓÃÁË int64_t£¬±ÜÃâÁË interpreter ÖÐÐèÒªÅжϲÎÊýºÍ¼ä½ÓÈ¡Êý¾ÝµÄÎÊÌ⣬´Ó¶øÃ÷ÏÔÌáÉýÁËÐÔÄÜ£¬×îÖÕÉõÖÁ×öµ½ÁËºÍ C ±àÒë³öÀ´µÄ´úÂëÇø±ð²»´ó¡£

ÐèҪעÒ⣺HHVM ÔÚ server mode Ï£¬Ö»Óг¬¹ý12¸öÇëÇó¾Í²Å»á´¥·¢ JIT£¬Æô¶¯¹ý HHVM ʱ¿ÉÒÔͨ¹ý¼ÓÉÏÈçϲÎÊýÀ´ÈÃËüÊ×´ÎÇëÇó¾ÍʹÓà JIT£º

-v Eval.JitWarmupRequests=0

ËùÒÔÔÚ²âÊÔÐÔÄÜʱÐèҪעÒ⣬ÔËÐÐÒ»Á½´Î¾ÍÄÃÀ´¶Ô±ÈÊÇ¿´²»³öЧ¹ûµÄ¡£

ÀàÐÍÍÆµ¼ºÜÂé·³£¬»¹ÊÇ±ÆÆÈ³ÌÐòԱдÇå³þ°É

JIT µÄ¹Ø¼üÊDz²âÀàÐÍ£¬Òò´Ëij¸ö±äÁ¿µÄÀàÐÍÒªÊÇÀϱä¾ÍºÜÄÑÓÅ»¯£¬ÓÚÊÇ HHVM µÄ¹¤³Ìʦ¿ªÊ¼¿¼ÂÇÔÚ PHP Óï·¨ÉÏ×öÊֽţ¬¼ÓÉÏÀàÐ͵ÄÖ§³Ö£¬ÍƳöÁËÒ»¸öÐÂÓïÑÔ - Hack£¨Í²ÛÒ»ÏÂÕâÃû×ÖÕæ²»ÀûÓÚ SEO£©£¬ËüµÄÑù×ÓÈçÏ£º

<?hh
class Point2 {
public float $x, $y;
function __construct(float $x, float $y) {
$this->x = $x;
$this->y = $y;
}
}

×¢Òâµ½ float ¹Ø¼ü×ÖÁËô£¿ÓÐÁ˾²Ì¬ÀàÐÍ¿ÉÒÔÈà HHVM ¸üºÃµØÓÅ»¯ÐÔÄÜ£¬µ«ÕâÒ²Òâζ×ÅºÍ PHP Óï·¨²»¼æÈÝ£¬Ö»ÄÜʹÓà HHVM¡£

ÆäʵÎÒ¸öÈËÈÏΪÕâÑù×ö×î´óµÄÓŵãÊÇÈôúÂë¸ü¼ÓÒ×¶®£¬¼õÉÙÎÞÒâµÄ·¸´í£¬¾ÍÏñ Dart ÖеĿÉÑ¡ÀàÐÍÒ²ÊÇÕâ¸ö³õÖÔ£¬Í¬Ê±»¹·½±ãÁË IDE ʶ±ð£¬¾Ý˵ Facebook »¹ÔÚ¿ª·¢Ò»¸ö»ùÓÚ Web µÄ IDE£¬ÄÜЭͬ±à¼­´úÂ룬¿ÉÒÔÆÚ´ýһϡ£

Äã»áʹÓà HHVM ô£¿

×ܵÄÀ´Ëµ£¬±ÈÆð֮ǰµÄ HPHPc£¬ÎÒÈÏΪ HHVM ÊÇÖµµÃÒ»ÊԵģ¬ËüÊÇÕæÕýµÄÐéÄâ»ú£¬Äܹ»¸üºÃµØÖ§³Ö¸÷ÖÖ PHP µÄÓï·¨£¬ËùÒԸ͝³É±¾²»»á¸ü¸ß£¬¶øÇÒÒòΪÄÜÎÞ·ìÇл»µ½¹Ù·½ PHP °æ±¾£¬ËùÒÔ¿ÉÒÔͬʱÆô¶¯ FPM À´ËæÊ±´ýÃü£¬HHVM »¹ÓÐ FastCGI ½Ó¿Ú·½±ãµ÷Óã¬Ö»Òª×öºÃÓ¦¼±±¸°¸£¬·çÏÕÊǿɿص쬴ӳ¤Ô¶À´¿´ÊǺÜÓÐÏ£ÍûµÄ¡£

ÐÔÄܾ¿¾¹ÄÜÌáÉý¶àÉÙÎÒÎÞ·¨È·¶¨£¬ÐèÒªÄÃ×Ô¼ºµÄÒµÎñ´úÂëÀ´½øÐÐÕæÊµ²âÊÔ£¬ÕâÑù²ÅÄÜÕæÕýÇå³þ HHVM ÄÜ´øÀ´¶àÉÙÊÕÒæ£¬ÓÈÆäÊǶÔÕûÌåÐÔÄÜÌáÉýµ½µ×ÓжàÉÙ£¬Ö»ÓÐÄõ½Õâ¸öÊý¾Ý²ÅÄÜ×ö¾ö²ß¡£

×îºóÕûÀíһϿÉÄÜ»áÓöµ½µÄÎÊÌ⣬Óмƻ®Ê¹ÓõĿÉÒԲο¼£º

1.À©Õ¹ÎÊÌ⣺Èç¹ûÓõ½ÁË PHP À©Õ¹£¬¿Ï¶¨ÊÇÒªÖØÐ´µÄ£¬²»¹ý HHVM À©Õ¹Ð´ÆðÀ´±È Zend Òª¼òµ¥µÄ¶à£¬¾ßÌåϸ½Ú¿ÉÒÔ¿´ wiki ÉϵÄÀý×Ó¡£

2.HHVM Server µÄÎȶ¨ÐÔÎÊÌ⣺ÕâÖÖ¶àÏ̵߳ļܹ¹ÔËÐÐÒ»¶Îʱ¼ä¿ÉÄÜ»á³öÏÖÄÚ´æÐ¹Â¶ÎÊÌ⣬»òÕßij¸öûдºÃµÄ PHP Ö±½Óµ¼ÖÂÕû¸ö½ø³Ì¹Òµô£¬ËùÒÔÐèҪעÒâÕâ·½ÃæµÄ²âÊÔºÍÈÝÔÖ´ëÊ©¡£

3.ÎÊÌâÐÞ¸´À§ÄÑ£ºHHVM ÔÚ³öÏÖÎÊÌâʱ½«±È Zend ÄÑÐÞ¸´£¬ÓÈÆäÊÇ JIT µÄ´úÂ룬ֻÄÜÆÚÍûËü±È½ÏÎȶ¨ÁË¡£

P.S. ÆäʵÎÒÖ»Á˽â»ù±¾µÄÐéÄâ»ú֪ʶ£¬Ò²Ã»Ð´¹ý¼¸ÐÐ PHP ´úÂ룬ºÜ¶à¶«Î÷¶¼ÊÇдÕâÆªÎÄÕÂʱÁÙʱȥÕÒ×ÊÁϵģ¬ÓÉÓÚʱ¼ä²Ö´ÙˮƽÓÐÏÞ£¬±ØÈ»»áÓв»ÕýÈ·µÄµØ·½£¬»¶Ó­´ó¼ÒÆÀÂÛ´Í½Ì :)

2014Äê1Ô²¹³ä£ºÄ¿Ç° HHVM Ôڱɳ§µÄÍÆ¹ãÊÆÍ·ºÜ²»´í£¬ÍƼö´ó¼ÒÔÚ2014Äê³¢ÊÔһϣ¬ÓÈÆäÊÇÏÖÔÚ¼æÈÝÐÔ²âÊÔÒѾ­´ïµ½98.58%ÁË£¬Ð޸ijɱ¾½øÒ»²½¼õС¡£

   
3461 ´Îä¯ÀÀ       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Ó¦Óÿª·¢