시간은 일을하면서 보낸다
명령은 시간을 낭비하거나 기다리지 않고
실제로 시간이 걸리는 작업을 수행합니다. 여러 개의 작은 네트워크 지연을 추가하면 시간이 걸릴 수 있습니다. 그러나 유튜브쪽에 지연이 생길 수도 있습니다.
필요한 HTML을 다운로드하는 데 걸리는 시간입니다.
이 명령은 적어도 두 번 이상의 HTTP 요청을해야합니다.
따라서 느린 것이 있으면 이미 요청 수를 곱한 것입니다.
나를 위해 그것은 매우 빠른 라인에서 1.5 초가 걸립니다-그것은 8 초에서 그리 멀지 않습니다.
알아내는 방법
알아내는 데 사용한 명령을 보여 드리겠습니다.
예제를보다 깔끔하게 만들기 위해 URL에 변수를 사용합니다.
$ u="https://www.youtube.com/watch?v=k4JGSAmu4lg"
우리는 명령 기간을 측정하려고합니다. 명령을 사용하면 명령 time
과 셸 내장을 혼용하지 않도록주의해야합니다. 작은 함수를 사용하여 줄을 더 짧게 만듭니다.
$ t(){/usr/bin/time -f 'Time: %es' "$@";}
명령은 비디오 파일의 URL을 작성합니다 (80 열로 잘림).
$ youtube-dl -g "$u"
https://r20---sn-cxg7en7d.googlevideo.com/videoplayback?signature=091F68E823
내 컴퓨터에서 실행하는 데 걸리는 시간을 측정 해 보겠습니다.
$ t youtube-dl -g "$u"
https://r20---sn-cxg7en7d.googlevideo.com/videoplayback?signature=091F68E823
Time: 1.44s
좋아, 1.5 초 질문보다 빠르지 만 그렇게 빠르지는 않습니다. 그러나 어떻게 시간을 보내고 있습니까? 어쩌면 숨겨진 방법으로 비디오를 다운로드하여 버릴 수 있습니까? 비디오는 360p에서 11 분입니다. 옵션없이 다운로드하면 약 13 초에서 10 배가 더 걸립니다.
verbose 옵션을 사용하여 자세히 살펴보십시오 -v
.
$ t youtube-dl -v -g "$u"
[debug] System config: []
[debug] User config: []
[debug] Command-line args: ['-v', '-g', 'https://www.youtube.com/watch?v=k4J
[debug] Encodings: locale 'UTF-8', fs 'UTF-8', out 'UTF-8', pref: 'UTF-8'
[debug] youtube-dl version 2014.02.06
[debug] Python version 2.7.6 - Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14
[debug] Proxy map: {}
https://r20---sn-cxg7en7d.googlevideo.com/videoplayback?sparams=id%2Cinitcwn
Time: 1.40s
아, '[debug]'줄이 인쇄되기까지 약간의 지연이 있습니다. youtube-dl
자체 구성 설정에 시간이 걸리는 것 같습니다 . 우리가 찾고있는 지연이 아니라 1/4 정도입니다. 그러나 우리가 배울 youtube-dl
수있는 것은 구현 자체가 느릴 수 있다는 것입니다.
메시지 후 결과 URL이 인쇄 될 때까지 아무 일도 일어나지 않습니다. 따라서 우리는 여전히 흥미로운 부분을 보지 못합니다.
옵션 -g
은 세미 비밀 URL을 찾는 복잡한 부분을 수행하여 인쇄 한 다음 결국 실제 다운로드를 건너 뛴다는 점에서 비디오 다운로드를 "시뮬레이션"하는 것입니다. -s
URL을 출력하지 않는 유사한 옵션이 있으며 그렇지 않은 경우 비슷합니다. 같은 시간이 걸리면 충분히 비슷하다고 가정 해 봅시다. 우리는 그것을 확인해야합니다.
$ t youtube-dl -v -s "$u"
[debug] System config: []
[debug] User config: []
[debug] Command-line args: ['-v', '-s', 'https://www.youtube.com/watch?v=k4J
[debug] Encodings: locale 'UTF-8', fs 'UTF-8', out 'UTF-8', pref: 'UTF-8'
[debug] youtube-dl version 2014.02.06
[debug] Python version 2.7.6 - Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14
[debug] Proxy map: {}
[youtube] Setting language
[youtube] k4JGSAmu4lg: Downloading webpage
[youtube] k4JGSAmu4lg: Downloading video info webpage
[youtube] k4JGSAmu4lg: Extracting video information
Time: 1.45s
좋아요, -s
와 같은 시간이 걸리므로 -g
테스트를 위해 교체해도됩니다.
더 흥미로운 것은 이제 더 많은 결과를 얻었습니다. 흥미로운 타이밍으로 인쇄됩니다. 라인은 서로 비슷한 지연으로 인쇄되므로 실제로 찾는 시간이 걸리는 작업에 관한 것 같습니다.
메시지에서 두 개 이상의 웹 페이지가 다운로드됩니다. 그러나 "page"라는 단어가 단일 HTTP 요청과 단일 HTML 문서를 의미하지 않는다고 가정 할 수 있습니다.
우리는 무엇을 배웠습니까?
요점은 프로그램의 작업이 실제로 시간이 걸리고 무언가를 기다리거나 멈추지 않는다는 것입니다.
또한 비슷한 시간이 걸리는 여러 단계가 있습니다. 계산할 것이 많지 않으므로 네트워크 왕복이 어떤 식 으로든 합산됩니다.
즉, 연결 대기 시간은 여기서 만 중요합니다. 연결 처리량은 중요하지 않습니다.
인터넷 연결 속도를 높여 두 배 속도로 데이터를 전송할 수 있다면 전혀 도움이되지 않습니다. 그러나 더 좋은 ping
시간을 가질 수 있다면 훨씬 빨라질 것입니다.
인터넷 서비스 제공 업체에 '핑'시간이 아닙니다. 중요한 것은 YouTube에 핑 시간이 다가오는 것입니다. 변경이 불가능할 수도 있습니다.
흥미롭게도 다음 단계에서 비디오를 다운로드 할 때 빠른 회선에 대한 요구 사항은 정확히 반대입니다. 대기 시간은 전혀 관련이 없으며 처리량은 실제로 중요합니다.
아직 피곤하지 않습니까?
시간이 실제로 소비되는 시간을 이해하기 위해 더 자세한 정보를 원하십니까?
다음 단계는 HTTP 연결을 추적하는 것입니다. 예를 들어 리디렉션과 같이 두 개보다 많은 왕복이 표시 될 수 있습니다. 당신은 사용할 수 있습니다 wireshark
, 또는 로깅 HTTP 프록시, 또는 strace
단지 연결하거나 작성하기위한 시스템 호출을 계산합니다.
오늘날 우리는 네트워크의 토끼 구멍을 충분히 깊이 살펴 보았습니다.