
ãã£ãïŒ æ°çŸã®ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒãPHP7ã«ç¿»èš³ãããŠããããšãŠãããæãã§ãã ç§ãã¡ã®ç¥ãéããããã¯ãã®èŠæš¡ã®PHP7ãããžã§ã¯ããžã®2çªç®ã®ç§»è¡ã§ãïŒEtsyã®åŸïŒã ãã®éçšã§ãPHP7ãã€ãã³ãŒããã£ãã·ã¥ã·ã¹ãã ã«ããã€ãã®éåžžã«äžå¿«ãªãã°ãèŠã€ãããŸããããä¿®æ£ãããŸããã ãããŠä»ã也æ¯ïŒ -PHPã³ãã¥ããã£å šäœã«ãšã£ãŠæå ±ã§ããPHP7ã¯ãå®çšŒåç°å¢ã§å®å®ããŠãããã¡ã¢ãªæ¶è²»éãå€§å¹ ã«åæžãããããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããŠããŸãã 以äžã§ã¯ãPHP7ã«åãæ¿ããæ¹æ³ãã©ã®ãããªå°é£ã«ééããããã©ã®ããã«èŠåŽããããã©ã®ãããªçµæãåŸããã詳ãã説æããŸãã ããããç°¡åãªçŽ¹ä»ããå§ããŸãããã
Webãããžã§ã¯ãã®ããã«ããã¯ã¯ããŒã¿ããŒã¹ã§ãããšããæèŠã¯ãæãäžè¬çãªèª€è§£ã®1ã€ã§ãã é©åã«èšèšãããã·ã¹ãã ã¯ãã©ã³ã¹ãåããŠããŸã-å ¥åè² è·ãå¢å ãããšãã·ã¹ãã ã®ãã¹ãŠã®éšåãææãæãããããå€ãè¶ ãããšããã¹ãŠãã¹ããŒããŠã³ãå§ããŸãïŒããŒã¹ã®ãã©ã€ãã ãã§ãªããããã»ããµãšãããã¯ãŒã¯éšåã®äž¡æ¹ã ãã®çŸå®ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã¯ã©ã¹ã¿ãŒã®ããã»ããµãã¯ãŒã¯ã»ãšãã©æãéèŠãªç¹æ§ã§ãã å€ãã®ãããžã§ã¯ãã§ã¯ããã®ã¯ã©ã¹ã¿ãŒã¯æ°çŸãŸãã¯æ°åã®ãµãŒããŒã§æ§æãããŠãããããã¢ããªã±ãŒã·ã§ã³ã¯ã©ã¹ã¿ãŒã®ããã»ããµè² è·ã®ã調æŽãã¯çµæžçã«æ£åœåãããŸãïŒãã®å Žåã¯100äžãã«ïŒã
PHP Webã¢ããªã±ãŒã·ã§ã³ã®ããã»ããµã¯ãé«ã¬ãã«ã®åçèšèªãšåããããå€ãããé£ã¹ãŸããã ããããé·å¹Žã«ããã£ãŠãPHPéçºè ã¯ç¹å¥ãªæ²ãã¿ïŒããã³ä»ã®ã³ãã¥ããã£ããã®æã匷åãªããããŒãªã³ã°ãã®æ©äŒïŒãçµéšããŸãã-ãæ£çŽãªãJITãŸãã¯å°ãªããšãCãC ++ãªã©ã®èšèªã®ã³ã³ãã€ã«ãããããã¹ãã®ãžã§ãã¬ãŒã¿ãŒãPHPã«ãªãããšã ã¡ã€ã³ãããžã§ã¯ãã®ãã¬ãŒã ã¯ãŒã¯å ã§ãã®ãããªãœãªã¥ãŒã·ã§ã³ãæäŸã§ããªãã³ãã¥ããã£ã¯ãäžå¿«ãªåŸåãåŒãèµ·ãããŸããã倧èŠæš¡ãªãã¬ãŒã€ãŒãç¬èªã®ãœãªã¥ãŒã·ã§ã³ãèãåºãããã«ãªããŸããã ãããã£ãŠãFacebookã«ã¯HHVMããVkontakteã«ã¯KPHPããããããããä»ã®ãã¯ã©ãããããããŸããã
幞ããªããšã«ã2015幎ãPHPããæçããããããã®ç¬¬äžæ©ãèžã¿åºãããŸãããPHP7ããªãªãŒã¹ãããŸããã JITã¯PHP7ã«ã¯ç»å ŽããŸããã§ããããããšã³ãžã³ãã®å€æŽã®çµæãé倧è©äŸ¡ããããšã¯ã»ãšãã©ãããŸããïŒçŸåšãå€ãã®ã¿ã¹ã¯ã§ãJITããªããŠãPHP7ã¯HHVMã«å£ããŸããïŒããšãã°ã LiteSpeedããã°ã® ãã³ãããŒã¯ãšPHP7éçºè ã®ãã¬ãŒã³ããŒã·ã§ã³ã®ãã³ãããŒã¯ãåç § ïŒã ãŸããæ°ããPHP7ã¢ãŒããã¯ãã£ã¯ãJITã®è¿œå ãç°¡çŽ åããŸãã
Badooã®ãã©ãããã©ãŒã éçºè ã¯ãéå»æ°å¹Žéãããã®æ ç±ã泚èŠããŠãããHHVMã§ãã€ããããããžã§ã¯ããäœæããŸããããããææã ãšèããããPHP7ãåŸ ã€ããšã«ããŸããã ãããŠæè¿ãPHP7ã§Badooãéå§ããŸããïŒ å°ãªããšããã®èŠæš¡ã®ãããã§ãããã¯å£®å€§ãªãããžã§ã¯ãã§ããã300äžè¡ãè¶ ããPHPã³ãŒããš60,000ã®ãã¹ãããããŸãã PHPã¢ããªã±ãŒã·ã§ã³ããã¹ãããããã®æ°ãããã¬ãŒã ã¯ãŒã¯ïŒGoïŒAOPã«é¡äŒŒãããªãŒãã³ãœãŒã¹ã§æ¢ã«ãªãªãŒã¹ãããŠããŸãïŒãéçºãã100äžãã«ãç¯çŽããŸããã
HHVMã®çµéš
PHP7ã«åãæ¿ããåã«ããã°ããã®éãããã¯ãšã³ããæé©åããä»ã®æ¹æ³ãæ¢ããŸããã ãã¡ãããHHVMã§æåã«ãéã¶ãããšã決ããŸããã
調æ»ã«æ°é±éãè²»ãããåŸãéåžžã«ãŸãšããªçµæãåŸãããŸããããã¬ãŒã ã¯ãŒã¯ã§JITããŠã©ãŒã ã¢ããããåŸãé床ãšCPU䜿çšçã®åäžã¯æ°çŸããŒã»ã³ãã§ããã
ãã ããHHVMã«ã¯äžæå¿«ãªæ¬ ç¹ããããŸããã
- å°é£ã§é ãå±é ã ãããã€ãããšãã¯ãJITãã£ãã·ã¥ã確å®ã«ãŠã©ãŒã ã¢ããããå¿ èŠããããŸãã ãŠã©ãŒã ã¢ããæã«ã¯ããã¹ãŠãéåžžã«äœéã«åäœããããããã·ã³ã«å®åãã©ãã£ãã¯ãããŒãããªãã§ãã ããã 䞊åã¯ãšãªã§ãŠã©ãŒã ã¢ããããããšããå§ãããŸããã èŠããã«ã倧èŠæš¡ã¯ã©ã¹ã¿ãŒã®å ç±ãã§ãŒãºã¯è¿ éãªæäœã§ã¯ãããŸãããããã«ãæ°çŸå°ã®ãã·ã³ã®å€§èŠæš¡ã¯ã©ã¹ã¿ãŒã§éšåçã«ã¬ã€ã¢ãŠãããæ¹æ³ãåŠã¶å¿ èŠããããŸãã ãã®çµæãäºæž¬äžå¯èœãªéçšæéã§ãéèŠãªã¢ãŒããã¯ãã£ãšå±éæé ãåŸãããŸãã ãããŠãã§ããã ãã·ã³ãã«ã§è¿ éãªå±éãå®çŸããããšèããŠããŸããéçºæåã®éèŠãªéšåã¯ã1æ¥ã«2ã€ã®ãªãªãŒã¹ãèšç»ããããããã£ãã¯ã¹ãè¿ éã«ãå±éãããèœåã§ãã
- ãã¹ãã®äžäŸ¿ã ãŠããããã¹ãã§ã¯ãHHVMã§ã¯å©çšã§ããªãrunkitæ¡åŒµãç©æ¥µçã«äœ¿çšããŸããã ããã«ã€ããŠã¯åŸã§è©³ãã説æããŸãããããããªãå Žåã¯ãå€æ°ãã¯ã©ã¹ãã¡ãœãããé¢æ°ã®åäœãã»ãšãã©ã®æ¹æ³ã§ãªã³ã¶ãã©ã€ã§å€æŽã§ããæ¡åŒµæ©èœã§ããããã¯ããå éšããšã®éåžžã«ãããŒãã³ã¢ããªçµ±åã«ãã£ãŠè¡ãããŸãPHP HHVMã³ã¢ã¯ãPHPã³ã¢ãšãªã¢ãŒãã§ã®ã¿é¡äŒŒããŠããããããããã®åããå éšãã¯å®å šã«ç°ãªããŸãã ãããã£ãŠãHHVMã®äžã«ç¬èªã«runkitãå®è£ ããã®ã¯å€§å€ãªäœæ¥ã§ããæ¡åŒµæ©èœã®æ§è³ªã«ãããHHVMãã³ãŒãã§æ£ããåäœããããšã確èªããããã«ãäœäžãã®ãã¹ããæžãçŽãå¿ èŠããããŸãã ããã¯éçŸå®çã§ããããã«æãããŸããã æ£çŽã«èšããšãããã¯ããããã®ãªãã·ã§ã³ã®åé¡ã§ãããPHP7ã«åãæ¿ãããšãã«ã¯ãrunkitãæšãŠããªã©ãäœåºŠãããçŽãå¿ èŠããããŸããã
- äºææ§ã ããã¯äž»ã«ãPHP 5.5ïŒ github.com/facebook/hhvm/blob/master/hphp/doc/inconsistenciesãgithub.com/facebook/hhvm/issues?labels=php5+incompatibility&state=openãåç §ïŒãšã®äžå®å šãªäºææ§ã§ããæ¡åŒµæ©èœã¯æ¢ã«äœæãããŠãããæ°åçš®é¡ãããŸãã äž¡æ¹ã®éäºææ§ã¯ããããžã§ã¯ãã®æ§é äžã®æãããªæ¬ é¥ã«èµ·å ããŠããŸããHHVMã¯ã³ãã¥ããã£ã§ã¯ãªããFacebookå ã®éšéã«ãã£ãŠéçºãããŠããŸãã ãã®ãããªå ŽåãäŒæ¥ã¯ãã³ãã¥ããã£ãæ¢ã«äœæããã倧éã®ã³ãŒããæ¯ãè¿ãããšãªããå éšã®ã«ãŒã«ãæšæºãç°¡åã«å€æŽã§ããŸãã 圌ãããã¹ãŠãããçŽãããªãœãŒã¹ã®åé¡ã解決ããã®ã¯ç°¡åã§ãã ãããã£ãŠãåãéã®ã¿ã¹ã¯ãæ£åžžã«åŠçããã«ã¯ãå®è£ ã®åæ段éãšãããªããµããŒãã®äž¡æ¹ã«å¹æµããèœåãæã€ãªãœãŒã¹ãå¿ èŠã§ãã ããã¯ãªã¹ã¯ãé«ããæœåšçã«é«äŸ¡ã§ã-ãã®ãªã¹ã¯ãåããããããŸããã§ããã
- èŠéãã Facebookã¯åªããããã°ã©ããŒãæ±ãã倧äŒæ¥ã§ãããšããäºå®ã«ãããããããHHVMéçºéšéãPHPã³ãã¥ããã£ããã匷åã«ãªãå¯èœæ§ãããããšã«ã¯å€§ããªçåããããŸããã 䌌ããããªãã®ãPHPå ã«çŸãããšããã«ããã¹ãŠã®èªå®¶è£œãããžã§ã¯ãããã£ãããšãããã確å®ã«æ»ã«å§ãããšæããŸããã
ãããŠãPHP7ãåŸ ã¡å§ããŸããã
ã€ã³ã¿ãŒããªã¿ãŒã®æ°ããããŒãžã§ã³ãžã®ç§»è¡ã¯éèŠãã€å°é£ãªããã»ã¹ã§ããããã移è¡ã®æ確ãªèšç»ãäœæããŠæºåããŸããã 次ã®3ã€ã®æºå段éã§æ§æãããŠããŸããã
- PHPãæ§ç¯ããã³å±éããããã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãå€æŽããäœæããå€ãã®æ¡åŒµæ©èœãé©å¿ãããŸãã
- ã€ã³ãã©ã¹ãã©ã¯ãã£ãšãã¹ãç°å¢ã®å€æŽã
- ã¢ããªã±ãŒã·ã§ã³ã®PHPã³ãŒããå€æŽããŸãã
ãã¹ãŠã®æ®µéã«ã€ããŠè©³ãã説æããŸãã
ã«ãŒãã«ãšæ¡åŒµæ©èœã®ä¿®æ£
ç§ãã¡ã¯ãç¬èªã®ãç©æ¥µçã«ä¿å®ãããå®æããPHPãã©ã³ããæã£ãŠããŸãã å ¬åŒãªãªãŒã¹ã®åã«BadooãPHP7ã«å€æãããããžã§ã¯ããéå§ãããããåãªãªãŒã¹åè£ã®æŽæ°ãåä¿¡ã§ããããã«ããããã«ãããªãŒå ã§PHP7ãå®æçã«ãªããŒã¹ããŠã¹ã ãŒãºã«ãªããŒã¹ããå¿ èŠããããŸããã æ¥åžžæ¥åã§äœ¿çšãããã¹ãŠã®ããããšã«ã¹ã¿ãã€ãºïŒtech.badoo.com/open-source techsiteã®ãããããã»ã¯ã·ã§ã³ãåç §ïŒããããŒãžã§ã³éã§ç§»æ€å¯èœã§ãããæ£ããåäœããå¿ èŠããããŸããã
5.5ããã³7.0ã§ã¯ããã¹ãŠã®äŸåé¢ä¿ãæ¡åŒµæ©èœãPHPããªãŒã®ããŠã³ããŒããšã¢ã»ã³ããªãèªååããŸããã ããã«ããäœæ¥ãç°¡çŽ åãããã ãã§ãªããå°æ¥ã®åªããåºç€ãæäŸãããŸãããããŒãžã§ã³7.1ããªãªãŒã¹ããããšããã¹ãŠã®æºåãæŽããŸãã
æ¡åŒµæ©èœã«ã€ããŠãæ±ããããªããã°ãªããŸããã§ããã çŽ40ã®æ¡åŒµæ©èœããµããŒãããŠããŸããããã®åå以äžãå€éšãªãŒãã³ãœãŒã¹æ¡åŒµæ©èœã§ãããæ¹åãããŠããŸãã
å¯èœãªéãé«éãªç§»è¡ã®ããã«ã2ã€ã®ããã»ã¹ã䞊è¡ããŠå®è¡ããããšã«ããŸããã 1ã€ç®ã¯ãæãéèŠãªæ¡åŒµæ©èœãåå¥ã«æžãæããããšã§ãïŒBlitzãã³ãã¬ãŒããšã³ãžã³ãå ±æã¡ã¢ãªã®APcuããŒã¿ãã£ãã·ã¥ãPinbaã®çµ±èšæ å ±ã®åéãããã³å éšãµãŒãã¹ãæäœããããã®ããã€ãã®ã«ã¹ã¿ã ïŒçµæãšããŠãçŽ20ã®æ¡åŒµæ©èœïŒã
2ã€ç®ã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ã®éèŠã§ã¯ãªãéšåã§äœ¿çšãããŠããæ¡åŒµæ©èœãç©æ¥µçã«åãé€ãããšã§ãã 11ã®æ¡åŒµæ©èœãç°¡åã«åãé€ãããšãã§ããŸããã
ãããŠãã¡ãããç§ãã¡ã¯PHP7ãšã®äºææ§ã®ããã«äœ¿çšããäž»èŠãªãªãŒãã³æ¡åŒµæ©èœããµããŒããã人ã ãšç©æ¥µçã«ã³ãã¥ãã±ãŒã·ã§ã³ãå§ããŸããïŒXdebugãéçºããŠããDerick Rethansã«ç¹ã«æè¬ããŸãïŒã
ããã«ãPHP7ãžã®æ¡åŒµæ©èœã®ç§»æ€ã®æè¡çãªè©³çŽ°ã«ã€ããŠè©³ãã説æããŸãã
ããŒãžã§ã³7ã§ã¯ãPHPéçºè ãå€ãã®å éšAPIãå€æŽãããããæ¡åŒµæ©èœã§å€ãã®ã³ãŒããç·šéããå¿ èŠããããŸããã æãéèŠãªå€æŽã¯æ¬¡ã®ãšããã§ãã
- zval *âzvalã 以åã¯ãæ°ããå€æ°ãäœæãããšãã«zvalæ§é ãåžžã«å²ãåœãŠãããã¹ã¿ãã¯ã®æ§é ã䜿çšãããããã«ãªããŸããã
- char *-> zend_stringã PHP7ã¯PHPã³ã¢ã§ã¢ã°ã¬ãã·ããªæååãã£ãã·ã¥ã䜿çšããŸããããããæ°ããã«ãŒãã«ãæååãšãã®é·ããæ ŒçŽããzend_stringæ§é ã«æ®éçã«åãæ¿ããçç±ã§ãã
- é åAPIã®å€æŽã zend_stringãããŒãšããŠäœ¿çšãããããã«ãªããŸãã;é åã®å®è£ ã§ã¯ãäºéãªã³ã¯ãªã¹ããéåžžã®é åã«çœ®ãæããããå€ãã®å°ããªé åã§ã¯ãªã1ã€ã®ãããã¯ã«å²ãåœãŠãããŸãã
ããã«ãããå°ããªã¡ã¢ãªå²ãåœãŠã®æ°ãå€§å¹ ã«åæžãããã®çµæãPHPã³ã¢ãæ°åããŒã»ã³ãé«éåããããšãã§ããŸããã
ããããã¹ãŠã®å€æŽã«ã¯ãæžãæããå¿ èŠããªããã°ããã¹ãŠã®æ¡åŒµæ©èœãç©æ¥µçã«ç·šéããå¿ èŠãããããšã«æ³šæããŠãã ããã çµã¿èŸŒã¿ã®æ¡åŒµæ©èœã®å Žåãäœæè ã«äŸåã§ããå Žåãéçºã¯ç§ãã¡ã ããç·šéã§ããå€ãã®ç·šéããããŸããïŒå éšAPIã®å€æŽã«ãããã³ãŒãã®äžéšãæžãçŽãããããªããŸããã
æ®å¿µãªãããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã䜿çšããæ°ããæ§é ãå°å ¥ãããšãã³ãŒãã®å®è¡é床ãåäžããŸããããšã³ãžã³èªäœãè€éã«ãªããåé¡ãèŠã€ããããšãã§ããªããªããŸãã ãããã®1ã€ã¯OPcacheã®åé¡ã§ãããããã¯ããã£ãã·ã¥ãã¯ãªã¢ãããšããã£ãã·ã¥ããããã¡ã€ã«ã®ãã€ãã³ãŒããå¥ã®ããã»ã¹ã§äœ¿çšã§ãããšãã«ç Žæ£ãããããã»ã¹ãã¯ã©ãã·ã¥ããåå ãšãªããŸããã å€èŠ³ã¯æ¬¡ã®ããã«ãªããŸãããé¢æ°ãŸãã¯å®æ°ã®ååã®è¡ïŒzend_stringïŒãçªç¶åŽ©ãã代ããã«ãŽãã衚瀺ãããŸãã
ç§ãã¡ã¯ç¬èªã®èšèšã®å€ãã®æ¡åŒµæ©èœã䜿çšããŠããããã®å€ãã¯æååãç©æ¥µçã«äœ¿çšããŠãããããæåã®çãã¯ãããã®æååã®èª€çšã§ããã 圌ãã¯å€ãã®ãã¹ããæžããå€ãã®å®éšãè¡ã£ããããã¹ãŠåœ¹ã«ç«ããªãã£ãã ãã®çµæãPHPã³ã¢ã®ã¡ã€ã³éçºè ã§ããDmitry Stogovã«å©ããæ±ããå¿ èŠããããŸããã
ãŸãããã£ãã·ã¥ãã¯ãªã¢ããããã©ãããå°ããŸããã å®éãããããã®ã±ãŒã¹ã§ããã§ããããšãããããŸããã åé¡ã¯ãŸã ç§ãã¡ã«ããã®ã§ã¯ãªããOPcacheã«ããããšãæããã«ãªããŸããã åé¡ãè¿ éã«åçŸããDmitryã¯æ°æ¥ä»¥å ã«ä¿®æ£ããŸããã PHPããŒãžã§ã³7.0.4ã«å«ãŸããŠãããã®ä¿®æ£ããªããã°ãæ¬çªç°å¢ã§å®å®ããŠäœ¿çšããããšã¯äžå¯èœã§ããïŒ
ãã¹ãã€ã³ãã©ã¹ãã©ã¯ãã£ã®å€æŽ
Badooã§ã®ãã¹ãã¯ç§ãã¡ã®ç¹å¥ãªèªãã§ãã PHPã³ãŒãã1æ¥ã«2åå®çšŒåç°å¢ã«ã¢ããããŒãããã¬ã€ã¢ãŠãããšã«20ã50åã®ã¿ã¹ã¯ãååŸããŸãïŒGitã§æ©èœãã©ã³ãã䜿çšããJIRAãšå¯æ¥ã«çµ±åãããèªåãã«ãããã«ãããŸãïŒã ãã®ãããªã¹ã±ãžã¥ãŒã«ãšãèªåãã¹ããªãã®ã¿ã¹ã¯ã®ããªã¥ãŒã ã䜿çšããŸãã
ä»æ¥ãçŽ50ïŒ ã®ã«ãã¬ããžã§çŽ6äžã®ãŠããããã¹ãããããã¯ã©ãŠãã§å¹³å2ã3åã§åæ ŒããŠããŸãïŒããã«ã€ããŠã¯Habréã§æ¢ã«èª¬æããŸãã ïŒã åäœãã¹ãã«å ããŠãããé«ãã¬ãã«ã®èªåãã¹ã-çµ±åããã³ã·ã¹ãã ãã¹ããWebããŒãžã®ã»ã¬ã³ãã¹ããã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®ã²ãããããã¹ãã䜿çšããŸãã ãã®å€æ§æ§ã«ãããã³ãŒãã®åç¹å®ããŒãžã§ã³ã®å質ã«ã€ããŠè¿ éã«çµè«ä»ããé©åãªæ±ºå®ãäžãããšãã§ããŸãã
ã€ã³ã¿ãŒããªã¿ãŒã®æ°ããããŒãžã§ã³ãžã®åãæ¿ãã¯åºæ¬çãªå€æŽã§ãã å¯èœãªéãå€ãã®åé¡ãçºçããå¯èœæ§ãããããããã¹ãŠã®ãã¹ããæ©èœããããšãäžå¯æ¬ ã§ãã ããããã©ã®ããã«ããããŠãªãè¡ã£ãããæ確ã«ããããã«ãæŽå²ã«çããšã¯ã¹ã«ãŒã·ã§ã³ãåãå ¥ããåœç€Ÿã®ãã¹ãéçºã®é²åã«ã€ããŠè©±ãå¿ èŠããããŸãã
å€ãã®å Žåã補åã®ãã¹ããèããŠãã人ã¯ãå®éšã®ããã»ã¹ïŒããã³å®è£ äžã®äžéšïŒã§ãã³ãŒãã®æºåãæŽã£ãŠããªãããšã«ééããŸãã å®éãéçºè ã¯èªåã®ã³ãŒãããã¹ãå¯èœã§ãªããã°ãªããªãããšãèŠããŠããå¿ èŠããããŸã ã ã¢ãŒããã¯ãã£ã§ã¯ããã¹ããããã³ãŒããå€éšæ¡ä»¶ããåé¢ããããã«ããŠããããã¹ãã§å€éšäŸåé¢ä¿ã®åŒã³åºããšãªããžã§ã¯ãã眮ãæããããšãã§ããŸãã ç§ã¯ãã®èŠä»¶ã人çãè€éã«ããååããå€ãã®ããã°ã©ããŒããã¹ãã§ããããã«ã³ãŒããæžããããªããšèšããªããã°ãªããŸãã-課ããããå¶éã¯ãè¯ãã³ãŒããã®ä»ã®å€ãšã®äžå¹³çãªéäºã«å ¥ããé垞倱ãããŸãã ãããŠãå€ãã®å Žåã䜿çšå¯èœãªã³ãŒãã®éãã«ãŒã«ã«åŸã£ãŠããªããšæ³åããŠãããããå®éšè ã¯ãã¹ããããè¯ãææãŸã§å»¶æããããå°ããªãã®ã§æºè¶³ããããšããã ãã§ããã¹ãã§ã«ããŒã§ãããã®ã®ã¿ãã«ããŒããŸãïŒçµæãšããŠããã¹ãã¯åžžã«æåŸ ãããçµæãäžããŸããïŒã
åœç€ŸãäŸå€ã§ã¯ãããŸããã ãŸãããããžã§ã¯ãã®éå§çŽåŸãããã¹ããå°å ¥ãå§ããŸããã ããªãã®æ°è¡ã®ã³ãŒãããã§ã«æžãããŠããŸãããããã¯å®çšŒåç°å¢ã§ååã«æ©èœããååãªãéããããããŸããã æšå¥šãããããã«ãã¹ãã§ã«ããŒã§ããããã«ããããã«ãã®ã³ãŒãããã¹ãŠæžãæãããšãé·ãããŠé«äŸ¡ã«ãªããŸãã
幞ããªããšã«ããã®æç¹ã§ããã¹ãã§ããªãã³ãŒãã«é¢ããã»ãšãã©ã®åé¡ã解決ã§ããåªããããŒã«ãrunkitããã§ã«ãããŸããã ããã¯PHPã®æ¡åŒµæ©èœã§ãããã¹ã¯ãªããã®å®è¡äžã«ããã°ã©ã ã§äœ¿çšãããã¡ãœãããã¯ã©ã¹ãããã³é¢æ°ãå€æŽãåé€ãè¿œå ã§ããŸãã ãŸã å€ãã®ãã®ããããããããŸããããä»ã®æ¡åŒµæ©èœã¯äœ¿çšããŠããŸããã ãã®ããŒã«ã¯ãHHVMãå«ãFacebookã§çŸåšåããŠããSarah Golemonã«ãã£ãŠãæ°å¹ŽéïŒ2005幎ãã2008幎ãŸã§ïŒéçºããã³ä¿å®ãããŸããã 2008幎ããçŸåšãŸã§ãåãããžã§ã¯ãã¯åèDmitry Zenovichã«ãã£ãŠãµããŒããããŠããŸãïŒåœŒã¯BegunãšMail.Ruã®ãã¹ãéšéã®è²¬ä»»è ãšããŠåããŠããŸããïŒã ãŸãããããžã§ã¯ãã«å°ããè²¢ç®ãããŸããã
Runkitèªäœã¯éåžžã«å±éºãªæ¡åŒµæ©èœã§ãã ããã䜿çšãããšãå®æ°ãé¢æ°ãããã³ã¯ã©ã¹ã䜿çšããã¹ã¯ãªããã®å®è¡äžã«ããããçŽæ¥å€æŽã§ããŸãã å®éãããã¯é£è¡äžã«é£è¡æ©ãåæ§ç¯ã§ããããŒã«ã§ãã Runkitã¯ãã®å Žã§PHPã®å éšãã¯ããŒã«ããŸãã runkitã®1ã€ã®ééããŸãã¯æ¬ é¥-é£è¡æ©ã空äžã§çŸããççºããããPHPãã¯ã©ãã·ã¥ããããã¡ã¢ãªãªãŒã¯ããã®ä»ã®äœã¬ãã«ã®ãããã°ãæ¢ãã®ã«äœæéãè²»ããããããŸãã ããã§ããããã¯ç§ãã¡ã«ãšã£ãŠå¿ èŠãªããŒã«ã§ãããã³ãŒãããªã³ã¶ãã©ã€ã§å€æŽããå¿ èŠãªã³ãŒãã«çœ®ãæããã ãã§ãæ·±å»ãªæžãæããªãã§ãããžã§ã¯ãã«ãã¹ããå®è£ ããããšããã§ããŸããã
PHP7ã«åãæ¿ãããšãrunkitã¯å€§ããªåé¡ã§ããããšãå€æããŸããããã®ããŒãžã§ã³ã®PHPã¯ãµããŒããããŠããŸããã§ããã æ°ããããŒãžã§ã³ã®éçºãåŸæŽãããªãã·ã§ã³ããããŸãããããã®ãã¹ã¯é·æçã«ã¯æãä¿¡é Œã§ãããã®ã§ã¯ãããŸããã§ããã 䞊è¡ããŠãä»ã®ããã€ãã®ãªãã·ã§ã³ãæ€èšããŸããã
ææãªãœãªã¥ãŒã·ã§ã³ã®1ã€ã¯ãrunkitããuopzã«åãæ¿ããããšã§ããã ããã¯ãåæ§ã®æ©èœãåããPHPã®æ¡åŒµæ©èœã§ãããã2014幎4æã«ç»å ŽããŸããã ãã³ãã®ååããç§ãã¡ã«æäŸãããäž»ã«ä»äºã®ã¹ããŒãã«ã€ããŠéåžžã«è¯ãã¬ãã¥ãŒãæäŸããŸããã ãã®ãããžã§ã¯ãã¯ãFirst Beat MediaïŒè±åœïŒã®Joe Watkinsã«ãã£ãŠãµããŒããããŠããŸãã ãã®ãããžã§ã¯ãã¯ãrunkitãšæ¯èŒããŠãã掻çºã§ææã«èŠããŸããã ããããæ®å¿µãªããããã¹ãŠã®ãã¹ããuopzã«è»¢éã§ããŸããã§ããã èŽåœçãªãšã©ãŒã¯ã©ãããã©ããã§ã»ã°ã¡ã³ããŒã·ã§ã³éåãçºçããŸãã-ããã€ãã®ã¬ããŒãããããŸããããæ®å¿µãªããåãã¯ãããŸããïŒè©³çŽ°ã«ã€ããŠã¯ãããšãã°githubã®ãã®ãã°ãåç §ïŒã ãã®å Žåããã¹ãã®æžãæããè¡ãã®ã¯éåžžã«é«äŸ¡ã§ãããä»ã®äœããæããã«ãããªããšããäºå®ã§ã¯ãããŸããã
ãã®çµæãç§ãã¡ã«ãšã£ãŠæãããªè§£æ±ºçãæãä»ããŸããïŒãã§ã«å€ãã®ã³ãŒããæžãçŽããªããã°ãªãããããã§ãrunkitãuopzã®ãããªå€éšãããžã§ã¯ãã«äŸåããŠãããããç§ãã¡èªèº«ã§è§£æ±ºããã«ã¯éåžžã«é«äŸ¡ãŸãã¯äžå¯èœãªåé¡ã絶ãããããŸããã¹ãŠã®äŸåé¢ä¿ãæ倧éã«åé€ããããã«ã³ãŒããæžãæããå¿ èŠã¯ãããŸãããïŒ ã¯ããHHVMãŸãã¯ä»ã®åæ§ã®è£œåã«åãæ¿ãããå Žåã§ãããã®ãããªåé¡ã¯äºåºŠãšãããŸããã ãããŠãç¬èªã®ãã¬ãŒã ã¯ãŒã¯ãååŸããŸããã
ã·ã¹ãã ã¯SoftMocksãšåŒã°ããŸãã ãœãããšããèšèã¯ãã·ã¹ãã ãæ¡åŒµæ©èœã䜿çšãã代ããã«çŽç²ãªPHPã§å®è¡ãããããšã匷調ããŠããŸãã ããã¯ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§ããããã©ã°ã€ã³ã©ã€ãã©ãªãšããŠå©çšå¯èœã§ããã ãããªãã¯ãã¡ã€ã³ã«ãããŸã ã SoftMocksã¯ãPHPã³ã¢å®è£ ã®æ©èœãšã¯é¢ä¿ãªãã GoïŒãšåæ§ã«ã³ãŒãããã®å Žã§æžãæããããšã§æ©èœããŸãã ãã ã
ãã¹ãã³ãŒãã¯äž»ã«æ¬¡ã®ãã®ã䜿çšããŸãã
- ã¯ã©ã¹ã®ã¡ãœããã®1ã€ã®å®è£ ã®çœ®æã
- é¢æ°ã®çµæã®çœ®æã
- ã°ããŒãã«ãŸãã¯ã¯ã©ã¹å®æ°ã®å€ãå€æŽããŸãã
- ã¯ã©ã¹ã«ã¡ãœãããè¿œå ããŸãã
ãããã®æ©èœã¯ãã¹ãŠãrunkitã䜿çšããŠå®å šã«å®è£ ãããŠããŸãã ã³ãŒããæžãæãããšããããå¯èœã«ãªããŸããã泚æãå¿ èŠã§ãã
Job Description SoftMocks-å¥ã®èšäºã®è³æãè¿ããã¡ã«äœæããŸãã ãããŸã§ã®éããã®ã·ã¹ãã ã®åäœã®ç°¡åãªèª¬æã®ã¿ã«å¶éããŠããŸãã
- ãŠãŒã¶ãŒã³ãŒãã¯ãæžãæãã©ãããŒé¢æ°ãä»ããŠæ¥ç¶ãããŸãã ãã®åŸããã¹ãŠã®includeã¹ããŒãã¡ã³ãã¯èªåçã«ååž°çã«ã©ãããŒã«çœ®ãæããããŸãã
- 眮æã®ååšã®ãã§ãã¯ãåãŠãŒã¶ãŒã¡ãœããã®å®çŸ©å ã«è¿œå ãããååšããå Žåã察å¿ããã³ãŒããå®è¡ãããŸãã çŽæ¥é¢æ°åŒã³åºãã¯ãã©ãããŒãä»ããåŒã³åºãã«çœ®ãæããããŸã-ããã«ãããçµã¿èŸŒã¿é¢æ°ãšãŠãŒã¶ãŒå®çŸ©é¢æ°ã®äž¡æ¹ãã€ã³ã¿ãŒã»ããã§ããŸãã
- ã³ãŒãå ã®å®æ°ã®åŒã³åºãããã©ãããŒã®åŒã³åºãã«åçã«çœ®ãæããããŸãã
- SoftMocksã¯Nikita Popovã®PHP-Parserã䜿çšããŸãã ãã®ã©ã€ãã©ãªã¯ããã»ã©é«éã§ã¯ãããŸããïŒè§£æã¯token_get_allã®çŽ15åé ããªããŸãïŒããæ§æããªãŒãèµ°æ»ããããã®äŸ¿å©ãªã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããä»»æã®è€éãã®æ§ææ§é ãæ±ãããã®äŸ¿å©ãªAPIãæäŸããŸãã
PHP7ãžã®åãæ¿ã-ã¿ã¹ã¯ã«æ»ããŸãããã ãããžã§ã¯ãã§SoftMocksã䜿çšãå§ããåŸãæåã§ä¿®åŸ©ããå¿ èŠãããçŽ1000åã®ãã¹ããæ®ã£ãŠããŸããã æåã¯60,000ã®ãã¹ãããã£ããããããã¯è¯ãçµæãšèããããšãã§ããŸãã runkitãšæ¯èŒããå®è¡é床ã¯äœäžããŠããŸããããã®ãããããã©ãŒãã³ã¹ã®èŠ³ç¹ãããSoftMocksã䜿çšããŠãæ·±å»ãªæ倱ã¯ãããŸããã å ¬å¹³ã«èšããšãuopzã¯ããã«é«éã«åäœããã¯ãã§ãã
ãŠãŒãã£ãªãã£ãšã¢ããªã±ãŒã·ã§ã³ã³ãŒã
å€ãã®é©æ°ã«å ããŠãPHP7ã«ã¯åŸæ¹äºææ§ããããŸãã åé¡ã®èª¿æ»ãå§ããæåã®ããšã¯ãå ¬åŒã®ç§»è¡ã¬ã€ããèªãããšã§ãã æ¢åã®ã³ãŒããä¿®æ£ããªããšãæ¬çªç°å¢ã§èŽåœçãªãšã©ãŒãçºçãããã°ã«ã¯åæ ãããªããã¢ããªã±ãŒã·ã§ã³ã®ããžãã¯ãæ£ãããªãåäœã®å€æŽãçºçãããªã¹ã¯ãããããšãããã«æããã«ãªããŸããã
Badooã¯PHPã³ãŒãã®ããã€ãã®ãªããžããªã§ãããæ倧ã®ãã®ã«ã¯200äžè¡ãè¶ ããã³ãŒããå«ãŸããŠããŸãã ããã«ãWebã®ããžãã¹ããžãã¯ãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®ããã¯ãšã³ããããã¹ãããã³èšç®ãŠãŒãã£ãªãã£ãŸã§ãPHPã§å€ãã®ããšãå®è£ ããŸããã ããã«ãBadooã¯ãã§ã«10幎ã®æŽå²ãæã€ãããžã§ã¯ãã§ãããæ®å¿µãªããPHP4ã®éºç£ããŸã ååšããŠãããšããäºå®ã«ãã£ãŠç¶æ³ã¯è€éã«ãªããŸããã ãããã£ãŠããå¯æ¥ãªãã¢ãªã³ã°ãã®æ¹æ³ã¯é©çšãããŸããã ãŸããããã©ãžã«ã®ã·ã¹ãã ãã¯é©çšã§ããŸãããã€ãŸããæ¬çªç°å¢ã«ãã®ãŸãŸçœ®ããŠãäœãå£ããããç£èŠãããšãããŸãã«ãå€ãã®ãŠãŒã¶ãŒã®ããžãã¹ããžãã¯ãå£ãããªã¹ã¯ãé«ãŸããŸãã ãã®ãããäºææ§ã®ãªãå Žæã®æ€çŽ¢ãèªååããæ©äŒãæ¢ãå§ããŸããã
æåã¯éçºè ã®éã§æã人æ°ã®ããIDEã䜿çšããããšããŸããããæ®å¿µãªããããã®æç¹ã§ã¯PHP7ã®æ§æãšæ©èœããµããŒãããŠããªãã£ãããçãããã»ã©å°æ°ã®åé¡ãæ€åºããæããã«ã³ãŒãå ã®å±éºãªå ŽæãèŠã€ãããŸããã§ããã å°ã調æ»ããçµæ ã php7marãŠãŒãã£ãªãã£ãè©ŠããŠã¿ãããšã«ããŸããã ããã¯ãPHPã§å®è£ ããããã®ãããªåçŽãªéçã³ãŒãã¢ãã©ã€ã¶ãŒã§ãã éåžžã«äœ¿ãããããéåžžã«é«éã«åäœããçµæã¯ããã¹ããã¡ã€ã«ãšããŠæäŸãããPHP7ãå¿ èŠã§ãã ãã¡ããããã®ãŠãŒãã£ãªãã£ã¯äžèœè¬ã§ã¯ãããŸãã;ã³ãŒãå ã®ç¹ã«ãããªãããŒãªãå Žæã®èª€æ€ç¥ãšçç¥ã®äž¡æ¹ããããŸãã ãããããã®å©ãã«ããåé¡ã®çŽ90ïŒ ãçºèŠãããPHP7ã§åäœããããã«ã³ãŒããæºåããããã»ã¹ãå€§å¹ ã«å éããã³ä¿é²ããŸããã
ç§ãã¡ã«ãšã£ãŠæãäžè¬çã§æœåšçã«å±éºãªåé¡ã¯æ¬¡ã®ãšããã§ãã
- func_get_argïŒïŒããã³func_get_argsïŒïŒé¢æ°ã®åäœãå€æŽããŸãã PHPã®5çªç®ã®ããŒãžã§ã³ã§ã¯ããããã®é¢æ°ã¯è»¢éæã«é¢æ°ã®åŒæ°ã®å€ãè¿ãã7çªç®ã®ããŒãžã§ã³ã§ã¯func_get_argsïŒïŒãåŒã³åºãããšãã«é¢æ°ã®åŒæ°ã®å€ãè¿ããŸããã ãããã£ãŠãé¢æ°å ã§func_get_argsïŒïŒãåŒã³åºãåã«åŒæ°ã®åŒæ°ãå€æŽãããå Žåã5çªç®ã®ããŒãžã§ã³ãšã¯ç°ãªãåäœããããªã¹ã¯ããããŸãã ããã¯ããã°ã空ã«ãªããã¢ããªã±ãŒã·ã§ã³ã®ããžãã¹ããžãã¯ãç Žæããå¯èœæ§ãããå Žåã§ãã
- ãªããžã§ã¯ãã®å€æ°ãããããã£ãã¡ãœãããžã®éæ¥ã¢ã¯ã»ã¹ã ç¹°ãè¿ããŸãããå±éºãªã®ã¯ãæ¯ãèãããéãã«ãå€åããå¯èœæ§ãããããšã§ãã ããã¥ã¡ã³ãã«ã¯ãéããæ£ç¢ºã«äœã§ããããååã«è©³çŽ°ã«èª¬æãããŠããŸãã
- äºçŽãããã¯ã©ã¹åã®äœ¿çšã PHP7ã§ã¯ãã¯ã©ã¹åãšããŠboolãintãfloatãstringãnullãtrueãããã³falseã䜿çšããããšãã§ããªããªããŸããã ã¯ããã¯ããNullã¯ã©ã¹ããããŸããã 幞ããªããšã«ããã®ã±ãŒã¹ã¯ãšã©ãŒã«ã€ãªããããããã§ã«ç°¡åã§ãã
- ãªã³ã¯ã䜿çšããæœåšçã«åé¡ã®ããforeachã³ã³ã¹ãã©ã¯ããå€æ°èŠã€ãããŸããã ãããã以åã¯foreachå ã®å埩å¯èœãªé åãå€æŽãããå éšãã€ã³ã¿ãŒã«äŸåããªãããã«ããŠããããã5çªç®ãš7çªç®ã®ããŒãžã§ã³ã§ã¯ã»ãšãã©ãã¹ãŠãåãããã«åäœããŸããã
éäºææ§ã®æ®ãã®ã±ãŒã¹ã¯ãéåžžã«ãŸãã§ãããïŒæ£èŠè¡šçŸã® 'e'修食åãªã©ïŒããŸãã¯åçŽãªçœ®æã«ãã£ãŠä¿®æ£ãããŸããïŒããšãã°ãçŸåšããã¹ãŠã®ã³ã³ã¹ãã©ã¯ã¿ãŒã¯__constructïŒïŒãšåŒã°ããã¹ãã§ãããã¯ã©ã¹åã®äœ¿çšã¯çŠæ¢ãããŠããŸãïŒã
ããããã³ãŒãã®ä¿®æ£ãéå§ããåã«ãäºææ§ã«å¿ èŠãªå€æŽãè¡ãéçºè ãããã°ãPHP7ãšäºææ§ã®ãªãã³ãŒããæžãç¶ããéçºè ããããšèããŸããã ãã®åé¡ã解決ããããã«ãå¯å€ã®php7 -lãã¡ã€ã«ã§å®è¡ãããåGitãªããžããªã«pre-receiveããã¯ãè¿œå ããŸããã PHP7ã®æ§æã«å¯ŸããŠãã¹ãããŸããã ããã¯ãéäºææ§ã«å¯Ÿããå®å šãªä¿è·ãä¿èšŒãããã®ã§ã¯ãããŸãããããã§ã«å€ãã®åé¡ãæé€ããŠããŸãã ãã以å€ã®å Žåãéçºè ã¯ããå°ã泚æããå¿ èŠããããŸããã ããã«ãPHP7ã®å®å šãªãã¹ãã¹ã€ãŒãã®å®æçãªå®è¡ãéå§ããçµæãPHP5ã®å®è¡ãšæ¯èŒããŸããã åæã«ãéçºè ã¯PHP7ã®æ°æ©èœã䜿çšããããšãçŠããããŠããŸããã php5 -lã§å€ãpre-receiveããã¯ããªãã«ããŸããã§ããã ããã«ãããããæç¹ã§ãã€ã³ã¿ãŒããªã¿ãŒã®7çªç®ãš5çªç®ã®äž¡æ¹ã®ããŒãžã§ã³ãšäºææ§ã®ããã³ãŒããååŸã§ããŸããã ãªããããéèŠãªã®ã§ããïŒ PHPã³ãŒãã®åé¡ã«å ããŠãæ°ããããŒãžã§ã³ã«ã¢ããã°ã¬ãŒããããšãã«ãPHP7èªäœãšãã®æ¡åŒµæ©èœã«åé¡ãããå¯èœæ§ãããããã§ãïŒå®éãäžèšã®ããã«ããããã®åé¡ã«ééããŸããïŒã ãããŠãæ®å¿µãªããããããã®ãã¹ãŠããã¹ãç°å¢ã§åçŸãããããã§ã¯ãããŸããããã®äžéšã¯ãæ¬çªç°å¢ã§å€§ããªè² è·ãããã£ãå Žåã«ã®ã¿èŠãããšãã§ããŸããã
ãèµ·åããšçµæ
æããã«ãä»»æã®æ°ã®ãµãŒããŒã§PHPã®ããŒãžã§ã³ãå€æŽããç°¡åã§è¿ éãªæ¹æ³ãå¿ èŠã§ããã ãããè¡ãã«ã¯ãã³ãŒãå šäœã§ãCLIã€ã³ã¿ãŒããªã¿ãŒãžã®ãã¹ã/ local / phpã«çœ®ãæããŸãããããã¯ã/ local / php5ãŸãã¯/ local / php7ãžã®ã·ã³ããªãã¯ãªã³ã¯ã§ãã ãããã£ãŠããµãŒããŒäžã®PHPã®ããŒãžã§ã³ãå€æŽããã«ã¯ããªã³ã¯ãå€æŽããå¿ èŠãããïŒæäœã¯ã¢ãããã¯ã§ã-ããã¯CLIã¹ã¯ãªããã«ãšã£ãŠéèŠã§ãïŒãphp5-fpmãåæ¢ããphp7-fpmãéå§ããŸãã nginxã®php-fpmã«2ã€ã®ã¢ããã¹ããªãŒã ãæã¡ãç°ãªãããŒãã§php5-fpmãšphp7-fpmãå®è¡ããããšã¯å¯èœã§ãããnginxã®æ§æãè€éã«ããããšã§ãã®ãªãã·ã§ã³ãæ°ã«å ¥ããªãã£ãã§ãããã
äžèšã®ãã¹ãŠãå®äºããåŸãããªãããã¯ã·ã§ã³ç°å¢ã§ã»ã¬ã³ãã¹ããå®è¡ããããšãã§ããŸãããããã«ããããããŸã§ã«èŠãããªãã£ãå€ãã®åé¡ãæ€åºããããšãã§ããŸããã 圌ãã¯ãPHPã³ãŒãïŒããšãã°ãfile_get_contentsïŒ "phpïŒ// input"ïŒãåªå ããŠå€ãã°ããŒãã«å€æ°$ HTTP_RAW_POST_DATAãæŸæ£ããªããã°ãªããªãã£ãïŒãšæ¡åŒµæ©èœïŒããŸããŸãªçš®é¡ã®ã»ã°ã¡ã³ããŒã·ã§ã³ãšã©ãŒïŒã®äž¡æ¹ã«é¢ä¿ããŠããŸããã
åã®æ®µéã§æ€åºãããåé¡ãä¿®æ£ãããŠããããã¹ãã®æžãæããå®äºãããïŒãã®éãã€ã³ã¿ãŒããªã¿ãŒã®ããã€ãã®ãã°ïŒããšãã°1〠ïŒãæ€åºã§ããŸããïŒãæçµçã«ãããã¯ã·ã§ã³ã®éé¢ãéå§ããŸããã ãæ€ç«ããšã¯ãéãããæ°ã®ãµãŒããŒã§æ°ããããŒãžã§ã³ã®PHPãèµ·åããããšã§ãã å倧èŠæš¡ã¯ã©ã¹ã¿ãŒïŒWebããã³ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®ããã¯ãšã³ããã¯ã©ãŠãïŒã®1ã€ã®ãµãŒããŒããéå§ãããšã©ãŒããªããã°æ¬¡ç¬¬ã«æ°ãå¢ãããŠãããŸããã PHP7ã«å®å šã«ç§»è¡ããæåã®äž»èŠãªã¯ã©ã¹ã¿ãŒã¯ã¯ã©ãŠãã§ããã ãã®çç±ã¯ãphp-fpmãå¿ èŠãªãããã§ãã fpmãåäœããã®ãšåãã¯ã©ã¹ã¿ãŒãèŠã€ãããŸã§åŸ ããªããã°ãªãããDmitry Stogovã¯OPcacheã®åé¡ãä¿®æ£ããŸããã§ããã ãã®åŸããã§ã«fpmã¯ã©ã¹ã¿ãŒã転éããŠããŸãã
次ã«çµæã«ã€ããŠã èŠããã«ã圌ãã¯å°è±¡çã§ãã 以äžã¯ãç§ãã¡ãææããæ倧èŠæš¡ïŒ263ãµãŒããŒïŒã®ã¯ã©ã¹ã¿ãŒãã€ãŸããã©ãããŒã¿ã»ã³ã¿ãŒã®ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®ããã¯ãšã³ãã§ã®å¿çæéã䜿çšçãã¡ã¢ãªæ¶è²»éãããã³CPU䜿çšçã®ã°ã©ãã§ãã
å¿çæéã®ååžïŒ

