Vscode: ์œ ํœด ์ƒํƒœ์—์„œ๋„ CPU ์‚ฌ์šฉ๋Ÿ‰ (์ปค์„œ ๋ Œ๋”๋ง์œผ๋กœ ์ธํ•ด)

์— ๋งŒ๋“  2017๋…„ 03์›” 20์ผ  ยท  64์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: microsoft/vscode

  • VSCode ๋ฒ„์ „ : 1.10.2 (8076a19fdcab7e1fc1707952d652f0bb6c6db331)
  • OS ๋ฒ„์ „ : macOS Sierra 10.12.3

VS Code๋Š” ์ง‘์ค‘ ๋ฐ ์œ ํœด ์ƒํƒœ์—์„œ 13 % CPU๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํ„ฐ๋ฆฌ๋ฅผ ์†Œ๋ชจํ•ฉ๋‹ˆ๋‹ค. ๊นœ๋ฐ•์ด๋Š” ์ปค์„œ ๋ Œ๋”๋ง ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง‘์ค‘ ๋ฐ ์œ ํœด ์ƒํƒœ ์ผ ๋•Œ CPU ์‚ฌ์šฉ๋Ÿ‰์ด ๊ฑฐ์˜ 0 %์— ๊ฐ€๊น๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์žฌํ˜„ํ•˜๋ ค๋ฉด (๋นˆ ์„ค์ • ํŒŒ์ผ๊ณผ ๋ชจ๋“  ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๋น„ํ™œ์„ฑํ™” ๋œ ์ƒํƒœ์—์„œ ์ž‘๋™ ํ•จ) :

  1. ๋ชจ๋“  VS ์ฝ”๋“œ ์ฐฝ์„ ๋‹ซ์Šต๋‹ˆ๋‹ค.
  2. ์ƒˆ ์ฐฝ์„ ์—ฝ๋‹ˆ ๋‹ค (ํŒŒ์ผ-> ์ƒˆ ์ฐฝ). ํ™˜์˜ ํŽ˜์ด์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  3. ์ œ๋ชฉ์—†๋Š” ๋นˆ ํŒŒ์ผ์ด์žˆ๋Š” ์ƒˆ ํƒญ์„ ์—ฝ๋‹ˆ ๋‹ค (ํŒŒ์ผ-> ์ƒˆ ํƒญ). ์ปค์„œ๊ฐ€ ๊นœ๋ฐ•์ž…๋‹ˆ๋‹ค.
  4. 13 ํ˜• MacBook Pro์—์„œ๋Š” VS Code๊ฐ€ ๋ฌด์‹œํ•  ์ˆ˜์—†๋Š” ์–‘์˜ CPU (13 %)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  5. ๋‹ค๋ฅธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ Cmd + Tab. ์ด์ œ ์ปค์„œ๊ฐ€ ๋” ์ด์ƒ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  6. ์‹ค์ œ๋กœ CPU๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” VS Code๊ฐ€ ํ‘œ์‹œ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž ๋„๊ตฌ์— ํƒ€์ž„ ๋ผ์ธ์„ ๊ธฐ๋กํ–ˆ๋Š”๋ฐ ๋Œ€๋žต์ ์ธ ๋ชจ์–‘์€ CPU ํ™œ๋™์ด 500ms๋งˆ๋‹ค ๊นœ๋ฐ•์ด๋Š” ์ปค์„œ๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐ์„œ ์˜ค๋Š” ๊ฒƒ์ž„์„ ์•”์‹œํ•ฉ๋‹ˆ๋‹ค.

Chrome ๋˜๋Š” TextEdit์™€ ๊ฐ™์€ ๋‹ค๋ฅธ macOS ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ CPU๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ปค์„œ๊ฐ€ ๊นœ๋ฐ•์ด๋Š” ๊ฒƒ์„ ๋ณด์—ฌ ์ฃผ๋ฏ€๋กœ ํ™•์‹คํžˆ ์ตœ์ ํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

bug editor-core perf

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋ฐฐํ„ฐ๋ฆฌ ์ˆ˜๋ช…์— ๋Œ€ํ•ด ๋น„์Šทํ•˜๊ฒŒ ์ง‘์ฐฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„์œ„ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : ์ปค์„œ ๊นœ๋ฐ•์ž„์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด CPU ์‚ฌ์šฉ๋Ÿ‰์ด 0์œผ๋กœ ๋–จ์–ด์ง‘๋‹ˆ๋‹ค. ์„ค์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  "editor.cursorBlinking": "solid"

๋ชจ๋“  64 ๋Œ“๊ธ€

๋ฐฐํ„ฐ๋ฆฌ ์ˆ˜๋ช…์— ๋Œ€ํ•ด ๋น„์Šทํ•˜๊ฒŒ ์ง‘์ฐฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„์œ„ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : ์ปค์„œ ๊นœ๋ฐ•์ž„์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด CPU ์‚ฌ์šฉ๋Ÿ‰์ด 0์œผ๋กœ ๋–จ์–ด์ง‘๋‹ˆ๋‹ค. ์„ค์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  "editor.cursorBlinking": "solid"

Twitter์˜ ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์€ ์ด๊ฒƒ์„ ์žฌํ˜„ ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ๋ง ํ–ˆ์œผ๋ฏ€๋กœ ๋””๋ฒ„๊ทธ๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์— ํƒ€์ž„ ๋ผ์ธ์„ ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค.

TimelineRawData-20170321T114212.json.zip

  • ํƒ€์ž„ ๋ผ์ธ ์Šคํฌ๋ฆฐ ์ƒท :

    boot mz0y1

  • ๋‹จ์ผ ํ”„๋ ˆ์ž„์œผ๋กœ ํ™•๋Œ€ํ•˜๋ฉด 2fps ๋งŒ ๋ Œ๋”๋งํ•˜๋Š” ๋™์•ˆ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” ํ™”์‚ดํ‘œ๋กœ ํ‘œ์‹œ๋œ๊ฐ€๋Š” ์„ ์ธ 60fps (16ms๋งˆ๋‹ค)์—์„œ ์ผ๋ถ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    boot 684m3

  • ์–‡์€ ์„  ์ค‘ ํ•˜๋‚˜๊นŒ์ง€ ํ™•๋Œ€ํ•˜๋ฉด ์ผ๋ถ€ ๋ Œ๋”๋ง์ด 60fps์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    boot f9qau

  • CPU ํ”„๋กœํŒŒ์ผ์„ ๊ฐ€์ ธ ์˜ค๋ฉด ํŠน์ • JS ๊ธฐ๋Šฅ์ด ์•„๋‹Œ "(ํ”„๋กœ๊ทธ๋žจ)"์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ CPU๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

    boot g2wbo

  • "editor.cursorBlinking": "solid" ๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋Œ€๋ถ€๋ถ„ ๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.์ฃผ๊ธฐ์ ์ธ "Update Layer Tree"/ "Paint"/ "Composite Layers"๊ฐ€ ์—ฌ์ „ํžˆ ๋ฐœ์ƒํ•˜์ง€๋งŒ 16ms๊ฐ€ ์•„๋‹Œ 500ms๋งˆ๋‹ค ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒŒ ๋„์›€์ด ๋˜๊ธธ ๋ฐ”๋ž€๋‹ค!

