필터링하는 동안이 JSON 파일내가 하나 만들었어기준jq를 활용한 내부 sort
메소드가 unique
실제로는25% 느림비교하다 sort --unique
!
주문하다 | 평균[밀리초] | 가장 짧은 [밀리초] | 최대 [밀리초] | 비교적 |
---|---|---|---|---|
jq "[.[].category] \| sort \| unique" channels.json |
172.0±2.6 | 167.8 | 176.8 | 1.25±0.06 |
jq "[.[].category \| select((. != null) and (. != \"XXX\"))] \| sort \| unique" channels.json |
151.9±4.1 | 146.5 | 163.9 | 1.11±0.06 |
jq ".[].category" channels.json \| sort -u |
137.2±6.6 | 131.8 | 156.6 | 1.00 |
Summary
'jq ".[].category" channels.json | sort -u' ran
1.11 ± 0.06 times faster than 'jq "[.[].category | select((. != null) and (. != \"XXX\"))] | sort | unique" channels.json'
1.25 ± 0.06 times faster than 'jq "[.[].category] | sort | unique" channels.json'
테스트 명령:
hyperfine --warmup 3 \
'jq "[.[].category] | sort | unique" channels.json' \
'jq "[.[].category | select((. != null) and (. != \"XXX\"))] | sort | unique" channels.json' \
'jq ".[].category" channels.json | sort -u'
(고유성 없이) 순서만 테스트하면 jq는 다시9% 느림정렬보다:
주문하다 | 평균[밀리초] | 가장 짧은 [밀리초] | 최대 [밀리초] | 비교적 |
---|---|---|---|---|
jq "[.[].category] \| sort" channels.json |
133.9±1.6 | 131.1 | 138.2 | 1.09±0.02 |
jq ".[].category" channels.json \| sort |
123.0±1.3 | 120.5 | 125.7 | 1.00 |
Summary
'jq ".[].category" channels.json | sort' ran
1.09 ± 0.02 times faster than 'jq "[.[].category] | sort" channels.json'
버전:
jq-1.5-1-a5b5cbe
sort (GNU coreutils) 8.28
나는 jq의 내부 기능을 사용하는 것이 자체적으로 생성되어야 하는 외부 애플리케이션에 파이프하는 것보다 더 빠를 것으로 기대합니다. 내가 jq를 잘 사용하고 있지 않은 걸까?
고쳐 쓰다 FLASH 스토리지, Arm CPU 및 다음을 갖춘 호스트에서 이 실험을 반복했습니다.
jq-1.6
sort (GNU coreutils) 8.32
결과:
Benchmark #1: jq "[.[].category] | sort" channels.json
Time (mean ± σ): 587.8 ms ± 3.9 ms [User: 539.5 ms, System: 44.2 ms]
Range (min … max): 582.8 ms … 594.2 ms 10 runs
Benchmark #2: jq ".[].category" channels.json | sort
Time (mean ± σ): 606.0 ms ± 8.6 ms [User: 569.5 ms, System: 49.0 ms]
Range (min … max): 589.6 ms … 616.2 ms 10 runs
Summary
'jq "[.[].category] | sort" channels.json' ran
1.03 ± 0.02 times faster than 'jq ".[].category" channels.json | sort'
jq 정렬은 이제 GNU 정렬보다 3% 더 빠르게 실행됩니다. :D