ããªãã¨ãããã¨ããã¹ãã¨ããã©ã¼ãã³ã¹ãã©ãããããããã§ãã
å æ¥ Recall.ai ã¨ãããããªä¼è°ã«é¢é£ãããµã¼ãã¹ã®ããã°è¨äºãèªã¿ã¾ããã
ã¤ã³ãã©è²»ç¨ãæ¸ããããã«åç»å¦çãµã¼ãã¼ã®ãããã¡ã¤ã«ãã¨ã£ãã¨ãããCPU æéãä¸çªä½¿ã£ã¦ããã®ããããªãã¬ã¼ã ãéä¿¡ããéã® Web Socket ã®éä¿¡ã®ã¡ã¢ãªã³ãã¼ã ã£ãã¨ãããã¨ãããã£ãã®ã§ãå ±æã¡ã¢ãªä¸ã«å®è£ ãããªã³ã°ãããã¡ã使ããã¨ã§ CPU 使ç¨éãååã«ãã¦ãµã¼ãã¼ä»£ãååã«ããã¨ãã豪快ãªã話ã§ãã
åããµã¼ãã¼å ã®ããã»ã¹ééä¿¡ã« Web Socket ã使ãã¨ã以ä¸ã®ãªã¼ãã¼ããããããã¾ãã
- Chromium ããã»ã¹ããã«ã¼ãã«å ã®ãããã¡ã¸ã®ã¡ã¢ãªã³ãã¼
- ã«ã¼ãã«å ã®ãããã¡ããåç»å¦çããã»ã¹ã¸ã®ã¡ã¢ãªã³ãã¼
- Web Socket ã®æ¹ç«é²æ¢ã®ããã«èªåã§è¡ãå ¨ãã¼ã¿ã®ãã¹ãã³ã°
ãããã®ã³ã¹ãã¯ãããã¯ããªã¼ã§ã¼ãã³ãã¼ã®å ±æã¡ã¢ãªã®ãªã³ã°ãããã¡ã使ããã¨ã§åæ¸ã§ãã¾ãã
ã¾ãã«æè¡ã§èª²é¡ã解決ãã¦ããæãããã¦ãã話ãªã®ã§ããã以ä¸ã®è¦ä»¶ãæºããå ±æã¡ã¢ãªä¸ã®ãªã³ã°ãããã¡ã©ã¤ãã©ãªããªãã£ãããèªä½ãããããã§ãã
- ããã¯ããªã¼
- ãã«ããããã¥ã¼ãµ / ã·ã³ã°ã«ã³ã³ã·ã¥ã¼ã
- å¯å¤é·ã®ãã¬ã¼ã ã«å¯¾å¿
- ã¼ãã³ãã¼
- ãµã³ãããã¯ã¹å ããéä¿¡
- ä½é 延ã®ã·ã°ããªã³ã°
ãããããã®è¨äºã«ã¯ãã£ããã¨ãããªã³ã°ãããã¡ã®æ¦è¦ããè¨è¿°ããªããã¾ããã®ãªã³ã°ãããã¡ã©ã¤ãã©ãªã¯ OSS ã«ã¯ãªã£ã¦ããããã©ã®ããã«å®è£ ãããã¯ä¸æã§ããRecall.ai ã® Github ã«ã¯ããã£ã½ããªãã¸ããªã¯è¦ã¤ããã¾ããã§ããã
(https://www.recall.ai/post/how-websockets-cost-us-1m-on-our-aws-bill ãã)
ãªã³ã°ãããã¡ãå ·ä½çã«ã©ã®ããã«ä½ã£ãã®ããæ°ã«ãªã£ãã®ã§ãèªåã ã£ããã©ã®ããã«è¨è¨ããããèå¯ãã¦ã¿ã¾ããã
ä¸ã§åæãã以å¤ã«ã¯ä»¥ä¸ã®è¦ç´ ãããã°è¨äºä¸ã§ããã£ã¦ãã¾ããããããããºã«ã®ããã«å¾ã§è¨è¨ãçµãã®ã«å½¹ç«ã¡ã¾ãã
- read ptr, peek ptr, write ptr ã®3ã¤ã®ãã¤ã³ã¿ãã¢ãããã¯ã«ä½¿ã
- named semaphore ãããã»ã¹éã®ã·ã°ããªã³ã°ã«ä½¿ã
ãã¶ã¤ã³ããã¥ã¡ã³ããæ¸ãæãæ¤è¨ããããã¾ããããªãæ¡ã¯æ®éã¯å¾ãã®æ¹ã« "Alternative Considered" ã®ç« ã«ã¾ã¨ãã¾ããããã®è¨äºã§ã¯ã©ã®ããã«èå¯ããã®ããèªãã§ã»ãããããã¾ããããªãæ¡ãèå¯ãã¦ãããã¾ãããæ¡ãå°ãåºãæ¹å¼ã§æ¸ãã¦ãã¾ãã
ãã¼ã¿ãã©ã¼ãããã¨ãã¼ã¿æ§é
ãã¦ãããã¯ããªã¼ + ãã«ããããã¥ã¼ãµ + å¯å¤é·ãã¬ã¼ã ã®ãªã³ã°ãããã¡ã§ãããããªã³ã°ãããã¡ã«æ¸ãè¾¼ãéã®æä½ã¯ãã£ãã以ä¸ã®ã¹ãããã«ãªãã¯ãã§ãã
- write pointer ããã¼ã¿é·å atomic ã«å¢ããã¦ãªã³ã°ãããã¡å ã®é åã確ä¿ãã
- 確ä¿ããé åã«ãã¼ã¿ãæ¸ãè¾¼ã
- ãã¼ã¿ãèªã¿è¾¼ã¿å¯ã§ãããã¨ãéç¥ãã
ãªã³ã°ãããã¡ã«ãããã¨ãã¼ã¿ãè©°ãã
å¯å¤é·ã®ãªã³ã°ãããã¡ã®ãã¼ã¿ãã©ã¼ãããã¨ãã¦ç°¡åã«æãã¤ãã®ã¯ãåºå®é·ã®ãããã¨å¯å¤é·ã®ãã¼ã¿åã®é åã (1) ã®ã¹ãããã§ç¢ºä¿ãããã®ã§ãããå®ã¯ãã¾ãããã¾ããã
read ptr write ptr ⨠⨠| free space | header | data | header | data | free space |
ãªããã¨ããã¨ããããå ã®æ¸ãè¾¼ã¿å¯ãã©ã°ã (1) ã®ã¹ãããã®æç¹ã§åæåããã¦ããªãããããã§ããããã¯ããªã¼ã§ä¸¦åã«ã¢ã¯ã»ã¹ããããã«ã¯ããªã³ã°ãããã¡å ã®ç©ºãé åã®å é ã®æ¬¡ã®ãããã«è©²å½ããé¨åã (1) ãè¡ãåã«åæåããã¦ããå¿ è¦ãããã¾ãããäºåã«åæåãããã«ã (1) ãçµããã¾ã§ç©ºãé åã®å é ã®ä½ç½®ã¯ããããªãããããããã®åæåã¯ã§ãã¾ãããã³ã³ã·ã¥ã¼ãå´ã§èªã¿è¾¼ã¿å®äºæã«ç©ºãé åã«æ»ãããé åãå ¨ã¦ã¼ãã¯ãªã¢ãããªã©ãã¦åæåã¯ã§ãã¾ãããæ¯åå ¨ã¦ãã¼ãã¯ãªã¢ããã®ã¯ã¡ã¢ãªã¢ã¯ã»ã¹ã®è¦³ç¹ãããéå¹ççã§ãã
ã¡ã¿ãã¼ã¿å°ç¨ã®ãªã³ã°ãããã¡
ããã解決ããããã«ã2ã¤ã®ãªã³ã°ãããã¡ãç¨æãã¦ã¿ã¾ãã
- åºå®é·ã®ã¡ã¿ãã¼ã¿ã®ããã®ãªã³ã°ãããã¡
- å¯å¤é·ã®ãã¼ã¿ã®ããã®ãªã³ã°ãããã¡
read index write index ⨠⨠| free slot | metadata | metadata | free slot | free slot | | free space | data | data | free space | ^ ^ read ptr write ptr
åºå®é·ã®ã¡ã¿ãã¼ã¿ã®ãªã³ã°ãããã¡ãèªã¿è¾¼ã¿å´ã解æ¾ããæã«åæåãããã¨ã§ã¡ã¿ãã¼ã¿ã®åæåã®åé¡ã解決ããã¾ããããããã¡ã¿ãã¼ã¿ãªã³ã°ãããã¡ã® write index ã¨ãã¼ã¿ãªã³ã°ãããã¡ã® write ptr ãããã¯ãªãã«æä½ããããã2ã¤ã®ãªã³ã°ãããã¡ã®é åºãå ¥ãæ¿ãã£ã¦ãã¾ãå¯è½æ§ããããªã©ãã¸ãã¯ãè¤éã«ãªã£ã¦ãã¾ãã¾ããããã«ããã¼ã¿ãªã³ã°ãããã¡ã®ç©ºãé åãç¡ããªã£ãæã®ã·ã°ããªã³ã°ã«ã»ããã©ã使ãã¨ã1 ãã¤ãåä½ã§ã»ããã©ã«ç»é²ããªããã°ãªããªããããã»ããã©æä½ã大éã«çºçãéå¹çã§ãã
ãªã³ã°ãããã¡ãåºå®é·ã®ããã㯠ã§ç®¡çããã
å
è¨äºã«ãã㨠1080p ã®åç»ã® 1 ãã¬ã¼ã ã®å¤§ããã¯ã3110.4 KB
ã ããã§ããçµæ§ã§ããã§ããæåã®æ¡ã§ã¯ã空ãé åã®å
é ãã©ãã«ãªããããããªãããé åã®è§£æ¾æã«æ»ãããé åãå
¨ã¦ã¼ãã¯ãªã¢ããªãã¨ãããªããã¨ãåé¡ã§ããããªã³ã°ãããã¡ã 1 MB åä½ã§ç¢ºä¿ããã解æ¾ãããããããã«ããã¨ã空ãé åã®å
é ã«ãªãå¯è½æ§ã®ããé¨å㯠1 MB æ¯ã®å
é ã«éå®ããã空ãé åã«æ»ãã¨ãã«ãããã®åæåã®ããã«ã¼ãã¯ãªã¢ããé¨åã大å¹
ã«å°ãªããªãã¾ãï¼1 MB ãããæ°ãã¤ãï¼ã
ã¾ãããªã³ã°ãããã¡ã®ç©ºãé åãç¡ããªã£ãå¾ã«ç©ºãé åãå¢ãããã¨ãéç¥ããã»ããã©ãã<ãªã³ã°ãããã¡ã®ãµã¤ãº> / 1 MB
åã ãç»é²ããã°ããã®ã§ã»ããã©æä½ãå°ãªããªãã¾ãã
| free block | header | data | unused area | free block | | multiple of block size |
ãã¼ã¿ã®ãµã¤ãºã«ãã£ã¦ã¯ç¢ºä¿ãããããã¯ã®å¾ãã®é¨åã¯ä½¿ãããªãç¡é§ãªé åã«ãªãã¾ããããããã¯ã®å¤§ããã調æ´ãããã¨ã§ç¡é§ã«ãªãé åã®å²åãä¸ãããã¨ãã§ãã¾ããå ¨ä½ç㪠CPU æéã®ãªã¼ãã¼ãããã¨ã®ãã¬ã¼ããªãã§æ±ºãããã¨ã«ãªãã¾ãã
ãããã¥ã¼ãµã®å¦ç
- ãã¼ã¿ãµã¤ãºã¨ããããµã¤ãºããå¿ è¦ãªãããã¯æ°ãè¨ç®ãã
- ãããã¯ç¢ºä¿ç¨ã®ã»ããã©ãå¿ è¦ãªãããã¯æ° sem_wait ãã¦å¿ è¦ãªãããã¯æ°ãäºç´ãã
- write ptr ã確ä¿ãããããã¯ãµã¤ãºå atomic ã«å¢ããã¦é åã確ä¿ãã
- ãããã«ãã¼ã¿ã®å¤§ãããªã©ã®ã¡ã¿ãã¼ã¿ãæ¸ãè¾¼ã
- ãã¼ã¿ããªã³ã°ãããã¡ã®ç¢ºä¿ããé åã«ã³ãã¼ãã
- ãããå ã®èªã¿è¾¼ã¿å¯ã®ãã©ã°ãæå¹ã«ãã
- ãã¼ã¿å®äºéç¥ç¨ã®ã»ããã©ã 1 å sem_post ãã
read/write ptr ã¯ãªã³ã°ãããã¡ã®å é ããã®ãªãã»ããã§è¡¨ããã¾ãã
ã»ããã©ã®ç²å¾ã¯ 1 ãããã¯åä½ã§è¡ãã®ã§ãå ¨ä½ã®ãªã³ã°ãããã¡ã®ãããã¯æ°ãå°ãªãã¨è¤æ°ã®ãããã¥ã¼ãµãä¸å®å ¨ãªåæ°ã®ãããã¯ãã»ããã©ããäºç´ãã¦ãããããã¯ããå¯è½æ§ãããã¾ãããã®ãããªã³ã°ãããã¡ã®ãµã¤ãºã¯ãæ大ã®ãããã¥ã¼ãµã®æ°ã¨æ大ãã¬ã¼ã ã®ãµã¤ãºã®ç©ä»¥ä¸ã«è¨å®ããå¿ è¦ãããã¾ãã
ã³ã³ã·ã¥ã¼ãã®å¦ç
ã¾ããpeek ptr ãããæå³ãèãã¾ãããã 1 ãã¬ã¼ã ãã¨ã«å¦çãããã®ã§ããã° read ptr ããå é ã®ãã¬ã¼ã ã peek ãã¦ãå¦çãçµãã£ã¦ãã read ptr ã移åãããã°ããã¯ããªã®ã§ peek ptr ã¯å¿ è¦ããã¾ãããã¤ã¾ããpeek ptr ãããã¨ãããã¨ã¯ãè¤æ°ãã¬ã¼ã ã並è¡ã«å¦çããå¯è½æ§ãããã¨ãããã¨ããããã¾ãã
ãããå ã«ãã³ã³ã·ã¥ã¼ãå´ã§ã®èªã¿è¾¼ã¿å¦çãèãã¦ã¿ã¾ãã
Peek å¦ç
- peek ptr ãæãå é ã®ãããã®èªã¿è¾¼ã¿å¯ãã©ã°ãæå¹ã«ãªã£ã¦ãããã確èªãã
- ãããèªã¿è¾¼ã¿å¯ã§ãªãå ´åã¯ãã¼ã¿å®äºéç¥ç¨ã®ã»ããã©ã sem_wait ãã¦ã¹ããã 1 ã«æ»ãããã ãã
sem_wait
ã unblock ãããå ´åã§ãå é ã§ã¯ãªããã®å ã®ãã¬ã¼ã ã®èªã¿è¾¼ã¿ãå¯è½ã«ãªã£ãã ãã®å ´åããããã¨ã«æ³¨æããããã«ãããã®å ´åã¯sem_wait
ããªãããã¨ã«ãªãã - å é ã®ãã¬ã¼ã ãèªã¿è¾¼ã¿å¯ã§ãã£ãå ´åã¯ãpeek ptr ããã¬ã¼ã ãå«ãé åã®ãµã¤ãºåå¢ããã¦ãããã¼ã¿ã®ãã¤ã³ã¿ãå¼ã³åºãå ã«è¿ãã
ãã®èªã¿è¾¼ã¿å¦çã¯ã·ã³ã°ã«ã³ã³ã·ã¥ã¼ããªã®ã§ã·ã³ã°ã«ã¹ã¬ããã§è¡ããã¾ãããè¿ãããããããã®ãã¼ã¿ã®èªã¿è¾¼ã¿èªä½ã¯å¥ã¹ã¬ãããã並åã«è¡ãã¾ãã
Pop å¦ç
ãã¬ã¼ã ã®å¦çãçµãã£ãå¾ã®è§£æ¾å¦çã¯ä»¥ä¸ã®ããã«ãªãã¾ããread ptr ã®å é ã§ã¯ãªãéä¸ã®ãã¬ã¼ã ãå ã«å¦çæ¸ã«ãªã£ãå ´åã«å¯¾å¿ããããã«ããããã«å¦çæ¸ãã©ã°ãç¨æãã¾ãã
- å¦çæ¸ãã¬ã¼ã ãã¼ã¿ã®ãã¤ã³ã¿ãããããã®ä½ç½®ãéç®ãã
- ãããã®å¦çæ¸ãã©ã°ãç«ã¦ã
- ãããå¦çæ¸ãã¬ã¼ã ã read ptr ã®å é ã§ãªãã£ãå ´å㯠(read ptr != ãããã®å é ) ããã§è§£æ¾å¦çã¯çµäºã
- ãããå¦çæ¸ãã¬ã¼ã ã read ptr ã®å é ã§ãã£ãå ´åã¯ããã¬ã¼ã ãã¼ã¿ã«å«ã¾ããå ¨ã¦ã®ãããã¯ã®å é ã®ãããã®èªã¿è¾¼ã¿å¯ãã©ã°ã«ç¸å½ããä½ç½®ãã¼ãã¯ãªã¢ãã
- read ptr ããã¬ã¼ã ãå«ãé åã®ãµã¤ãºåå¢ããã¦ããããã¯ç¢ºä¿ç¨ã®ã»ããã©ã解æ¾ããããããã¯æ°
sem_post
ãã - step 3/4 ã«æ»ã£ã¦æ¬¡ã®ãã¬ã¼ã ããã§ã«å¦çæ¸ã§ãã£ãå ´åã¯å¼ãç¶ã解æ¾å¦çããã
æ»æ´»ç£è¦
ãããããã¥ã¼ãµãå¦çã®éä¸ã§ã¯ã©ãã·ã¥ãããªã©ãã¦æ¢ã¾ã£ãå ´åããªã³ã°ãããã¡ã®å¦çéä¸ã®ãã¬ã¼ã 以éå ¨ã¦ãèªã¿è¾¼ã¿ã§ããã«ã·ã¹ãã ãæ¢ã¾ã£ã¦ãã¾ãã¾ãã
ãããããã Recall.ai ã§ã¯ããã¾ã§ãã£ã¦ãªããããããªãã§ãããã·ã¹ãã ã®å£æ» çãªåæ¢ãé²ãããã«ãæ»æ´»ç£è¦ã®ä»çµã¿ããªã³ã°ãããã¡ã«å ¥ããå¿ è¦ãããã¾ãã
ãããã¥ã¼ãµã®æ»ã®å¤å®
ãããã¥ã¼ãµããã»ã¹ã®æ»ã¯ Unix ãã¡ã¤ã³ã½ã±ããã®ã³ãã¯ã·ã§ã³ãäºåã«è²¼ã£ã¦ãããã¨ã§æ¤ç¥ãããã¨ãã§ãã¾ãããããããã¥ã¼ãµãæ»ã¬ã¨èªåçã«ã³ãã¯ã·ã§ã³ãåæç¶æ ã«ãªããã½ã±ããã epoll ãªã©ã§èªã¿è¾¼ã¿å¾ ã¡ãã¦ããã³ã³ã·ã¥ã¼ãã«éç¥ããã¾ãããããã¥ã¼ãµãçµäºã¡ãã»ã¼ã¸ãã½ã±ããã«æ¸ãè¾¼ããã¨ãªãã³ãã¯ã·ã§ã³ãåæãããå ´åã¯ã³ã³ã·ã¥ã¼ãã¯ç°å¸¸ç¶æ ããã®å¾©å¸°ã¢ã¼ãã«å ¥ããã¨ãã§ãã¾ããã³ã³ã·ã¥ã¼ãã¯ãç°å¸¸æ»ãæ¤ç¥ããæç¹ã§ã® write ptr ã®å¤ã atomic ã«åå¾ãã¦ãpeek ptr ããã®å¤ã«å°éããã¾ã§èªã¿åãã¾ã§ç°å¸¸ç¶æ ãç¶ãã¾ãã
ã³ãã¼éä¸ã®æ»ããã®å¾©å¸°
ãããã¥ã¼ãµããã¼ã¿ãã³ãã¼ãã¦ããéä¸ã§æ»ãã å ´åããããã«ãã¬ã¼ã ã®å¤§ãããæ¸ãã¦ããã®ã§ãã®ãã¬ã¼ã ãã³ã³ã·ã¥ã¼ãã¯æ¨ã¦ããã¨ãã§ãã¾ãããã ãããã®ãã¬ã¼ã ãæ¸ãã¦ãããããã¥ã¼ãµãçªç¶æ»ãããããã¥ã¼ãµãã©ãããå¤å®ããããã«ããããã«ãããã¥ã¼ãµã® ID ãæ¸ãè¾¼ããã¨ã«ãã¾ãã
ã¾ãããããã¥ã¼ãµã® ID ã¯åè¿°ã®ã³ãã¯ã·ã§ã³ãæ¥ç¶ããã¨ãã«ã³ã³ã·ã¥ã¼ãããå²ãæ¯ã£ã¦ãããã¥ã¼ãµã«ä¼ãããã¨ã§ä¸ææ§ãä¿ããã¾ãã
ãããæ´æ°åã®æ»ããã®å¾©å¸°
ãããã¥ã¼ãµã write ptr ãæ´æ°ããç´å¾ã®ããããæ´æ°ããåã«æ»ãã§ãã¾ã£ãå ´åããã®ãã¬ã¼ã ã®å¤§ãããã³ã³ã·ã¥ã¼ãã¯ç¥ããã¨ãã§ãã¾ããããã以éã®ãã¬ã¼ã ã¯æ£å¸¸ãªãã¬ã¼ã ãå«ãã¦æ®å¿µãªããæ¨ã¦ããã¨ã«ãªãã¾ããã³ã³ã·ã¥ã¼ãã¯ãããã®ãµã¤ãºãé·æéæ´æ°ãããªããã¬ã¼ã ãæ¤åºããæããã以éã®ãã¬ã¼ã ã諦ã㦠peek ptr ãç°å¸¸ç¶æ
ã«å
¥ã£ãæã® write ptr ã®å¤ã«æ¸ãæãã¦å¦çãåéãã¾ãããã¬ã¼ã ãæ¨ã¦ãã®ã¯ peek æ¸ã®ãã¬ã¼ã ãå
¨ã¦å¦çæ¸ã«ãªã£ãç¶æ
(read ptr == peek ptr) ã§è¡ããpeek ptr ãåãããããã¯æ°åããããã¯ç¢ºä¿ç¨ã®ã»ããã©ã sem_post
ãã¾ãã
ãããæ»ãã ãããã¥ã¼ãµä»¥å¤ã®ãããã¥ã¼ãµããã®ãã¬ã¼ã ãæ¨ã¦ããã¨ãåãå ¥ããããªãå ´åã¯ãããã¯ãã¨ã®ç¶æ ã管çãããã¨ã«ãªãã¾ããããã¼ã¿ããããã¯ã®å¢çã§é£ç¶ããªããªã£ã¦ãã¾ãã®ã§è¨è¨ã 1 ããè¦ç´ããã¨ã«ãªãã¨æãã¾ãã
ã³ã³ã·ã¥ã¼ãã®æ»
ã³ã³ã·ã¥ã¼ããæ»ãã§å¾©å¸°ããå ´åãããããã¥ã¼ãµå´ã¯ã³ã³ã·ã¥ã¼ãã®æ»ã Unix ãã¡ã¤ã³ã½ã±ããã«ãã£ã¦æ¤åºã§ããã®ã§ã³ã³ã·ã¥ã¼ãã¨ã®ã³ãã¯ã·ã§ã³ãè²¼ãç´ãããã¾ã§ãªã³ã°ãããã¡ã®æ¸ãè¾¼ã¿ãä¸æãããã¨ã§å¯¾å¿ã§ãã¾ãã
ã³ã³ã·ã¥ã¼ãã復帰ããå¾ã¯ãããã¥ã¼ãµã® ID ãå ¨ã¦æ°ãããªããããã³ã³ã·ã¥ã¼ãã¯ãã¼ã¿ã®æ¸ãè¾¼ã¿ãåéãããåã«ãªã³ã°ãããã¡å ã«ãããã¼ã¿ãå ¨ã¦å¦çãã¾ãããã®å¾ãæ°ãããããã¥ã¼ãµã® ID ãã½ã±ããçµç±ã§éä¿¡ãã¦ãããã¥ã¼ãµã«ãã¼ã¿ã®æ¸ãè¾¼ã¿ãåéããã¾ãã
ä¸æãªç¹
ããã°ã®å è¨äºããã¯ã©ãããã®ããä¸æãªç¹ã¯ãããªæãã ã¨æãã¾ãã
- ã©ããã£ã¦å ±æã¡ã¢ãªã Chromium ã® JS ç°å¢ã«ç¹ãè¾¼ãã§ããã®ã
- å
±æã¡ã¢ãªã®ãã¼ã¿ãã©ã¤ãã©ãªå¤ããå£ãããªãã®ã
- å ±æã¡ã¢ãªèªä½ã JS ç°å¢ã«è¦ããªãããã«ããã° Third-party ã³ã¼ããå®è¡ãã JS ããå ±æã¡ã¢ãªãæ£ãã使ããã¨ãä¿è¨¼ã§ãã¾ãã
- ã²ã¨ã¤ã®ãããã¥ã¼ãµãé ãããå ´åå ¨ä½ãå¾éãã¦ãã¾ã
ã¾ã¨ã
ããèãã¦ã¿ãã¨ãèå¯ããã®ã«å¿ è¦ãªæ å ±ã¯ãã®ããã°è¨äºã«ã¾ã¨ã¾ã£ã¦ããã®ã§ Overview Design ã¨ãã¦ã¯ããªãããæ¸ãããè¨äºã ã£ãã®ã ãªã¨æãã¾ããã
ã©ã¤ãã©ãªãä½ãæã¯ãã¹ã¦ã®å ´åã«å¯¾å¿ããªãã¨ãããªãã®ã§è¨è¨ã£ã¦å¤§å¤ã§ããä»åã¯æ»æ´»ç£è¦ã«ãã£ã¦ããã¹ããªãªã³ã°ãããã¡ã«ä»ä¸ããã¾ããã
çããããããã¹ãã¨ããã©ã¼ãã³ã¹ã両ç«ãããããã¯ããä½ã£ã¦ããã¾ãããã