@joliss ๋‚ด๋ถ€ ์—์„œ ์ผ์–ด๋‚˜๋Š” ์ผ์— ๋Œ€ํ•œ ๋น ๋ฅธ ๋‹ต๋ณ€ : Chromium์—์„œ ๊ธฐ๋ณธ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด 60hz๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

์œ ์‚ฌ (๊ฑฐ์˜ ๋™์ผ) Chromium ๋ฌธ์ œ https://bugs.chromium.org/p/chromium/issues/detail?id=500259 ๋ฐ Chromium์˜ ์ถ”์  ํ•ญ๋ชฉ https://bugs.chromium.org/p/chromium/issues/detail ? id = 361587

ํ˜„์žฌ CSS ์• ๋‹ˆ๋ฉ”์ด์…˜

<strong i="11">@keyframes</strong> monaco-cursor-blink {
    50% {
        opacity: 0;
    }
    100% {
        opacity: 1;
    }
}

.cursor-blink {
    animation: monaco-cursor-blink 1s step-start 0s infinite;
}

์ตœ์‹  ์ •๋ณด

Paul Irish (Chrome guy) https://news.ycombinator.com/item?id=13941293 ์ธ์šฉ

์›น ์Šคํƒ์— ๊ตฌ์ถ• ๋œ ๊ฐ•๋ ฅํ•œ * ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๋Š” OS ํ…์ŠคํŠธ ์บ๋Ÿฟ์— ์˜์กด ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ์ž์ฒด์ ์œผ๋กœ ์ œ๊ณตํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
์ด ๊ฒฝ์šฐ VSCode๋Š” ์•„๋งˆ๋„ ์ปค์„œ๋ฅผ ๊นœ๋ฐ•์ด๋Š” ๋ฐ ๊ฐ€์žฅ ํ•ฉ๋ฆฌ์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. CSS ํ‚ค ํ”„๋ ˆ์ž„ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด์žˆ๋Š” step ํƒ€์ด๋ฐ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ 500ms๋งˆ๋‹ค ๋ถˆํˆฌ๋ช…๋„๋ฅผ ๋ณ€๊ฒฝํ•˜๋„๋ก ๋ธŒ๋ผ์šฐ์ €์— ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค. ํ•œํŽธ Chrome์€ ์•„์ง์ด๋ฅผ ์™„์ „ํžˆ ์ตœ์ ํ™”ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ http://crbug.com/361587์ž…๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ํ˜„์žฌ Chrome์€ 500ms ๊ฐ„๊ฒฉ์œผ๋กœ ๋งŒ ์ž‘์—…ํ•ด์•ผ ํ•  ๋•Œ 16ms๋งˆ๋‹ค ์ „์ฒด ๋ Œ๋”๋ง ์ˆ˜๋ช…์ฃผ๊ธฐ (์Šคํƒ€์ผ, ํŽ˜์ธํŠธ, ๋ ˆ์ด์–ด)๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Chrome์˜ ์Šคํƒ€์ผ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ž‘์—…ํ•˜๋Š” ์—”์ง€๋‹ˆ์–ด๊ฐ€์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€๋งŒ ์•ฝ๊ฐ„์˜ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ๊ฐ€์‹œ์„ฑ์ด ์ถ”๊ฐ€๋˜๋ฉด ์ˆ˜์ •์˜ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋†’์•„์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

  • ๊ฐ„๋‹จํ•œ ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ์™€ [contenteditable] ๊ธฐ๋ฐ˜์˜ ๊ธฐ๋ณธ ํŽธ์ง‘๊ธฐ๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๊ฐ€์žฅ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ ์„ธํŠธ๋กœ ํ™•์žฅ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.

Chromium ํƒญ์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ CPU ์‚ฌ์šฉ๋Ÿ‰์— ๋Œ€ํ•œ ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ

๊ทธ๋ ‡์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค (https://github.com/electron/electron/issues/7553 ์ฐธ์กฐ). ์šฐ๋ฆฌ๋Š” ์•Š๋Š” ์„ค์ • backgroundThrottling ์— false ๋™์•ˆ ์ด๋ฏธ ๋•Œ๋ฌธ์ด๋‹ค.

์ข‹์€ ๋ถ„์„์„ ์œ„ํ•ด @joliss @rebornix ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

OSX์—์„œ setInterval ๋กœ ๋Œ์•„ ๊ฐ€์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ถ”์‹  ๋‹ค์Œ์€ ์ดˆ๊ธฐ ์ปค์„œ ๊นœ๋ฐ•์ž„ ๋…ผ๋ฆฌ์ž…๋‹ˆ๋‹ค. :)
image

@rebornix ์šฐ๋ฆฌ๊ฐ€ ์–ผ๋งˆ ์ „์— -https://bugs.chromium.org/p/chromium/issues/detail?id=658894 . ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ DOM์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์„ ๋•Œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์š”์†Œ๋ฅผ ๋‹จ์ˆœํžˆ ๋‹ซ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค.

๋™์ผํ•œ CSS ์Šคํƒ€์ผ๋„ ์žˆ์ง€๋งŒ ์—ฌ๊ธฐ์„œ ์‚ฌ์šฉ๋˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

<strong i="6">@keyframes</strong> monaco-cursor-blink {
    50% {
        opacity: 0;
    }
    100% {
        opacity: 1;
    }
}

https://github.com/Microsoft/vscode/blob/master/src/vs/editor/browser/viewParts/viewCursors/viewCursors.css

์ปค์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜์— https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ํŽ˜์ด์ง€๊ฐ€ ์ˆจ๊ฒจ ์กŒ๋Š”์ง€ ์•Œ๋ ค์ฃผ๋Š” pageVisibility API๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

function handleVisibilityChange() {
  if (document.hidden) {
    // disable cursor animation with class name
  } 
  else  {
    // add back cursor animation
  }
}
document.addEventListener("visibilitychange", handleVisibilityChange, false);

์ œ์•ˆ ์—ฌ๊ธฐ๊ฐ€ ๋Œ€์‹  CPU์˜ GPU๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CSS ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค :

.cursor-blink {
    will-change: opacity;
}

ํ˜„์žฌ ๊ตฌํ˜„์—์„œ๋Š” ์—๋””ํ„ฐ๊ฐ€ ํฌ์ปค์Šค๋ฅผ ์žƒ์œผ๋ฉด ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ œ๊ฑฐํ•˜์—ฌ ์‚ถ์„ ํŽธํ•˜๊ฒŒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํŽธ์ง‘๊ธฐ์— ํฌ์ปค์Šค๊ฐ€ ์žˆ์œผ๋ฉด ํŽธ์ง‘๊ธฐ๊ฐ€ ํ‘œ์‹œ๋˜๊ณ  (์ˆจ๊ฒจ ์ง€๊ฑฐ๋‚˜ ๋ฐฐ๊ฒฝ์— ์žˆ์ง€ ์•Š์Œ) ํ™œ์„ฑ ์ƒํƒœ์ด๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์—… ์ค‘์ด๋ฉฐ (์ฝ๊ธฐ๊ฐ€ ์ข‹์€ ๊ฒฝ์šฐ)๋ณด๊ธฐ / ๋‚ด์šฉ ๋ณ€๊ฒฝ์„ ํŠธ๋ฆฌ๊ฑฐํ•˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์œ ํœด ์ƒํƒœ ์ธ ๊ฒฝ์šฐ์—๋„ ๊นœ๋ฐ•์ด๋Š” ์ปค์„œ๋ฅผ ํ‘œ์‹œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊นœ๋ฐ•์ด๋Š” ์ปค์„œ์ž…๋‹ˆ๋‹ค.

