비동기 응답에서 오래된 결과가 최신 것을 덮어쓸 때 — 세대 번호
취소한 요청의 응답이 나중에 도착해 화면을 덮을 때, 요청 ID 만으로는 부족합니다. 세대 번호로 무효화하는 방법을 정리했습니다.
취소한 요청의 응답이 나중에 도착해 화면을 덮을 때, 요청 ID 만으로는 부족합니다. 세대 번호로 무효화하는 방법을 정리했습니다.
setInterval 33ms 틱과 60Hz 화면의 위상이 어긋나 애니메이션이 떨립니다. 실측으로 원인을 잡고 rAF 로 옮긴 과정입니다.
앱이 멈췄다 깨어나면 밀린 시간이 한 틱에 몰려 순간이동이 납니다. dt 상한을 두고 나머지를 버리는 이유와 값을 정하는 기준입니다.
타이머 콜백이 겹쳐 실행되면 오래된 호출이 최신 상태를 덮어씁니다. 진행 중 플래그로 막는 법과 finally 가 필수인 이유를 정리했습니다.
소스를 읽고 내린 판단과 실제로 해 본 결과가 갈렸습니다. 못 뗀다고 적어 둔 코드 둘이 떼어 보니 됐고, 그 차이가 어디서 생기는지 정리했습니다.
화면 위에 항상 떠 있으면서 빈 곳의 클릭은 뒤로 통과시키는 창을 만드는 법입니다. UI 를 알파값보다 먼저 봐야 하는 이유와 pointer-events 가 창 전체를 먹는 함정을, 돌아가는 최소 예제와 함께 정리했습니다.
Desktop AI Pet 을 받아 macOS 와 Windows 에서 실행하는 순서입니다. 손상됨 경고와 SmartScreen 차단은 서명이 없어서 생기는 것이라 해제 방법이 정해져 있습니다.
창이 하는 일 대부분은 사실 판정입니다. DOM 과 창 API 를 안 쓰는 순수 함수로 빼면 창을 띄우지 않고도 테스트가 붙습니다.
파일 잠금과 확장 속성은 크레이트 없이 시스템 콜을 직접 선언해 쓸 수 있습니다. 상수를 직접 적어야 하고 getxattr 는 호출이 두 번이라는 점만 알면 됩니다.