ã¹ããªã¼ã API ã¯ãã¨ã¦ã便å©ãªãã¼ã«ã»ãããã¦ã§ããã©ãããã©ã¼ã ã«è¿½å ãã JavaScript ããããã¯ã¼ã¯çµç±ã§åä¿¡ãããã¼ã¿ã®ã¹ããªã¼ã ã«ããã°ã©ã ããã¢ã¯ã»ã¹ããéçºè ã®å¸æã©ããã«å¦çã§ããããã«ãããªãã¸ã§ã¯ããæä¾ãã¾ããã¹ããªã¼ã ã«é¢é£ããæ¦å¿µãç¨èªã®ä¸ã«ã¯ãåãã¦è³ã«ãããã®ãããããããã¾ããããã®è¨äºã§ã¯ãç¥ãã¹ããã¨ããã¹ã¦èª¬æãã¦ãã¾ãã
èªã¿åãå¯è½ãªã¹ããªã¼ãèªã¿åãå¯è½ãªã¹ããªã¼ã ã¯ãåºã«ãªãã½ã¼ã¹ (underlying source) ããæµãã ReadableStream
ãªãã¸ã§ã¯ãã«ãã£ã¦ JavaScript ã§è¡¨ããããã¼ã¿ã½ã¼ã¹ã§ãã åºã«ãªãã½ã¼ã¹ã¯ããããã¯ã¼ã¯ä¸ã®ã©ãããã¾ãã¯ãã¼ã¿ãåå¾ãããã¡ã¤ã³ã®ã©ããã«ãããªã½ã¼ã¹ã§ãã
åºã«ãªãã½ã¼ã¹ã«ã¯ã次㮠2 種é¡ãããã¾ãã
ãã¼ã¿ã¯ããã£ã³ã¯ (chunks) ã¨å¼ã°ããå°ããªæçã§é çªã«èªã¿åããã¾ãã ãã£ã³ã¯ã¯ 1 ãã¤ãã«ãããã¨ããç¹å®ã®ãµã¤ãºã®åä»ãé åãªã©ããã大ããªãã®ã«ãããã¨ãã§ãã¾ãã åä¸ã®ã¹ããªã¼ã ã«ã¯ããã¾ãã¾ãªãµã¤ãºã¨ã¿ã¤ãã®ãã£ã³ã¯ãå«ãããã¨ãã§ãã¾ãã
ã¹ããªã¼ã ã«ç½®ããããã£ã³ã¯ã¯ããã¥ã¼ã«å ¥ã£ã (enqueued) ã¨è¨ããã¾ãã ããã¯ãèªã¿åãã®æºåãã§ãã¦ãããã¥ã¼ã§å¾ æ©ãã¦ãããã¨ãæå³ãã¾ãã å é¨ãã¥ã¼ï¼internal queueï¼ã¯ãã¾ã èªã¿åããã¦ããªããã£ã³ã¯ã追跡ãã¾ãï¼ä¸ã®å é¨ãã¥ã¼ã¨ãã¥ã¼ã¤ã³ã°æ¦ç¥ã®ã»ã¯ã·ã§ã³ãåç §ï¼ã
ã¹ããªã¼ã å ã®ãã£ã³ã¯ã¯ãªã¼ãã¼ (reader) ã«ãã£ã¦èªã¿åããã¾ãã ããã«ãããä¸åº¦ã« 1 ã¤ã®ãã£ã³ã¯ã§ãã¼ã¿ãå¦çããããããã¦ã¼ã¶ã¼ã¯ä»»æã®ç¨®é¡ã®æä½ãå®è¡ã§ãã¾ãã ãªã¼ãã¼ã¨ããã«ä»éããä»ã®å¦çã³ã¼ãã¯ãã³ã³ã·ã¥ã¼ãã¼ (consumer) ã¨å¼ã°ãã¾ãã
ã¾ããã³ã³ããã¼ã©ã¼ (controller) ã¨å¼ã°ããæ§é ã使ç¨ãã¾ãã åãªã¼ãã¼ã«ã¯ãã¹ããªã¼ã ãå¶å¾¡ããï¼ä¾ãã°ãå¿ è¦ã«å¿ãã¦ãã£ã³ã»ã«ããï¼ãã¨ãã§ããã³ã³ããã¼ã©ã¼ãé¢é£ä»ãããã¦ãã¾ã ã
ä¸åº¦ã«ã¹ããªã¼ã ãèªã¿åããã¨ãã§ããã®ã¯ 1 ã¤ã®ãªã¼ãã¼ã®ã¿ã§ãã ãªã¼ãã¼ã使ãããã¹ããªã¼ã ã®èªã¿åããéå§ããã¨ãã¹ããªã¼ã ã¯ã¢ã¯ãã£ããªãªã¼ãã¼ (active reader) ã«ããã¯ããã¦ãã (locked) ã¨è¨ãã¾ãã å¥ã®ãªã¼ãã¼ã«ã¹ããªã¼ã ã®èªã¿åããéå§ãããå ´åã¯ãé常ãæåã®ãªã¼ãã¼ããã£ã³ã»ã«ãã¦ããä»ã®æä½ãè¡ãå¿ è¦ãããã¾ãï¼ã§ãããã¹ããªã¼ã ãåå² (tee) ãããã¨ãã§ãã¾ããä¸ã®åå²ã®ç¯ãåç §ï¼ã
èªã¿åãå¯è½ãªã¹ããªã¼ã ã«ã¯ 2 ã¤ã®ç°ãªã種é¡ããããã¨ã«æ³¨æãã¦ãã ããã 徿¥ã®èªã¿åãå¯è½ãªã¹ããªã¼ã ã«å ãã¦ããã¤ãã¹ããªã¼ã ã¨å¼ã°ãã種é¡ãããã¾ãã ããã¯ãåºã«ãªããã¤ãã½ã¼ã¹ï¼BYOB ã¾ã㯠bring your own bufferï¼ç¬èªã®ãããã¡ã¼ãæã¡è¾¼ãï¼ã¨ãå¼ã°ããï¼ã®ã½ã¼ã¹ãèªã¿åãããã®å¾æ¥ã®ã¹ããªã¼ã ã®æ¡å¼µãã¼ã¸ã§ã³ã§ãã ããã«ãããéçºè
ãæä¾ãããããã¡ã¼ã«ã¹ããªã¼ã ãç´æ¥èªã¿è¾¼ããã¨ãã§ããå¿
è¦ãªã³ãã¼ãæå°éã«æãããã¾ãã ã³ã¼ãã使ç¨ããåºã«ãªãã¹ããªã¼ã ï¼ããã¦æ¡å¼µã«ããããªã¼ãã¼ã¨ã³ã³ããã¼ã©ã¼ï¼ã¯ãæåã«ã¹ããªã¼ã ãã©ã®ããã«ä½æããããã«ãã£ã¦ç°ãªãã¾ãï¼ReadableStream()
ã³ã³ã¹ãã©ã¯ã¿ã¼ã®ãã¼ã¸ãåç
§ï¼ã
ãã§ãããªã¯ã¨ã¹ãããã® Response.body
ãªã©ã®ã¡ã«ããºã ãä»ãã¦æ¢è£½ã®èªã¿åãå¯è½ãªã¹ããªã¼ã ã使ç¨ããããReadableStream()
ã³ã³ã¹ãã©ã¯ã¿ã¼ã使ç¨ãã¦ç¬èªã®ã¹ããªã¼ã ã使ç¨ã§ãã¾ãã
ä¸åº¦ã«ã¹ããªã¼ã ãèªã¿åããã¨ãã§ããã®ã¯ 1 ã¤ã®ãªã¼ãã¼ã ãã§ãããã¹ããªã¼ã ã 2 ã¤ã®åä¸ã®ã³ãã¼ã«åå²ãã2 ã¤ã®å¥ã ã®ãªã¼ãã¼ã§èªã¿åããã¨ãã§ãã¾ãã ãããåå² (teeing) ã¨å¼ã³ã¾ãã
JavaScript ã§ã¯ãããã ReadableStream.tee()
ã¡ã½ãããä»ãã¦å®ç¾ãã¾ããå
ã®èªã¿åãå¯è½ãªã¹ããªã¼ã ã® 2 ã¤ã®åä¸ã³ãã¼ãå«ãé
åãåºåãã2 ã¤ã®å¥ã
ã®ãªã¼ãã¼ã§åå¥ã«èªã¿åããã¨ãã§ãã¾ãã
ä¾ãã°ããµã¼ãã¼ããã¬ã¹ãã³ã¹ãåå¾ãã¦ãã©ã¦ã¶ã¼ã«ã¹ããªã¼ãã³ã°ããããããµã¼ãã¹ã¯ã¼ã«ã¼ã®ãã£ãã·ã¥ã«ãã¹ããªã¼ã ãããå ´åã«ããµã¼ãã¹ã¯ã¼ã«ã¼ã§ãããè¡ããã¨ãã§ãã¾ãã ã¬ã¹ãã³ã¹ã®æ¬ä½ãè¤æ°å使ç¨ãããã¨ã¯ã§ãããã¹ããªã¼ã ãä¸åº¦ã«è¤æ°ã®ãªã¼ãã¼ã§èªã¿åããã¨ã¯ã§ããªãããããããè¡ãã«ã¯ 2 ã¤ã®ã³ãã¼ãå¿ è¦ã§ãã
æ¸ãè¾¼ã¿å¯è½ãªã¹ããªã¼ãæ¸ãè¾¼ã¿å¯è½ãªã¹ããªã¼ã (writable stream) ã¯ãWritableStream
ãªãã¸ã§ã¯ãã«ãã£ã¦ JavaScript ã§è¡¨ããããã¼ã¿ã®æ¸ãè¾¼ã¿å
ã§ãã ããã¯ãåºã«ãªãã·ã³ã¯ï¼underlying sinkãçãã¼ã¿ãæ¸ãè¾¼ã¾ããä¸ä½ã¬ãã«ã® I/O ã·ã³ã¯ï¼ã®ä¸é¨ã®æ½è±¡åã¨ãã¦æ©è½ãã¾ãã
ãã¼ã¿ã¯ãã©ã¤ã¿ã¼ (writer) ãä»ãã¦ä¸åº¦ã« 1 ã¤ã®ãã£ã³ã¯ã§ã¹ããªã¼ã ã«æ¸ãè¾¼ã¾ãã¾ãã ãã£ã³ã¯ã¯ããªã¼ãã¼ã®ãã£ã³ã¯ã¨åæ§ã«ã夿°ã®å½¢å¼ãã¨ããã¨ãã§ãã¾ãã ä»»æã®ã³ã¼ãã使ç¨ãã¦ãæ¸ãè¾¼ã¿å¯è½ãªãã£ã³ã¯ãçæã§ãã¾ãã ã©ã¤ã¿ã¼ã¨ããã«é¢é£ããã³ã¼ãããããã¥ã¼ãµã¼ (producer) ã¨å¼ã³ã¾ãã
ã©ã¤ã¿ã¼ã使ãããã¹ããªã¼ã ã¸ã®æ¸ãè¾¼ã¿ãéå§ããã¨ãã¹ããªã¼ã ã¯ã¢ã¯ãã£ããªã©ã¤ã¿ã¼ (active writer) ã«ããã¯ããã¦ãã (locked) ã¨è¨ããã¾ãã ä¸åº¦ã«æ¸ãè¾¼ã¿å¯è½ãªã¹ããªã¼ã ã«æ¸ãè¾¼ããã¨ãã§ããã®ã¯ã1 ã¤ã®ã©ã¤ã¿ã¼ã®ã¿ã§ãã å¥ã®ã©ã¤ã¿ã¼ã«ã¹ããªã¼ã ã¸ã®æ¸ãè¾¼ã¿ãéå§ããããå ´åã¯ãé常ãå¥ã®ã©ã¤ã¿ã¼ãåãã¤ããåã«ããã䏿¢ããå¿ è¦ãããã¾ãã
å é¨ãã¥ã¼ (internal queue) ã¯ãã¹ããªã¼ã ã«æ¸ãè¾¼ã¾ããããåºã«ãªãã·ã³ã¯ã«ãã£ã¦ã¾ã å¦çããã¦ããªããã£ã³ã¯ã追跡ãã¾ãã
ã¾ããã³ã³ããã¼ã©ã¼ã¨å¼ã°ããæ§é ã使ç¨ãã¾ãã åã©ã¤ã¿ã¼ã«ã¯ãã¹ããªã¼ã ãå¶å¾¡ããï¼ä¾ãã°ãå¿ è¦ã«å¿ãã¦ã¹ããªã¼ã ã䏿¢ããï¼ãã¨ãã§ããã³ã³ããã¼ã©ã¼ãé¢é£ä»ãããã¦ãã¾ã ã
WritableStream()
ã³ã³ã¹ãã©ã¯ã¿ã¼ã使ç¨ãã¦ãæ¸ãè¾¼ã¿å¯è½ãªã¹ããªã¼ã ãå©ç¨ã§ãã¾ãã ç¾å¨ããããã®ãã©ã¦ã¶ã¼ã§ã®å¯ç¨æ§ã¯é常ã«éããã¦ãã¾ãã
ã¹ããªã¼ã API ã§ã¯ããã¤ããã§ã¼ã³ (pipe chain) ã¨å¼ã°ããæ§é ã使ç¨ãã¦ãã¹ããªã¼ã ãäºãã«ãã¤ãæ¥ç¶ãããã¨ãå¯è½ã§ãã
ReadableStream.pipeThrough()
- ã¹ããªã¼ã ã夿ã¹ããªã¼ã (transform stream) ã«éãã¦ãã¤ãæ¥ç¶ããéä¸ã§ãã¼ã¿å½¢å¼ã夿ãããã¨ãã§ãã¾ãã ããã¯ãä¾ãã°ãåç»ãã¬ã¼ã ã®ã¨ã³ã³ã¼ãããã³ã¼ãããã¼ã¿ã®å§ç¸®ãè§£åãããå½¢å¼ããå¥ã®å½¢å¼ã¸ã®ãã¼ã¿å¤æã«ä½¿ç¨ãããã¨ãã§ãã¾ãã
夿ã¹ããªã¼ã ã¯ããã¼ã¿ãèªã¿è¾¼ã¾ããèªã¿åãå¯è½ãªã¹ããªã¼ã ã¨ããã¼ã¿ãæ¸ãè¾¼ã¾ããæ¸ãè¾¼ã¿å¯è½ãªã¹ããªã¼ã ã®ãã¢ã¨ããã¼ã¿ãæ¸ãè¾¼ã¾ããã¨åæã«æ°ãããã¼ã¿ãèªã¿è¾¼ããããã«ãªããã¨ãä¿è¨¼ããé©åãªã¡ã«ããºã ã§æ§æããã¦ãã¾ãã
TransformStream
ã¯å¤æã¹ããªã¼ã ã®å
·ä½çãªå®è£
ã§ããã pipeThrough()
ã«ã¯ãåãèªã¿åãå¯è½ãªã¹ããªã¼ã ã¨æ¸ãè¾¼ã¿å¯è½ãªã¹ããªã¼ã ã®ããããã£ãæã¤ä»»æã®ãªãã¸ã§ã¯ããéããã¨ãã§ãã¾ãã
ReadableStream.pipeTo()
â ãã¤ããã§ã¼ã³ã®çµç¹ã¨ãã¦æ©è½ããæ¸ãè¾¼ã¿å¯è½ãªã¹ããªã¼ã ã«ãã¤ãæ¥ç¶ãã¾ãã
ãã¤ããã§ã¼ã³ã®å§ã¾ãã¯å ã®ã½ã¼ã¹ (original source) ã¨å¼ã°ããçµããã¯æçµçãªã·ã³ã¯ (ultimate sink) ã¨å¼ã°ãã¾ãã
èå§ã¹ããªã¼ã ã®éè¦ãªæ¦å¿µã®ä¸ã¤ãèå§ (backpressure) ã§ãã ããã¯ãåä¸ã®ã¹ããªã¼ã ã¾ãã¯ãã¤ããã§ã¼ã³ãèªã¿åã/æ¸ãè¾¼ã¿ã®é度ã調æ´ããããã»ã¹ã§ãã ãã§ã¼ã³ã®å¾åã®ã¹ããªã¼ã ãã¾ã ãã¸ã¼ã§ãããã«å¤ãã®ãã£ã³ã¯ãåãå ¥ããæºåãã§ãã¦ããªãå ´åããã§ã¼ã³ãä»ãã¦ä¿¡å·ãéæ¹åã«éä¿¡ãã¦ãããåã®å¤æã¹ããªã¼ã ï¼ã¾ãã¯å ã®ã½ã¼ã¹ï¼ã«å¿ è¦ã«å¿ãã¦é ä¿¡é度ãè½ã¨ãããæç¤ºããã©ããããã«ããã¯ã«ãªããªãããã«ãã¾ãã
ReadableStream
ã§èå§ã使ç¨ããã«ã¯ãã³ã³ããã¼ã©ã¼ã® ReadableStreamDefaultController.desiredSize
ããããã£ãç
§ä¼ãããã¨ã§ãã³ã³ã·ã¥ã¼ãã¼ã叿ãããã£ã³ã¯ãµã¤ãºãã³ã³ããã¼ã©ã¼ã«åãåããã¾ãã ãããä½ãããå ´åãReadableStream
ã¯ãåºã«ãªãã½ã¼ã¹ã«ãã¼ã¿ã®éä¿¡ã忢ããããã«æç¤ºã§ããã¹ããªã¼ã ãã§ã¼ã³ã«æ²¿ã£ã¦èå§ãããã¾ãã
å¾ã§ã³ã³ã·ã¥ã¼ãã¼ãåã³ãã¼ã¿ãåä¿¡ãããå ´åã¯ãã¹ããªã¼ã ã®ä½æã§ pull
ã¡ã½ããã使ç¨ãã¦ããã¼ã¿ãã¹ããªã¼ã ã«ä¸ããããåºã«ãªãã½ã¼ã¹ã«æç¤ºã§ãã¾ãã
åã«è¿°ã¹ãããã«ãã¾ã å¦çããã¦çµäºãã¦ããªãã¹ããªã¼ã å ã®ãã£ã³ã¯ã¯ãå é¨ãã¥ã¼ã«ãã£ã¦è¿½è·¡ããã¾ãã
å é¨ãã¥ã¼ã¯ãå é¨ãã¥ã¼ã®ç¶æ (internal queue state) ã«åºã¥ãã¦èå§ãéç¥ããæ¹æ³ã決å®ãããã¥ã¼ã¤ã³ã°æ¦ç¥ (queuing strategy) ãæ¡ç¨ãã¦ãã¾ãã
ä¸è¬ã«ããã®æ¦ç¥ã¯ãã¥ã¼å ã®ãã£ã³ã¯ã®ãµã¤ãºãããã¥ã¼ã管çããããæå¤§ã®ãã£ã³ã¯ã®åè¨ãµã¤ãºã§ããæé«æ°´æºç¹ (high water mark) ã¨å¼ã°ããå¤ã¨æ¯è¼ãã¾ãã
å®è¡ãããè¨ç®ã¯æ¬¡ã§ãã
æé«æ°´æºç¹ - ãã¥ã¼å
ã®ãã£ã³ã¯ã®åè¨ãµã¤ãº = 叿ãµã¤ãº
叿ãµã¤ãº (desired size) ã¯ãã¹ããªã¼ã ãæµãç¶ããããã«åãå ¥ãããã¨ãã§ãããã£ã³ã¯ã®æ°ã§ããããµã¤ãºã¯æé«æ°´æºæªæºã¨ãªãã¾ãã ãã£ã³ã¯ã®çæã¯é©å®æ¸é/å éããã叿ãµã¤ãºãã¼ã以ä¸ã«ä¿ã¡ã¤ã¤ãã¹ããªã¼ã ã使ç¨å¯è½ãªéãéãæµããã¨ãã§ãã¾ãã ãã®å¤ãã¼ãï¼ã¾ãã¯æªæºï¼ã«ãªã£ãå ´åãã¹ããªã¼ã ã対å¦ã§ããé度ãããéããã£ã³ã¯ãçæããã¦ãããã¨ãæå³ãã¦ãããåé¡ãçºçããå¯è½æ§ãããã¾ãã
ä¾ã¨ãã¦ã1 ã®ãã£ã³ã¯ãµã¤ãºã¨ 3 ã®æé«æ°´æºç¹ãèãã¦ã¿ã¾ãããã ããã¯ãæé«æ°´æºç¹ã«å°éãã¦èå§ãé©ç¨ãããåã«ãæå¤§ 3 ã¤ã®ãã£ã³ã¯ããã¥ã¼ã«å ¥ãããã¨ãã§ãããã¨ãæå³ãã¾ãã
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4