์ฒ˜์Œ์—์ด ๊ธฐ๋Šฅ์€ JavaScript๋กœ ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ ์•ฝ 1 ๋…„ ์ „์— CSS ์• ๋‹ˆ๋ฉ”์ด์…˜์œผ๋กœ ์ „ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค. @alexandrudima๊ฐ€ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด OSX์—์„œ JS๋กœ ๋Œ์•„๊ฐ€๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@camwest ๋Š” API๊ฐ€ ๋งค๋ ฅ์ ์ด๋ฉฐ ์œ ์ผํ•œ ๋ฌธ์ œ๋Š” ํ˜ธํ™˜์„ฑ์ž…๋‹ˆ๋‹ค (์Šฌํ”„๊ฒŒ๋„ Safari).

@mehas will-change ๋Š” ์œ ๋งํ•ฉ๋‹ˆ๋‹ค. ์‹œ๋„ํ•ด ๋ณด์•˜์ง€๋งŒ์ด ๊ฒฝ์šฐ Chromium์ด ์ตœ์ ํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Dev Tools์—์„œ Paint Flashing ์˜ต์…˜์„ ์ผœ๋ฉด์ด ๊นœ๋ฐ•์ด๋Š” ์ปค์„œ๊ฐ€ ์ „ํ˜€ ๋‹ค์‹œ ๊ทธ๋ ค์ง€์ง€ ์•Š์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@jlukic @bcherny ๊ท€ํ•˜์˜ ์ œ์•ˆ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ตœ์ ํ™”ํ•˜๋ ค๋Š” ๊ฒƒ์€ ์ปค์„œ๊ฐ€ ํ‘œ์‹œ๋˜๊ณ  ํ™œ์„ฑํ™”๋˜๊ณ  ๊นœ๋ฐ•์ผ ๋•Œ์ด๋ฏ€๋กœ ๊ฐ€์‹œ์„ฑ ๊ฒ€์‚ฌ๊ฐ€ ์žˆ์–ด๋„ ์—ฌ์ „ํžˆ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹น์‹  ๋ง์ด ๋งž์Šต๋‹ˆ๋‹ค. ๊ฐ€์‹œ์„ฑ์„ ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์ฐฝ์„ ์Šคํฌ๋กคํ•˜์—ฌ ๊นœ๋ฐ•์ด๋Š” ์ปค์„œ๋ฅผ ๋ณด์ด์ง€ ์•Š๊ฒŒํ•˜๋ฉด ์ตœ์ ํ™”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ณต์ •ํ•˜๊ฒŒ ๋งํ•˜๋ฉด ๋ชจ๋‚˜์ฝ”๋Š” ์ •๋ง, ์ •๋ง, ์ •๋ง ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. :)

@rebornix will-change๋Š” ๋‚ด ํ”„๋กœ์ ํŠธ์—์„œ ์ž‘๋™ํ–ˆ์œผ๋ฉฐ CPU ์‚ฌ์šฉ๋Ÿ‰์ด ์™„์ „ํžˆ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚ด ํ‚ค ํ”„๋ ˆ์ž„์€ ๋ถˆํˆฌ๋ช…๋„๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ์š”์†Œ์˜ ์ƒ‰์ƒ์„ '์ƒ์†'์—์„œ 'ํˆฌ๋ช…'์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ์ € ์ž ๋ณต ์ž์ผ ๋ฟ์ด๊ณ  ์ด๊ฒƒ์ด ์š•์„ค๋กœ ๊ฐ„์ฃผ๋œ๋‹ค๋ฉด ๋ฏธ์•ˆํ•˜์ง€๋งŒ 2 ํ”„๋ ˆ์ž„ ์• ๋‹ˆ๋ฉ”์ด์…˜ gif๊ฐ€ ์†์ž„์ˆ˜๋ฅผ ์“ฐ์ง€ ์•Š์„๊นŒ์š”? ๋‚˜๋Š” ์ด๊ฒƒ์„ ๊ฒฐ์ •์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์™„์ „ํžˆ ํ™•์‹ ํ•˜์ง€ ๋ชปํ•˜์ง€๋งŒ KHTML์กฐ์ฐจ๋„ Chrome์œผ๋กœ ๋ณ€ํ˜•๋˜๊ธฐ ํ›จ์”ฌ ์ „์— ์ด๋ฏธ ์ตœ์ ํ™” ๋œ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@eteeselink ๋Š” ํฅ๋ฏธ๋กœ์šธ ์ˆ˜ ์žˆ์ง€๋งŒ ์ปค์„œ ์ƒ‰์ƒ์„ ๋ณ€๊ฒฝํ•ด์•ผํ•˜๊ณ  ํ™•๋Œ€ / ์ถ•์†Œ ๋“ฑ์ด ์‚ฌ์†Œํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ ๋™์•ˆ js๋กœ ๋‹ค์‹œ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@matthiasg Ahyes, ํ™•๋Œ€ / ์ถ•์†Œ๋ฅผ ์žŠ์–ด ๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ…Œ๋งˆ ์ƒ‰์ƒ์— ๋”ฐ๋ผ ๊นœ๋ฐ•์ด๋Š” GIF๋ฅผ ์ž๋™ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋„ˆ๋ฌด ์–ด๋ ต์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๋‹ค. GIF ํ”ฝ์…€ ๋ฐ์ดํ„ฐ๋Š” LZW๋กœ ์ธ์ฝ”๋”ฉ๋˜์ง€๋งŒ ํŒ”๋ ˆํŠธ ๋ฐ์ดํ„ฐ๋Š” ์••์ถ•๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ ๋ฒ ์ดํ‚น ๋œ ํŒŒ์ผ์—์„œ ๋ช‡ ๋ฐ”์ดํŠธ๋ฅผ ํŒจ์น˜ํ•˜๋Š” ๋ฌธ์ œ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๊ทธ๋ ‡๊ฒŒ gif๋ฅผ ํ™•๋Œ€ํ•˜๋ฉด ํ๋ฆฟํ•˜๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ด๋ฏ€๋กœ ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ด๊ฒƒ์€ ๋‚˜์œ ์ ‘๊ทผ ๋ฐฉ์‹ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ GIF ์บ๋Ÿฟ์„ ํ™•๋Œ€ / ์ถ•์†Œ ํ•  ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด ๋‚ผ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ƒ‰์ƒ์„ ์ทจํ•˜๊ณ  ๊นœ๋ฐ•์ด๋Š” ์บ๋Ÿฟ ์• ๋‹ˆ๋ฉ”์ด์…˜ GIF ๋ฐ์ดํ„ฐ URL์„ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ณต ํ•  ๊ฒƒ์„ ์•ฝ์†ํ•ฉ๋‹ˆ๋‹ค.

