2014幎ã®åãã«ããã¶ã€ã³ãçµ±äžããã¿ã¹ã¯ãã³ã³ãã³ããããžã§ã¯ãéšéã«ãã£ãŠããŸããã èšèšè ã¯ãçµ±äžãããã¹ã¿ã€ã«ã®ãããžã§ã¯ããšã€ã³ã¿ãŒãã§ã€ã¹ã®æäœåçãæ±ããŠããŸããã ãŠãŒã¶ãŒã«ãšã£ãŠäŸ¿å©ã§ãããæ°ãããããžã§ã¯ãã®ç«ã¡äžããšæ¢åã®ãããžã§ã¯ãã®åèšèšã容æã«ããŸãïŒYura Vetrov ãããã«ã€ããŠè©³ããæžããŠããŸãïŒã ããã³ããšã³ãããŒã ã¯ãç°ãªããããžã§ã¯ãã§åæ§ã®çµçã³ã³ããŒãã³ãã䜿çšããæ©äŒããããŸããããã«ãããæ¢åã®æ©èœã®éçºãšãµããŒãæéãççž®ãããŸãã ããã¯ãšã³ãããŒã ã«ãšã£ãŠãã¿ã¹ã¯ã¯ç°¡åãªãã®ã§ã¯ãããŸããã§ãããã»ãšãã©ã®ãããžã§ã¯ãã¯PerlïŒãã³ãã¬ãŒãããŒã«ãããïŒãPHPã®äžåç£ãChildren and Healthã§Djangoã䜿çšããŠæžãããŠããŸãã ããããåäžã®ãã³ãã¬ãŒããšã³ãžã³ã®ãµããŒããå®è£ ããã ãã§ãªãããã³ãã¬ãŒãã«éä¿¡ãããããŒã¿ã®åäžã®åœ¢åŒã«åæããå¿ èŠããããŸããã ããŒãå¯èœãªAJAXãããã¯ãè±å¯ã§ãããããã¯ã©ã€ã¢ã³ãã®æšæºåããµããŒãããå¿ èŠããããŸããã
ãããã£ãŠããã¶ã€ã³ãçµ±äžããã¿ã¹ã¯ã¯ãPerlãPythonãPHPãJSã®åäžã®ãã³ãã¬ãŒããšã³ãžã³ãéžæããã¿ã¹ã¯ã«ãªããŸããã
æåã®ã¹ããã
ã¿ã¹ã¯ã¯è€éã«èŠããå®å šã«è§£æ±ºãããŠããªããããããŸããŸãªãªãã·ã§ã³ãæ¢ãå§ããŸããã æ¢è£œã®ãœãªã¥ãŒã·ã§ã³ããå§ããŸããã æåã®ã¢ã€ãã¢ã¯ãDjango Dotiac :: DTLãã³ãã¬ãŒããšã³ãžã³ãPerlã«ããŸãã¯ãã³ãã¬ãŒãããŒã«ããããPythonã«ç§»æ€ããããšã§ãã ã ãã³ãã¬ãŒãããŒã«ãããã䜿çšãããšããã³ãã¬ãŒãã§ããã°ã©ã ããžãã¯ãèšè¿°ã§ããŸããããã«ãããä»ã®èšèªã§ã¯äœ¿çšã§ããªããªããŸãã Djangoãã³ãã¬ãŒãã¯ãã³ãã¬ãŒãã§ã®ããã°ã©ãã³ã°ãå€§å¹ ã«å¶éããŸããããã£ã«ã¿ãŒãšã¿ã°ã®åœ¢åŒã§æ¡åŒµæ©èœãæåŠããããPerlãšJSã§ããžãã¯ãè€è£œããå¿ èŠããããŸãã ããã«ã移æ€ãããããŒãžã§ã³ãã©ã®çšåºŠæ©èœãããã¯äžæã§ãã ãããã£ãŠããã®ã¢ã€ãã¢ã¯ããã³ãã¬ãŒããšã³ãžã³ã®åºæ¬çãªæ§é ïŒif / elseæ¡ä»¶ã®ãããã¯ãforã«ãŒããå å«ãå«ãïŒã®äœ¿çšã«åž°çããŸããã ãã®ãããå®å šãªããŒãã¯å¿ èŠãããŸããã 䜿çšãããããäœããã®çç±ã§ïŒããšãã°ãå¥ã®èšèªã§å®è£ ãããŠããªãããŸãã¯ç°ãªãæ¹æ³ã§å®è£ ãããŠããïŒæ©èœã¯ãããã»ã¹å šäœã«å¹²æžããã ãã§ãã ãããã£ãŠãããã©ãŒãã³ã¹ãã¹ãã«å°éããŸããã§ããã ãã®ã¢ã€ãã¢ã¯å»¶æãããŸããã
2çªç®ã®ã¢ã€ãã¢ã¯ã Mustacheã䜿çšããããšã§ããã ãã®ãã³ãã¬ãŒããšã³ãžã³ã¯ãWebã§äººæ°ã®ããïŒPHPãPythonãPerlãRubyãJSïŒããéåžžã«é ãïŒRãBashãDelphiïŒãŸã§ãå€ãã®èšèªã§å©çšã§ããŸãã ãã³ãã¬ãŒãã«ããžãã¯ããªãããšã¯ãæåã¯é åçã§ããããã³ãã¬ãŒãå¶åŸ¡çšã®ããŒã¿ãæºåããããã»ã¹ã¯ãããã¯ãšã³ããå®å šã«å¶åŸ¡ãããã³ãã¬ãŒãèªäœã«ã¯ããžãã¯ããããŸããã ããããããã¯äžå¿ èŠãªæ¥µç«¯ã§ããããšãå€æããŸããã ããŒã¿ã®æºåã«ã¯æéãããããããããã§ãããŒã·ã£ã«ã¡ã«ããºã ã¯äžäŸ¿ã§ããã³ãã¬ãŒãã³ã¬ã¯ã¿ãŒãå¿ èŠã§ããã ãç§ã®æèŠã§ã¯ãããã¯å°çäžã®å°çã®æçã§ãããšãããã¬ãŒãºãšäžç·ã«ãå£ã²ããèããããšããããŸããã
ãŸããå¿ èŠãªãã¹ãŠã®èšèªã§ç¬èªã®ã·ã³ãã«ãªãã³ãã¬ãŒããšã³ãžã³ãèšè¿°ããããŸãã¯å¿ èŠãªãã³ãã¬ãŒããäœæã§ããã¡ã¿èšè¿°ãäœæãããšããã¢ã€ãã¢ããããŸããã ã¿ã¹ã¯ã¯é¢åã§ãããããªãã·ã§ã³ã®æ€çŽ¢ãç¶ããŸããã
ãã§ã¹ã
Festã¯ãXMLãã³ãã¬ãŒããJavaScripté¢æ°ã«ã³ã³ãã€ã«ãããã³ãã¬ãŒããšã³ãžã³ã§ãã åœæããã§ã«ã¢ãã€ã«çã§festã䜿çšããçµéšããããŸããã 倧ããªããŒãžã§ã³ãšã®äž»ãªéãã¯ããã®æç¹ã§ã¯æ€çŽ¢ãããã¯ã¢ãã€ã«ããŒãžã§ã³ã«ã»ãšãã©æ³šæãæã£ãŠããªãã£ãããšã§ããããµãŒããŒãªãœãŒã¹ãç¯çŽããªãããã¯ã©ã€ã¢ã³ãäžã§å®å šã«ãã³ãã¬ãŒãåããäœè£ããããŸããã HTMLããŒãžã§ã¯æ¬¡ã®ããã«ãªããŸããã
<script> document.write(fest['news.xml'], context) </script>
ã³ã³ããã¹ãã¯JSONã·ãªã¢ã«åããŒã¿ã§ãã ã¬ã³ããªã³ã°ãããHTMLã¯ãdocument.writeãä»ããŠããŒãžã«åºåãããŸããã
festã䜿çšãããšãã¯ã©ã€ã¢ã³ãäžã®ãã³ãã¬ãŒãã®åé¡ã解決ãããããããµãŒããŒã§ãã®JSãå®è¡ããæ¹æ³ãåŠã¶å¿ èŠããããŸããã ããã³ããšã³ãããŒã ããã®ãªãã·ã§ã³ããµããŒãããŠããŸããã ãµãŒããŒã§JavaScriptãå®è¡ããããã«ãGoogleãã人æ°ã®ããV8ãéžæããŸããã V8ã¯æ¥éã«éçºãããŠããŸãããç¶ç¶çãªãããã©ãŒãã³ã¹ãšå®å®æ§ã®æ¹åãã«ããããã€ããŒããŒãžã§ã³ã§ãäžäœäºææ§ãæãªãããããšããããããŸãã ããã¯ç解ã§ããŸããV8ã¯äž»ã«ChromeïŒå€ãããŒãžã§ã³ã®ä»£ããã«æ°ããããŒãžã§ã³ãä»å±ãããã©ãŠã¶ãŒïŒåãã«éçºãããŠããŸãã V8ã®äœ¿çšãéå§ããMailã®ååã®çµéšã掻çšããŸããã
V8
ãŸããæ¢è£œã®ãœãªã¥ãŒã·ã§ã³ã ã€ãŸã PythonãšPerlã®ãã€ã³ããŒãæ¢ãå§ããŸããã ããã±ãŒãžã®ã¢ã»ã³ããªã«å°ãèŠãããããŠïŒV8ã¯ãã€ã³ãã£ã³ã°ãããã¯ããã«å ãè¡ããäºææ§ã®ããããŒãžã§ã³ãèŠã€ããã®ã¯å®¹æã§ã¯ãããŸããã§ããïŒãç§ãã¡ã¯ããããè©Šãå§ããŸããã ã³ã³ããã¹ãã®é«é¡ãªåŒãäžãã«ããã«æ°ä»ããŸãããã³ã³ããã¹ãã®äœæã«ã¯çŽ10ããªç§ãããããã³ãã¬ãŒãã®ã¬ã³ããªã³ã°ã«ã¯20ããªç§ããããŸãã ãããã£ãŠãã³ã³ããã¹ãã¯ãªã¯ãšã¹ãããšã«1åäœæããçæ³çã«ã¯åŸã§åå©çšããå¿ èŠããããŸãã ãã®ãããäžè¬çãªã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°ããã€ãã£ããã³ãã¬ãŒããšã³ãžã³ïŒTemplateToolkitãŸãã¯DjangoïŒã«çµã¿èŸŒãããšã«ã¯çåããããŸããã§ããã ããªãã¯å®å šã«ç¥ãã«è¡ããªããã°ãªããŸããã
ãããã®ãã€ã³ãã£ã³ã°ã¯éåžžã«ä¿¡é Œã§ãããããžã§ã¯ããéçºããã䜿çšäŸãã€ã³ã¿ãŒãããã§å ¬éãããŸããã ãããŠãç§ãã¡ã¯ãããã䜿ãå§ããŸããã åœæãAutoïŒPerlïŒããã³HealthïŒPythonïŒãããžã§ã¯ãã¯åèšèšãããŠããŸããããæ°ãããã¯ãããžãŒããã¹ãããŸããã ã³ã³ãããŒã©ãŒã§ãã³ã³ããã¹ãã圢æãããããJSONã«ã·ãªã¢ã«åããããŒãããããã³ãã¬ãŒãã«éä¿¡ããŸããã
ctx = PyV8.JSContext() with ctx: ctx.eval(template) ctx.eval('fest["%s"](%s)' % (fest_template_name, json_context)
ããã¯æå¹ãªãªãã·ã§ã³ã§ããããããã»ã©ãã©è²ã§ã¯ãããŸããã§ããã å®éã«ã¯ããã³ãã¬ãŒãã«å ããŠãäžè¬çãªãã«ããŒãŠãŒãã£ãªãã£ããããŸãã ãããã¯äžåºŠV8ã«ããŒããããããŒãžã®ã¬ã³ããªã³ã°æã«äœ¿çšãããå¿ èŠããããŸãã V8äžã®ã©ãããŒã¯ãã®ãããªã³ãŒããããŒãã§ããŸãããããããå³å¯ã«1åè¡ãå¿ èŠããããŸããã åèªã¿èŸŒã¿ã®çµæãã¡ã¢ãªãªãŒã¯ãçºçããŸããã ãã³ãã¬ãŒãã³ãŒãã§ãåãããšãèµ·ãããŸããã ãã®çµæãåãªã¯ãšã¹ãã«å¯ŸããŠã³ã³ããã¹ããäœæããããã®åŸã³ã³ããã¹ããåé€ãããŸããã ãã¿ãŒã³åã¯é ããããã»ããµãªãœãŒã¹ã¯ç¡é§ã«ãªããŸããããã¡ã¢ãªã¯æµããŸããã§ããã ãããããã¹ãŠãã»ãŒå®å®ããŠåäœããŸããã ãã®çµæããã®å³ã§èªåãéå§ãããŸããã
V8äžã®ã©ãããŒã䜿çšãããšãJavaScriptã³ã³ããã¹ãã§èšèªãªããžã§ã¯ãã䜿çšã§ããŸãã ããããPyV8ã®å Žåãããã¯ãŸã£ããæ©èœããŸããã ç§ãè©Šãããã¹ãŠã®ããŒãžã§ã³ã¯ãããã«ã¡ã¢ãªããªãŒã¯ãŸãã¯ã¯ãªã¢ããŸããããã»ã°ã¡ã³ããŒã·ã§ã³éåã«é¥ããŸããã ãã€ã³ãã¯è»¢éããããªããžã§ã¯ãã®ã¿ã€ããæ£çŽã«ãã§ãã¯ãããããçŽç²ã«JavaScriptã®å®è¡ã«ããããã®ãªãŒããŒãããã䌎ããã€ã³ããŒã®äœ¿çšãåæžãããŸããã å¥åº·ã«é¢ããŠã¯ãæŠéã§PyV8ã䜿çšããããšã¯ãããããŸããã§ããã
äžæ¹ãéµäŸ¿å±ã®ååã¯åœŒãã®æ±ºå®ãå ±æããŸããã ããã¯ããã³ãã¬ãŒãåãšã³ã³ããã¹ãïŒJSONæååïŒãåãåãããŠãŒã¶ãŒã«æäŸããHTMLãè¿ãç¬ç«ãããªãã³ã°ããŒã¢ã³ã§ãã å€ãã®æ¹æ³ã§ã圌ã¯ç§ãã¡ã®åé¡ã解決ããŸãã ããŒã¢ã³ã¯èµ·åæã«å ±éãã«ããŒãããŒããããã³ãã¬ãŒããã¡ã¢ãªã«ãã£ãã·ã¥ããé床ãšã¡ã¢ãªãå®å®ããŠåäœããŸãã ããã§ããããã¯çæ³çãªè§£æ±ºçã§ã¯ãããŸããã§ããã ã¡ãŒã«ã¯ãç§ãã¡ãšã¯ç°ãªãã¿ã¹ã¯ã®ããã«ãã®ããŒã«ãéçºããŸããã ãããã®ãã¿ãŒã³ã¯ç§ãã¡ã®ãã®ãããã¯ããã«å°ãããŠè»œããããéãå®è¡ãããŸãã 以åãAndrei Suminã¯æšæºåã®ããã«çŽ1ããªç§ïŒ ãµãŒããŒäžã®JavaScriptãå€æã®ããã«1ããªç§ïŒãæžããŠããŸãããå¹³å15-20ããªç§ã§ãã
圌ãã®ãœãªã¥ãŒã·ã§ã³ã¯ããµãŒããŒããšã«ãã³ãã¬ãŒãããŒã¢ã³ã®1ã€ã®ããã»ã¹ãå¿ èŠãšããŸãã ååã¯ãã«ãããã»ããµããŒãžã§ã³ãäœæããŸãããã解決çãå¿ èŠãªåé¡ã¯æ®ã£ãŠããŸããã
- èªç«åããŒã¢ã³ã«ã¯å®å®ããåäœãå¿ èŠã§ãã ããã¯ã¢ãããµãŒããŒã«ãã°ããåãæ¿ããã«ã¯ã圌ã®äœæ¥ãç£èŠããå¿ èŠããããŸãã
- ãšã©ãŒã®ãããã°ã¯ã衚瀺ãããããŒãžã®ã¢ãã¬ã¹ãšã¯é¢ä¿ãããŸããã
- ãã°ã¯ãäžè¬çãªçµ±èšåéã·ã¹ãã ã§ã¯ãªãããã¡ã€ã«ã«æžã蟌ãŸããŸãã
- é 延ãåé¿ããã«ã¯ãåãæ°ã®ããã¯ãšã³ãã¯ãŒã«ãŒãšãã³ãã¬ãŒãããŒã¢ã³ãå¿ èŠã§ãã
èå³æ·±ãã±ãŒã¹ããããŸããã ãã³ãã¬ãŒãã«å ¥ãããããšãæ°žé ã®ãµã€ã¯ã«ã誀ã£ãŠçºçããåŽåè ãå®å šã«å æããããã¯æ²æšãªçµæããããããŸããã ãã®ãããªã±ãŒã¹ã¯ä»åŸçºçããŸããã§ãããããã®ãããªãšã©ãŒã«å¯Ÿããä¿è·ã¯ãããŸããã§ããã ãã®çµæãå¥åº·ã¯ãã®ã¹ããŒã ããå§ãŸããŸããã ããããç§ãã¡ã¯ããã§æ¢ãŸããŸããã§ããã 次ã®ã¹ãããã¯ãå¥ã®ããŒã¢ã³ãæŸæ£ããããšã§ãããç§ãã¡ã¯ãPerlãšPythonã®å®è¡å¯èœããã»ã¹ã«ãã³ãã¬ãŒããçµã¿èŸŒãããšã«ããŸããã ãã®çµæã V8ã®äžè¬çãªã©ãããŒãäœæãããJSãã¡ã€ã«ïŒãã«ããŒãšãã³ãã¬ãŒãïŒãèªã¿åããã¡ã¢ãªã«ã³ãŒããããŒãããŠå®è¡ïŒã€ãŸãããã³ãã¬ãŒããHTMLã§ã¬ã³ããªã³ã°ïŒããããšãã§ããŸããã
ãã®ã¢ãžã¥ãŒã«ã¯ãããã»ã¹ã«å¯ŸããŠ1ã€ã®V8ã³ã³ããã¹ããçæãããã®äžã§ãã¹ãŠã®ãããªãäœæ¥ãå®è¡ããŸãã ãã®ã¢ãããŒãã®çµæãã©ã€ãã©ãªã®ååãçãŸããŸãã-V8MonoContextã 次ã«ãèšèªã³ã³ããã¹ãã§ãããã®é¢æ°ã䜿çšããŠãPerlã§XSã¢ãžã¥ãŒã«ãšPythonã®æ¡åŒµæ©èœãäœæããŸããã
renderer = MonoContext() renderer.load_file(utils_file) append_str = 'fest["{}.xml"]( JSON.parse(__dataFetch()) );'.format(bundle) html, errors = renderer.execute_file(template_file, append_str, json_str)
ãã«ããŒã¯ãload_fileã¡ãœããã䜿çšããŠããã»ã¹ã®éå§æã«1åããŒããããŸãã execute_fileã¡ãœããã¯ããã³ãã¬ãŒããããŒããããã³ãã¬ãŒãé¢æ°ãåŒã³åºããŸãããã³ãã¬ãŒãé¢æ°ã«ã¯ããã³ãã¬ãŒãã®ããŒã¿ãå«ãJSONãæž¡ãããŸãã ãã®çµæãHTMLãšãããã¯ãšã³ãèªäœã®æšæºããŒã«ãä»ããŠãã°ã«èšé²ãããå¯èœæ§ã®ãããšã©ãŒã®ãªã¹ããååŸããŸãã ä»ããã®ãœãªã¥ãŒã·ã§ã³ã¯å®å šã«ç§ãã¡ã«åã£ãŠããŸãïŒ
- ãã¿ãŒã³åã¯ãåäžã®ã¯ãŒã«ãŒå ã§ãŠãŒã¶ãŒãªã¯ãšã¹ããåŠçããããã®äžå¯æ¬ ãªéšåã§ãã æèŠæéã枬å®ããèãããããšã©ãŒãèšé²ã§ããŸãã
- V8ã³ã³ããã¹ãã¯ãã¯ãŒã«ãŒã®éå§æã«äžåºŠäžæããŸãã
- JSã³ãŒããäžåºŠããŒãããããšããµãŒããŒãªãœãŒã¹ãæé©ã«æ¶è²»ãããŸãã
- V8ã¯ããã€ãã£ãèšèªã®ãã³ãã¬ãŒããšã³ãžã³ãããå€ãã®ã¡ã¢ãªãæ¶è²»ããŸãã ã¯ãŒã«ãŒã®åžžé§ã¡ã¢ãªã¯ãå¹³åã§200 MBå¢å ããŸããïŒæ倧300 MBïŒã
- ãŸããã¹ã¬ããã¢ãŒãã¯ãµããŒããããŠããŸãããããã¯ãPythonãããžã§ã¯ãã«é¢é£ããå¯èœæ§ããããŸãã 1ã€ã®ããã»ã¹å ã§å®è¡ã§ããã³ã³ããã¹ãã¯1ã€ã ãã§ããããã®æç¹ã§ã¯æ®ãã¯éã¢ã¯ãã£ãã«ãªã£ãŠããå¿ èŠããããŸãã ããããChromeã§ã®V8ã®æ©èœã§ãã ããããããã¯ããããããããšã§ã¯ãªããããªãã©ãŒã¯ã¢ãŒãã§åäœããŸãã
GCã«é¢é£ããV8ã®ä»ã®æ©èœããããŸãã V8ã¯ãéåžžã¡ã¢ãªãäžè¶³ãå§ããå Žåã«ãé©åã§ãããšå€æããªããã¬ããŒãžã³ã¬ã¯ã¿ãèµ·åããŸãã ããã«å¯Ÿå¿ããã«ã¯ã2ã€ã®æ¹æ³ããããŸãã
- RAMã確ä¿ããV8ãå®å šã«ä¿¡é ŒããŸãã V8ã³ã³ããã¹ãã¯ãèšå®å€MaxRequestãä»ããŠã¯ãŒã«ãŒãšå ±ã«åæ¢ããŸãã
- äžå®ã®åšæã§ãããã³ãã«ããå®è¡ããŸã-äœã¡ã¢ãªLowMemoryNotificationã«ã€ããŠã®ã·ã°ãã«ã ãŸãã«èµ·åãããšãã¯ãªãŒãã³ã°æéãé·ããªããäœåãªããã»ããµãªãœãŒã¹ãé »ç¹ã«äœ¿çšãããæãããããŸãã ãã³ãã¬ãŒãäœæãªã¯ãšã¹ã500件ããšã«LowMemoryNotificationãåŒã³åºããŸãã
V8ã«å²ãåœãŠãããã¡ã¢ãªã®ãµã€ãºãå¶éããããšãã§ããŸãïŒV8ã®ã¡ã¢ãªç®¡çãã©ã° ïŒã ãã®å ŽåãGCã¯ããé »ç¹ã«éå§ãããŸããã解決ããæ¹ãéããªããŸãã ååãªã¡ã¢ãªããªãå ŽåããµãŒããŒã¯ã¹ã¯ããå ã®ããŒãã®äžéšãé 延ãããå¯èœæ§ããããããã«ããè¿œå ã®é 延ãçºçããŸãã ãã®çµæããã®å³ã«ãã¹ã¿ãŒãæ²èŒãããçµæã¯å®å šã«æºè¶³ããŸããã ããã«ãV8MonoContextã¯PHPã§ã®äœæ¥ãåŠã³ããã®åŸãä»ã®ãããžã§ã¯ãïŒèªåè»ãæå ããå¥åº·ã女æ§ãäžåç£ã倩æ°ããã€ãã¯ïŒãåŠã³ãŸããã
æ§èœæ¯èŒ
V8ã®ãã³ãã¬ãŒããšã³ãžã³ïŒããã³ä»ã®ã¢ã¯ãã£ããªãã³ãã¬ãŒããšã³ãžã³ïŒã®é床ã¯ãåŠçããããŒã¿éãšé©çšãããããžãã¯ã«äŸåããããšã«æ³šæããŠãã ããã çŽã¬ã³ããªã³ã°æéã¯ãåæãã¹ãã«ãã£ãŠã®ã¿æ±ºå®ã§ããŸãããããã¯å¿ ãããå®éã®ç¶æ³ãåæ ããŠãããšã¯éããŸããã ç§ãã¡ã®å ŽåãV8ããã®ç§»è¡ã¯åèšèšã§è¡ããããããæ£ç¢ºãªæž¬å®å€ã¯ãããŸããã ã¡ããªãã¯ãéæ¥çã«æ¯èŒãããšãæ倧2åã®å©çãåŸãããŸããã
éçºã¢ãããŒã
ãã§ã¹ãã£ãã«ãžã®ç§»è¡ã«äŒŽããéçºãžã®ã¢ãããŒããå€ãããŸããã
- å ±éã®ãã³ãã¬ãŒãã³ã³ããŒãã³ãã«ã¯ãããã䜿çšãããããžã§ã¯ãçšã®åäžã®ã€ã³ã¿ãŒãã§ã€ã¹ãå¿ èŠã§ãã ããã«ã¯ãããã»ã¹ã®ãã¹ãŠã®åå è ã®ç¹å®ã®é åºãšèª¿æŽãå¿ èŠã§ãã ç§ãã¡ã¯ããã¥ã¡ã³ãã®äžã§ãããã³ãã«éä¿¡ãããããŒã¿ã®åœ¢åŒã説æãå§ããŸããã ããã«ãCSRFããŒã¯ã³ã䜿çšãããªã©ãããŸããŸãªããã¯ãšã³ãïŒPerlãPythonãPHPïŒåãã®äžè¬çãªã·ã¹ãã ãœãªã¥ãŒã·ã§ã³ãéçºããŠããŸãã
- å ±éã®ã³ã³ããŒãã³ãã¯ãã¹ãŠã®ãããžã§ã¯ãã§ç°ãªããããè¿ éãã€å¹ççã«æ©èœããããšãç¹ã«éèŠã§ãã
- ããã¯ãšã³ããããŒã¿ãè¿ãããã³ãã¬ãŒãã«ãŸã£ãã觊ããªãçŽç²ãªMVCã¹ããŒã ããããŸãã ããã³ãã«ååãªããŒã¿ããªãå Žåã¯ãããã¯ãšã³ããåŸ ã€å¿ èŠããããŸãã
çµè«
PerlãPythonãããã³PHPã®åäžã®ãã³ãã¬ãŒããšã³ãžã³ã«åãæ¿ããã¿ã¹ã¯ã解決ããŸããã äžè¬çãªã³ã³ããŒãã³ãïŒã³ã¡ã³ããã®ã£ã©ãªãŒãæ祚ãªã©ïŒãè¿ éã«å®è£ ãããã¹ãŠã®ãããžã§ã¯ãã«åæ£ã§ããããã«ãªããŸããã ç§ãã¡ã«ãšã£ãŠãã¯ã©ã€ã¢ã³ãã®æšæºåã¯å€§ããªãã©ã¹ã«ãªããŸãããçŸåšãããžãã¯ãã¯ã©ã€ã¢ã³ãåŽã«è»¢éããããšã¯å®è³ªçã«äŸ¡å€ããããŸããã ãã®ã·ãªãŒãºã®æ¬¡ã®èšäºã¯ãããã³ããšã³ãããã®èšäºã§ãååãæ¢ã«æºåããŠããŸãã