RUsageïŒCPUæéïŒïŒ

ã¡ã¢ãªäœ¿çšéïŒ

ã¯ã©ã¹ã¿ãŒå šäœã®CPUè² è·ïŒïŒ ïŒïŒ

ãããã£ãŠãããã»ããµãŒæéã¯2åã«ççž®ããããªã¯ãšã¹ãã®åŠçã«è²»ããããæéã®äžéšãããŒã¿ããŒã¹ããã³ããŒã¢ã³ãšéä¿¡ããPHP7ãžã®ç§»è¡ã§ã¯ãã®éšåã¯å éãããªããããå šäœã®å¿çæéã¯çŽ40ïŒ æ¹åãããŸããã ããã«ãã¯ã©ã¹ã¿ãŒã®ç·è² è·ã50ïŒ ãäžåã£ããšããäºå®ã«ãã£ãŠããã®å¹æã¯ãããã匷åãããŠããŸããããã¯ã ãã€ããŒã¹ã¬ããã£ã³ã°ãã¯ãããžãŒã®æ©èœã®äžéšã®æ©èœã瀺ããŠããŸãã 倧ãŸãã«èšã£ãŠãè² è·ã50ïŒ ãè¶ ãããšãHTã³ã¢ãæ©èœãå§ããŸããããã¯ç©çã³ã¢ã»ã©ãæçšãã§ã¯ãããŸããããããã¯å¥ã®èšäºã®ãããã¯ã§ãã
ã¡ã¢ãªæ¶è²»éã¯ããã«ããã¯ã§ã¯ãããŸããã§ããããçŽ8åæžå°ããŸããïŒ ãããŠæåŸã«ãæ©åšãç¯çŽããŸãããåãæ°ã®ãµãŒããŒã«ãããéåžžã«å€§ããªè² è·ã«èããããšãã§ããããã«ãªããæ¬è³ªçã«ãè³Œå ¥ãšã¡ã³ããã³ã¹ã®ã³ã¹ããåæžããŸãã ä»ã®ã¯ã©ã¹ã¿ãŒã®çµæã¯è¥å¹²ç°ãªããŸãããOPcacheããªããããã¯ã©ãŠãã§ã®ã²ã€ã³ãããæ§ããã§ãïŒCPUã®çŽ40ïŒ ïŒã
ã©ã®ãããã®ãéãç¯çŽããŸãããïŒ æ°ããŸãããã ç§ãã¡ã®ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã¯ã©ã¹ã¿ã¯600以äžã®ãµãŒããŒã§æ§æãããŠããŸãã CPU䜿çšçãååã«ããããšã§ãçŽ300å°ã®ãµãŒããŒãç¯çŽã§ããŸãã ãã®ãããªãéãã®åæäŸ¡æ ŒïŒããããçŽ4000ãã«ïŒãšæžäŸ¡ååŽè²»ãå ãããšãçŽ100äžãã«ã®ç¯çŽã«å ããŠããã¹ãã£ã³ã°ã§å¹ŽéçŽ10äžãã«ãåŸãããŸãã ãããŠãããã¯ã¯ã©ãŠããèæ ®ããŠããããã¯ã©ãŠãã®ããã©ãŒãã³ã¹ãåäžããŠããŸãã ããã¯çŽ æŽãããçµæã ãšä¿¡ããŠããŸãïŒ
ãã§ã«PHP7ã«åãæ¿ããŸãããïŒ ã³ã¡ã³ãã§ããªãã®æèŠã質åãèããŠããããã§ãã