@eteeselink ์–ด์จŒ๋“  ๋ฐ”๋‹๋ผ JS, ์•„๋งˆ๋„ PHP์™€ ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ง›์„ ์ ˆ๋Œ€์ ์œผ๋กœ ์š”์ง€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์›น ์ „์ฒด์—์„œ ์ˆ˜ ํ†ค์˜ ์‚ฌ์šฉ์„ ์–ป์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์›๋ž˜ ์ €์ž๋ฅผ ์ธ์ •ํ•ด์•ผํ•˜๋Š” ๋ผ์ด์„ ์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋‹น์‹ ์€ ๋งค์šฐ ์œ ๋ช… ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@eteeselink ์šฐ๋ฆฌ๊ฐ€ ๋ฒฝ์—์„œ ๋ฒ—์–ด๋‚œ ์†”๋ฃจ์…˜์„ ์ œ์•ˆํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์บ๋Ÿฟ์„ ๋Œ€์‹  <blink></blink> ๊ฐ์‹ธ๋Š” ๊ฒƒ์ด ์–ด๋–จ๊นŒ์š”? :๋ˆˆ์ง“:

์‚ฌ๋žŒ๋“ค์ด ์‹ค์งˆ์ ์ธ ๊ฐœ์„ ์„ ์‹œ๋„ํ•˜๋Š” ๋ฌธ์ œ์™€ PR์— ๋Œ€ํ•ด ์“ธ๋ชจ์—†๋Š” ๋ฐœ์–ธ์„ํ•˜๋Š” ๋ฐ Reddit ์—ฌ๋‹จ์— ํ•ฉ๋ฅ˜ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

ํŽธ์ง‘๊ธฐ์— ํฌ์ปค์Šค๊ฐ€ ์žˆ์œผ๋ฉด ํŽธ์ง‘๊ธฐ๊ฐ€ ํ‘œ์‹œ๋จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ž˜๋ชป๋œ ๊ฐ€์ •์ž…๋‹ˆ๋‹ค. ์ดˆ์ ์„ ๋งž์ถ”์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์ฐฝ ์œ„๋กœ ์ฐฝ์„ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์€ ์‚ฌ์†Œํ•œ ์ผ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์•„๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• :

  • "ํ•ญ์ƒ ๋งจ ์œ„์— ๊ทธ๋ฆฌ๊ธฐ"WM ํžŒํŠธ
  • ๊ฐ€์ƒ ๋ฐ์Šคํฌํ†ฑ๊ฐ„์— ์ฐฝ์ด ์ด๋™ ๋  ๋•Œ (์Šคํƒ ์ˆœ์„œ๊ฐ€ ์ „์—ญ์ด๋ฏ€๋กœ ์ฐฝ์ด ์ด์ „ ๋ฐ์Šคํฌํ†ฑ์—์„œ ๋งจ ์œ„์—์žˆ๋Š” ๊ฒฝ์šฐ ์ƒˆ ๋ฐ์Šคํฌํ†ฑ์— ์žˆ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ).

๋‘˜ ๋‹ค ์ž์ฒด์ ์œผ๋กœ ๋งค์šฐ ์ผ๋ฐ˜์ ์ด์ง€๋งŒ ๋ฐ˜๋“œ์‹œ ํ•ญ์ƒ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

@ o11c ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, ๊ธ€์„ ์“ธ ๋•Œ ๋‚ด ๊ฐ€์ •์ด ๋„ˆ๋ฌด ๊ฑฐ์น  ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์ดˆ์ ์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์€ ๋ณด์ด๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ฐฝ์„ ์Šคํฌ๋กคํ•˜๋Š” ๊ฒƒ์€ ํ•œ ๊ฐ€์ง€ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค (๊ฐ™์€ ๋‹จ๋ฝ์—์„œ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค :(). focus + visible์ด ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๋ชจ๋‘ ์™„ํ™”๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

setTimeout ๋˜๋Š” setInterval์ด ์•„๋งˆ๋„ requestIdleCallback๋ณด๋‹ค์ด ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋” ์ ํ•ฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. requestIdleCallback์˜ ํƒ€์ด๋ฐ์€ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์œผ๋ฉฐ JS์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์€ ์ €๋ ดํ•˜๋ฏ€๋กœ ๊ฐ€๋” ํƒ€์ด๋จธ๋ฅผ ์˜ˆ์•ฝํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ „์˜. https://gist.github.com/esprehn/afec30fbc655bba6bb8f3f67c28beef4

๋˜ํ•œ์ด ์บ๋Ÿฟ ์• ๋‹ˆ๋ฉ”์ด์…˜์€ ๋ถ€๋“œ๋Ÿฌ์šด ํŽ„์Šค ํšจ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ด์ง€ ๋งŒ ๋ธŒ๋ผ์šฐ์ €์˜ ์‹œ์Šคํ…œ ์ปค์„œ (์˜ˆ : <input> ๋˜๋Š” <textarea> ๋‚ด๋ถ€์˜ ์ปค์„œ)๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ์ผœ๊ธฐ / ๋„๊ธฐ ๋งŒ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. . Mac๊ณผ Linux์˜ ๊ธฐ๋ณธ ์ปจํŠธ๋กค์€ ๋น„์Šทํ•˜๊ฒŒ ๊นœ๋ฐ•์ž…๋‹ˆ๋‹ค. ๋œ ์˜ˆ์˜์ง€ ๋งŒ ์ƒ๋‹นํžˆ ์ ์€ ์ „๋ ฅ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @esprehn , ๋ฐ”๋กœ ์ง€๊ธˆ ๋‚ด๊ฐ€ ํ”Œ๋žซ ๊นœ๋นก์ž„์„ ์œ„ํ•ด ํ•œ ์ผ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, ๊ทธ๊ฒƒ์€ ์• ๋‹ˆ๋ฉ”์ด์…˜๋งŒํผ ์˜ˆ์˜์ง€ ์•Š์œผ๋ฉฐ ease-in-out ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋“œ๋Ÿฝ๊ฒŒ / ํ™•์žฅ ๊นœ๋ฐ•์ด๋Š” ์ปค์„œ๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ๋„ ์•„๋‹™๋‹ˆ๋‹ค.

@eteeselink ๊ธฐ๋‹ค๋ ค, 1px gif๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์–ด์จŒ๋“  ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๋ธ”๋Ÿฌ๋Š” ๋ฌธ์ œ๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ : https://jsfiddle.net/mrkev/stxq613s/1/

๊ณง ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊นœ๋ฐ•์ž„ ์บ๋Ÿฟ ์ƒ์„ฑ๊ธฐ๋ฅผ๋ณด๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.)

@mrkev your 1px gif as data uri : data : image / gif; base64 , R0lGODlhAQABAPAAAAAAAP /// yH / C05FVFNDQVBFMi4wAwEAAAAh + QQFMgABACwAAAAAAAAQABAAACAkwBACH5BAUyAAOALAAAAABABAC

ํŠธ์œ— ๋‹ด์•„ ๊ฐ€๊ธฐ gif๋Š” ์ด๋ก ์ƒ ์ƒ‰์ƒ ํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— "on"ํ”„๋ ˆ์ž„์—์žˆ๋Š” ํ”ฝ์…€ ๊ฒ€์€ ์ƒ‰์„ ์ฐพ๋Š” 3 ๋ฐ”์ดํŠธ๋ฅผ ์ฐพ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ต์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๋‹ค (ํ”„๋ ˆ์ž„์— ์ €์žฅ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํ—ค๋”๋ฅผ ๋„ˆ๋ฌด ๊นŠ์ˆ™์ด ์ง€๋‚˜๊ฐˆ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค). ). ๋‚ด์ผ ์—ฌ๊ฐ€ ์‹œ๊ฐ„์„ ์ฐพ์œผ๋ฉด ๋” ๊นŠ์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“  ์ž ์ด ํ•„์š”ํ•œ Welp๋Š” ์ด๊ฒƒ์„ ์กฐ๊ธˆ ๋” ํƒ๊ตฌํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. gif๋Š” ํ•ญ์ƒ 14 ๋ฒˆ์งธ ๋ฐ”์ดํŠธ์—์„œ ์‹œ์ž‘ํ•˜๋Š” ์ „์—ญ ์ƒ‰์ƒ ํ‘œ ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—

screen shot 3

์ด์ œ ์ •๋ง ์„ฑ๊ฐ€์‹  ๊ฒƒ์€ base64์—์„œ ๊ฐ ์ˆซ์ž๊ฐ€ 6 ๋น„ํŠธ ๋งŒ ์ธ์ฝ”๋”ฉํ•˜๋ฏ€๋กœ ์ƒํ™ฉ์ด ์ œ๋Œ€๋กœ ์ •๋ ฌ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ˆซ์ž 18์˜ ์ตœํ•˜์œ„ ๋น„ํŠธ์ด๋ฉฐ ์ˆซ์ž 22์˜ ์ตœ์ƒ์œ„ ๋น„ํŠธ๋Š” ํ•ด๋‹น gif์—์„œ ๊ฒ€์€ ์ƒ‰์„ ์ธ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณธ์งˆ์ ์œผ๋กœ ์œ„์น˜ 18-22์—์„œ ๋ฌธ์ž [A-P] [A-/] [A-/] [A-/] [P,f,v,/] ์˜ ์ผ๋ถ€ ์ˆœ์—ด์€ ๋ชจ๋“  ์ƒ‰์ƒ์œผ๋กœ ํ•ด๋‹น ํ”ฝ์…€์„ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ž„์˜์˜ ์ƒ‰์ƒ์— ๋Œ€ํ•œ GIF์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ณธ์งˆ์ ์œผ๋กœ 18-22 ๋ฌธ์ž์—์žˆ๋Š” ๊ฒƒ์„ G8ABf (์œ„์—์„œ ์–ธ๊ธ‰ ํ•œ ๊ธฐ์ค€์— ๋งž์Œ)๋กœ ๋Œ€์ฒดํ–ˆ์Šต๋‹ˆ๋‹ค.

https://jsfiddle.net/mrkev/stxq613s/7/

RGB๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ด gif๋ฅผ ํ•ด๋‹น ์ƒ‰์ƒ์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ด ๋‚˜์˜์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๋‹ค (:

๋‚˜๋Š” 7 ์‹œ๊ฐ„ ์•ˆ์— ์ˆ˜์—…์„ ๋“ฃ๋Š”๋‹ค. ๋‚˜๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์ž์‹ ์„ ์ฐข์–ด ๋ฒ„๋ฆฌ๊ณ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์–ด์จŒ๋“  ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๋ฏธ hex-to-base64 ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ–ˆ์œผ๋ฉฐ ๋น ๋ฅธ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ ๊ฒ€์ƒ‰๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

// takes color as string 'RRGGBB'
var generate_cursor_image = color => {
  var gif = '47494638396101000100F00000' + color + '00000021FF0B4E45545343415045322E30030100000021F90405320001002C00000000010001000002024C010021F90405320001002C00000000010001000002024401003B'
  return 'data:image/gif;base64,' + btoa(gif.match(/\w{2}/g).map(a => String.fromCharCode(parseInt(a, 16))).join(""))
}

๋ชจ๋‘ ์ž˜ ์ž์š”!

์  ์žฅ, @mrkev ๊ฐ€ ๋‚˜๋ฅผ ์ด๊ฒผ์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“ , ์—ฌ๊ธฐ์— ๋™์ผํ•œ ๊ตฌํ˜„์ด ์žˆ์Šต๋‹ˆ๋‹ค.
https://jsfiddle.net/a6g4ob7h/

์ผ์น˜ ๋ฐ ๋งคํ•‘์ด ์ง„ํ–‰๋˜์ง€ ์•Š๊ณ  btoa ๋งŒ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ธˆ ๋” ๋น ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์†๋„๊ฐ€ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ •๋ง๋กœ ๊ถ๊ธˆํ•œ ๊ฒƒ์€ ์ด๊ฒƒ์ด ์†๋„๋ฅผ ๋†’์ด๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ํ•  ์ข‹์€ ์„ค์ •์€ ์—†์ง€๋งŒ ์• ๋‹ˆ๋ฉ”์ด์…˜ GIF๋„ 60fps๋กœ ๋‹ค์‹œ ๋ Œ๋”๋ง ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™•๋Œ€ / ์ถ•์†Œํ•˜๊ณ  ์ง์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ์ปค์„œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ SVG๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ( <animate> ์š”์†Œ๋Š” ์ด๋ฏธ SVG 1.0 ์‚ฌ์–‘์˜ ์ผ๋ถ€์˜€์Šต๋‹ˆ๋‹ค.)

out

๋‚˜๋ฅผ ์œ„ํ•ด ๊ทธ๊ฒƒ์€ ๋Œ€๋ถ€๋ถ„ 0์œผ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค (cpu ์‚ฌ์šฉ๋Ÿ‰์€ ์ฒซ ๋ฒˆ์งธ ์—ด์ž…๋‹ˆ๋‹ค-OSX 10.12.3-MacBook Pro Retina, 15-inch, Late 2013)

์ปค์„œ์™€ ๊ด€๋ จํ•˜์—ฌ ๊ธฐ๋ณธ ์„ค์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋ฌด๋„ Linux์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ Wayland (Ivy Bridge Graphics)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” GNOME Shell์—์„œ ์•ฝ 5 ~ 7 %์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

blink ์ปค์„œ ๊นœ๋ฐ•์ž„ ์Šคํƒ€์ผ์— ๋Œ€ํ•ด setInterval ๋กœ ๋Œ์•„๊ฐ€์„œ์ด๋ฅผ ์™„ํ™”ํ•˜๋Š” PR # 23121์„ ๋ณ‘ํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค. Mac mini์—์„œ๋Š” CPU ์‚ฌ์šฉ๋Ÿ‰์ด 5.9 %์—์„œ 0.9 %๋กœ ๋–จ์–ด์ง‘๋‹ˆ๋‹ค.

๋„ค์ดํ‹ฐ๋ธŒ๋กœ ์ „ํ™˜ํ•˜๊ณ  OS๊ฐ€ ์ปค์„œ๋ฅผ ๋ฌด๋ฃŒ๋กœ ์ œ๊ณตํ•˜๋„๋ก ๊ณ ๋ คํ•œ ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@justjoeyuk ์œ„์˜ @rebornix์˜ ์ธ์šฉ๋ฌธ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

@justjoeyuk ๋Œ€์‹  ์™„์ „ํžˆ ๋„ค์ดํ‹ฐ๋ธŒ๊ฐ€ ์•„๋‹Œ ์›น ์Šคํƒ ๊ธฐ๋ฐ˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ œ์•ˆํ•˜๋Š” ๊ฒฝ์šฐ : VSCode์™€ ๊ฐ™์ด ํ…Œ๋งˆ๊ฐ€ ๋งค์šฐ ํฌ๊ณ  DPI์— ๋…๋ฆฝ์  ์ธ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ์š”๊ตฌ ์‚ฌํ•ญ์„ ํƒ์ƒ‰ ํ•  ๋•Œ ๋„ค์ดํ‹ฐ๋ธŒ๊ฐ€ ์•„๋‹Œ ์ปค์„œ ๋Œ€์ฒด๊ฐ€ ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ๊ด€์—†์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ธด๊ธ‰ ์†๋ณด! ๋งˆ์ดํฌ๋กœ ์†Œํ”„ํŠธ๋Š” ๋”์ฐํ•˜๊ฒŒ ์ฝ”๋”ฉ ๋œ ๋Š๋ฆฐ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ์œผ๋ฉฐ, ๋ฌธ์ œ๋Š” MacOS 10์—์„œ ๋”์šฑ ๋‘๋“œ๋Ÿฌ์ง‘๋‹ˆ๋‹ค.

๋ˆ„๊ฐ€ ์ถ”์ธกํ–ˆ์„๊นŒ์š”?

@LandonPowell ๋ฌธ์ œ์— ๋Œ€ํ•œ ์‹ค์ œ ํ† ๋ก ์„ ์˜ค์—ผ์‹œํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ reddit / hackernews ์—ฌ๋‹จ์€ ์šฐ์Šค๊ฝ ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

ํ„ฐ๋ฏธ๋„ ์ปค์„œ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ์ด๋กœ ์ธํ•ด CPU ์ฃผ๊ธฐ๋„ ๊ธ‰์ฆํ•ฉ๋‹ˆ๊นŒ?

@mehas

CPU ๋Œ€์‹  GPU๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CSS ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋ Œ๋”๋งํ•˜๊ธฐ์œ„ํ•œ ์ œ์•ˆ :

CPU์—์„œ GPU๋กœ ๋ถ€ํ•˜๋ฅผ ์ด๋™ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ์ˆจ ๊น๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๊ทธ๊ฒƒ์„ ๊ณ ์น˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

ํ—‰ํ—‰

CPU์—์„œ GPU๋กœ ๋ถ€ํ•˜๋ฅผ ์ด๋™ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ์ˆจ ๊น๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๊ทธ๊ฒƒ์„ ๊ณ ์น˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

CPU ๋ถ€ํ•˜ ๊ฐ€ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. GPU๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ตœ์ ํ™”ํ•˜๋ฉด์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

(์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ๊ฐ€์žฅ ์ข‹์€ ์ˆ˜์ •์ด๋ผ๊ณ  ์ œ์•ˆํ•œ ํŠน์ • ์ˆ˜์ •์— ๋Œ€ํ•œ ์งˆ๋ฌธ๊ณผ๋Š” ๋ณ„๊ฐœ์ž…๋‹ˆ๋‹ค)

๊ทธ๊ฒƒ์„ ์žฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. vim ์—๋ฎฌ๋ ˆ์ด์…˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

GPU๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ตœ์ ํ™”ํ•˜๋ฉด์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ ๋ถˆํ•„์š”ํ•œ GPU๋กœ๋“œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ์˜ ํ”„๋กœ์„ธ์„œ์— ๋ถ€ํ•˜๊ฐ€ ์žˆ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๋ฉด ์œ ์‚ฌํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ •๋ง ์ˆ˜์ •์ด ์•„๋‹™๋‹ˆ๋‹ค ๐Ÿ˜›

์˜ˆ์ˆ˜๋‹˜์€ ์•„ํ”„๋ฆฌ์นด์—์„œ ํƒœ์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.

์ฒœ๋งŒ์—์š”.

์ปค์„œ์— gif๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ทธ๋ž˜๋„ ๋ถˆํ•„์š”ํ•œ GPU๋กœ๋“œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋น„์Šทํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค

๋งž์ง€๋งŒ ์œ ํœด ์ƒํƒœ์—์„œ๋„ CPU ์‚ฌ์šฉ๋Ÿ‰์ด ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

@ efroim102 https://github.com/Microsoft/vscode/issues/22900#issuecomment -288832322

์˜ค, ์‹  ์ด์‹œ์—ฌ,์ด ๋…ผ์Ÿ์€ ๋ชฉํ‘œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ฒฐ์ •๋  ๋•Œ๊นŒ์ง€ ๊ณ„์† ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  1. ๋ฐฐํ„ฐ๋ฆฌ ์†Œ๋ชจ๋Ÿ‰ ๊ฐ์†Œ
  2. CPU ๊ฒฝํ•ฉ ๊ฐ์†Œ

์ž ์‹œ ๋™์•ˆ (1)์„ ๊ฐ€์ •ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ (a) ๊ฐ™์€ ์–‘์˜ ์—๋„ˆ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€, (b) ๋” ์ ์€ ์—๋„ˆ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€, (c) ๋” ๋งŽ์€ ์—๋„ˆ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•ด CPU์—์„œ GPU๋กœ ์˜คํ”„๋กœ๋“œํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ข€ ๋” ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ์  ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ „๋ฌธ ์ง€์‹์ด ์—†์œผ๋ฏ€๋กœ ์–ด๋Š ๊ฒƒ์ด ์‚ฌ์‹ค์ธ์ง€ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ GPU ์˜คํ”„๋กœ๋“œ๊ฐ€ (b)๋กœ ์ด์–ด์ง„๋‹ค ๊ณ  ๊ฐ€์ • ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์™„๋ฒฝํ•˜์ง€๋Š” ์•Š์ง€๋งŒ Chromium์ด ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋™์•ˆ์ด ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ตฌ ํ•  ์ˆ˜์žˆ์„๋งŒํผ ์ ˆ์ถฉ์•ˆ์ด ํ—ˆ์šฉ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ VSCode ํŒ€์ด์ด ๋ฌธ์ œ๋ฅผ ํ•œ ๋ฒˆ์— ๊ณ ์น  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ๊ฒฝ์šฐ ์˜คํ”„๋กœ๋“œ๋Š” ์„ ํƒ์˜ ์—ฌ์ง€๊ฐ€ ์—†์„ ๊ฒƒ์ด๋ฉฐ ์žฅ๊ธฐ์ ์ธ ์ˆ˜์ •์„ ์ถ”๊ตฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค (์•„์ฃผ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋”๋ผ๋„). ์ ์–ด๋„ ๋‚ด ์†Œ๊ฒฌ์œผ๋กœ๋Š”์ด ๋ฌธ์ œ์— ๊ด€์‹ฌ์ด ์žˆ๊ณ  ์ข…์†์„ฑ์ด ์˜๋„ ํ•œ ์ˆ˜์ •์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•  ๋•Œ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ์ง€์ •๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ฉด ์ถฉ๋ถ„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

(๋‚˜๋Š” ์–ด๋–ค ์†”๋ฃจ์…˜์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ / ์ฐจ๋‹จ๋˜๋Š”์ง€์— ๋Œ€ํ•œ ๋ฏธ๋ฌ˜ํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ํ˜ผ๋™ํ–ˆ๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€๋งŒ, ์‚ฌ๋žŒ๋“ค์ด ์†”๋ฃจ์…˜ ๊ณต๊ฐ„์œผ๋กœ ๋›ฐ์–ด ๋“œ๋Š” ๋Œ€์‹  ํ•ด๊ฒฐํ•˜๊ณ ์žํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์ฃผ์žฅํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ํฌ๋งํ•ฉ๋‹ˆ๋‹ค.)

์–ด๋Š ์ชฝ์ด๋“  ๋ Œ๋”๋ง ๋ถ€ํ•˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด GPU๊ฐ€ ๋” ์ž˜ ์žฅ์ฐฉ๋˜์–ด ์žˆ์ง€ ์•Š์„๊นŒ์š”? ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ ๊ทธ๊ฒƒ์ด ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” CPU์™€ GPU๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ์šฐ์„  ์ˆœ์œ„๋ฅผ๋‘๊ณ  ๊ทธ๋ž˜ํ”ฝ ๊ด€๋ จ ๊ธฐ๋Šฅ์ด ๊ทธ๋ž˜ํ”ฝ ๊ด€๋ จ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. CPU์˜ ์ด๋“์€ GPU์˜ 1 : 1 ์†์‹ค์ด ์•„๋‹ˆ๋ฉฐ ๊ทธ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์ด ์‹œ์ ์—์„œ (Chromium์˜ ๋ฒ„๊ทธ๊ฐ€ ํŒจ์น˜ ๋  ๋•Œ๊นŒ์ง€) ๋…ผ์Ÿ์ด ์žˆ์ง€๋งŒ ํ˜„์žฌ ์†”๋ฃจ์…˜์ด ์—ฌ์ „ํžˆ CPU๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์†Œ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค (๋ฌด๊ฒŒ๋Š” ํ›จ์”ฌ ์ ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ ).

๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋ฐ์Šคํฌํ†ฑ์—์„œ ์›น ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๊ฐ ํ”„๋กœ๊ทธ๋žจ๋งˆ๋‹ค ์™„์ „ํ•œ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ œ๊ณตํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
์–ธ๊ธ‰ ํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ ์—ฌ๊ธฐ ์ €๊ธฐ์—์„œ ๋™์ผํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ๋ณต์ œ๋ฉ๋‹ˆ๋‹ค.

๋ฒ ์–ด ๋ฉ”ํƒˆ๋กœ ๋Œ์•„ ๊ฐ€์•ผํ•ฉ๋‹ˆ๋‹ค.

์ถ”์‹  : JScript๋Š” Obj-C๊ฐ€ ๊ทธ๋žฌ์–ด ์•ผํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ 10 ๋…„ ์ „์— ๋ฒ„๋ ค ์กŒ์–ด ์•ผํ–ˆ์Šต๋‹ˆ๋‹ค. Apple์ด ๋ถ€ํ™œํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋ง์ž…๋‹ˆ๋‹ค.
PPS : ^^^^ ์ด๊ฒƒ์€ ํญ์–ธ์ž…๋‹ˆ๋‹ค.

PPS : ^^^^ ์ด๊ฒƒ์€ ํญ์–ธ์ž…๋‹ˆ๋‹ค.

@ bit2shift ์‹ค์ œ๋กœ

@ bit2shift- ์ผ๋ถ€ ๋ถ€๋ถ„์— ๋™์˜ํ•˜์ง€๋งŒ (๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ฐ˜ ์•ฑ์ด ์‹ค์ œ ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ์— ๋น„ํ•ด "๋„ค์ดํ‹ฐ๋ธŒ"๋ผ๊ณ  ๋Š๊ปด์ง€์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค๊ณผ ๊ฐ™์€) "๋ฒ ์–ด ๋ฉ”ํƒˆ"์ˆ˜์ค€์€ ์–ผ๋งˆ๋‚˜ ๋‚ฎ์Šต๋‹ˆ๊นŒ? ๊ธฐ๊ณ„ ์ฝ”๋“œ? ์–ด์…ˆ๋ธ”๋ฆฌ์–ด? ์”จ? C ++? ์”จ#? ๊ธฐ์ˆ  ์Šคํƒ์— ๊ด€๊ณ„์—†์ด ํ•ญ์ƒ ์—ฌ๋Ÿฌ ๊ณ„์ธต์˜ ์ถ”์ƒํ™”๊ฐ€์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์–ธ๊ธ‰ ํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ ์—ฌ๊ธฐ ์ €๊ธฐ์—์„œ ๋™์ผํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ๋ณต์ œ๋ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ NuGet ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  C # ์•ฑ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์–ด์…ˆ๋ธ”์€ ์•ฑ์— ๋กœ์ปฌ์ž…๋‹ˆ๋‹ค. .NET Core๋Š” ํ”„๋ ˆ์ž„ ์›Œํฌ์˜ ๋งŽ์€ ๋ถ€๋ถ„์„ NuGet ํŒจํ‚ค์ง€๋กœ ๋ฐฐํฌํ•˜๊ธฐ๋„ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ•จ๊ป˜ ์™„์ „ํ•œ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ œ๊ณตํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ธฐ์ˆ ์ ์œผ๋กœ๋Š” ๋ณ„๋„์˜ ๋ธŒ๋ผ์šฐ์ € ๋Ÿฐํƒ€์ž„์„ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€์—†๋Š” Edge ์—”์ง„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Internet Explorer ๋Š” ๊ฑฐ์˜ 20 ๋…„ ์ „์— HTML ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋น„์Šทํ•œ ์ผ์„ํ–ˆ์Šต๋‹ˆ๋‹ค . ๋˜ ๋‹ค๋ฅธ ์˜ˆ๋Š” ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ OS์˜ ๊ธฐ๋ณธ JS ์—”์ง„์„ ์‚ฌ์šฉํ•˜๋Š” React Native์ž…๋‹ˆ๋‹ค. JavaScript ๊ธฐ๋ฐ˜ ์•ฑ์˜ ๊ฒฝ์šฐ Windows ์šฉ React Native์™€ ๊ฐ™์€ ๊ฒƒ์ด ๋„ค์ดํ‹ฐ๋ธŒ UI ์œ„์ ฏ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋” ๋„ค์ดํ‹ฐ๋ธŒ์ฒ˜๋Ÿผ ๋Š๊ปด์ง€๋ฏ€๋กœ ์›น ๊ธฐ์ˆ ๋ณด๋‹ค๋Š” ๋ฏธ๋ž˜ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ—‰ํ—‰

(...) "๋ฒ ์–ด ๋ฉ”ํƒˆ"์€ ์–ผ๋งˆ๋‚˜ ๋‚ฎ์€ ์ˆ˜์ค€์ž…๋‹ˆ๊นŒ? ๊ธฐ๊ณ„ ์ฝ”๋“œ? ์–ด์…ˆ๋ธ”๋ฆฌ์–ด? ์”จ? C ++? ์”จ#?

๊ธฐ๊ณ„ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ ํ•  ์ˆ˜์žˆ๋Š” ๋ชจ๋“  ์–ธ์–ด ( source -> ELF/PE ๊ณ„์‚ฐ)๋Š”์ด ์ปจํ…์ŠคํŠธ์—์„œ "๋ฒ ์–ด ๋ฉ”ํƒˆ"๋กœ ๊ฐ„์ฃผ๋˜๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ ์ถ”์ƒํ™” ๊ณ„์ธต์€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Internet Explorer๋Š” ๊ฑฐ์˜ 20 ๋…„ ์ „์— HTML ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋น„์Šทํ•œ ์ผ์„ํ–ˆ์Šต๋‹ˆ๋‹ค.

mshta.exe ์—์„œ์™€ ๊ฐ™์ด "์œ ์‚ฌํ•œ ๊ฒƒ"์€ 90 ๋…„๋Œ€๋ถ€ํ„ฐ system32์—์žˆ๋Š” mshtml.dll ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์˜ˆ๋Š” ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ OS์˜ ๊ธฐ๋ณธ JS ์—”์ง„์„ ์‚ฌ์šฉํ•˜๋Š” React Native์ž…๋‹ˆ๋‹ค. JavaScript ๊ธฐ๋ฐ˜ ์•ฑ์˜ ๊ฒฝ์šฐ Windows ์šฉ React Native์™€ ๊ฐ™์€ ๊ฒƒ์ด ๋„ค์ดํ‹ฐ๋ธŒ UI ์œ„์ ฏ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋” ๋„ค์ดํ‹ฐ๋ธŒ์ฒ˜๋Ÿผ ๋Š๊ปด์ง€๋ฏ€๋กœ ์›น ๊ธฐ์ˆ ๋ณด๋‹ค๋Š” ๋ฏธ๋ž˜ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฐ์Šคํฌํ†ฑ JS ์•ฑ์—์„œ ๊ณ ์„ฑ๋Šฅ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์†์— ์ถฉ๋ถ„ํ•œ ์‹œ๊ฐ„์ด์žˆ๋Š” ์‚ฌ๋žŒ์€ LLVM์— ๋Œ€ํ•œ ํ”„๋ŸฐํŠธ ์—”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
์ž„์˜์˜ ์ฝ”๋“œ ์Šค ๋‹ˆํŽซ์„ ์‹คํ–‰ํ•  ์ˆ˜์žˆ๋Š” ๋Šฅ๋ ฅ์„ ์žƒ๊ฒŒ๋˜์ง€๋งŒ ๋ณด์•ˆ ๊ด€์ ์—์„œ ๋ณด๋ฉด ์ด์ ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

/์‹ค

์ด ์‹ค์„ ํƒˆ์„ ์‹œํ‚ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ์ปค์„œ๊ฐ€ ๊นœ๋ฐ•์ด๋Š” ํŠน์ • ์„ฑ๋Šฅ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ฌธ์ œ์ด๋ฉฐ JS ๊ธฐ๋ฐ˜ ๋ฐ์Šคํฌํ†ฑ ์•ฑ ๊ฐœ๋ฐœ์˜ ์ผ๋ฐ˜์ ์ธ ์žฅ์ ์„ ๋…ผ์˜ ํ•  ์žฅ์†Œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ํญ์–ธ์— ๊ด€์‹ฌ์ด์—†๋Š” ์‚ฌ๋žŒ๋“ค์˜ ์šฐํŽธํ•จ์„ ์ŠคํŒธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

2px * 10px ํฌ๊ธฐ์˜ <input type=text> ๋ฅผ ์ปค์„œ๊ฐ€์žˆ๋Š” ๊ณณ์— ๋‘๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ์ด๋ ‡๊ฒŒํ•˜๋ฉด <input> : P <blink></blink> ์˜ ๊ธฐ๋ณธ ๊นœ๋ฐ•์ด๋Š” ์ปค์„œ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ์ด ๋ฌธ์ œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์‹ฌ๊ฐํ•œ ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. VSCode๊ฐ€ ์œ ํœด ์ƒํƒœ ์ผ ๋•Œ (์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์ง€ ์•Š์Œ) ๊ฑฐ์˜ ํ•ญ์ƒ ์ดˆ์ ์ด ๋งž์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ์ดˆ์ ์ด ๋งž์ถฐ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปค์„œ๊ฐ€ ๊นœ๋ฐ•์ž„์„ ๋ฉˆ ์ถฅ๋‹ˆ ๋‹ค.

๋‚ด ๊ฒฝํ—˜์ƒ gif๋Š” ๊ทธ๋‹ค์ง€ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ•œ๋•Œ gif ์ด๋ฏธ์ง€๋กœ ๋กœ๋”ฉ ์Šคํ”ผ๋„ˆ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋‹ค. indexeddb์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋™์•ˆ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๋•Œ๋กœ๋Š” ๋ฐ์Šคํฌํƒ‘์—์„œ๋„ ์Šคํ”ผ๋„ˆ๊ฐ€ ๋ฉˆ์ถ”๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ„ฐ๋ฏธ๋„ ์ปค์„œ ๋ณ€๊ฒฝ์„ ๋งˆ์Šคํ„ฐ ๋ฐ ๋ฆด๋ฆฌ์Šค /1.11๋กœ ๋ˆŒ๋ €์Šต๋‹ˆ๋‹ค (CSS ์• ๋‹ˆ๋ฉ”์ด์…˜-> setInterval ).

์ด ๋ฌธ์ œ๋ฅผ ์กฐ์‚ฌํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์กฐ์‚ฌ์™€ ์ œ์•ˆ์€ ๊ทผ๋ณธ ์›์ธ๊ณผ ๊ฐ€๋Šฅํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ๋Š” ๋ฐ ๋„์›€์ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค! JavaScript setInterval , ์• ๋‹ˆ๋ฉ”์ด์…˜ GIF ๋ฐ ๊ธฐํƒ€ ์—ฌ๋Ÿฌ ๊ธฐ์ˆ ์„ ๋น„๊ตํ•˜๊ณ  ๋‹ค์Œ ์†”๋ฃจ์…˜์„ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • editor.cursorBlinking ๊ฐ€ blink ๋˜๊ฑฐ๋‚˜ terminal.integrated.cursorBlinking ๊ฐ€ true ๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ๊นœ๋ฐ•์ด๋Š” ๋…ผ๋ฆฌ๊ฐ€ ์ด์ œ JavaScript์—์„œ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ CPU ์‚ฌ์šฉ๋Ÿ‰์ด 1 % ๋ฏธ๋งŒ์œผ๋กœ ๋–จ์–ด์กŒ์Šต๋‹ˆ๋‹ค.
  • editor.cursorBlinking ์ด CSS ์—ฌ์œ  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” smooth , expand ๋˜๋Š” phase ์„ค์ •๋œ ๊ฒฝ์šฐ ์ปค์„œ๊ฐ€ ๋‹ค์Œ ์‹œ๊ฐ„ ๋™์•ˆ ์œ ํœด ์ƒํƒœ๊ฐ€ ๋œ ํ›„ ๊นœ๋ฐ•์ด๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. 10 ์ดˆ.

์ด ์ˆ˜์ • ์‚ฌํ•ญ์€ ์ด๋ฏธ Insider ๋นŒ๋“œ ์— ์žˆ์œผ๋ฉฐ ํ–ฅํ›„ ๋ฉฐ์น  ๋‚ด์— ๋ฆด๋ฆฌ์Šค ๋  4 ์›” Stable ๋นŒ๋“œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„ ์ค‘ ์ผ๋ถ€๊ฐ€ ์šฐ๋ฆฌ์˜ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค.

@rebornix "๋˜๋Š”" terminal.integrated.cursorBlinking ๊ฐ€ true ์„ค์ •๋˜์–ด ์žˆ๋‹ค๊ณ  ํ•˜์…จ๋‚˜์š”? ์•„๋‹ˆ๋ฉด "and"๊ฐ€ ์˜๋„์  ์ด์—ˆ์Šต๋‹ˆ๊นŒ?

@jedmao ์ˆ˜์ • or ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