js-coroutines를 사용하여 60fps로 입력하면서 검색
6888 단어 reactwebdevjavascript
이 문서에서는 사용할 표준 검색 기능js-coroutines을 빠르게 수정하고 약간의 추가 노력으로 완벽한 반응형 환경을 유지하는 방법을 보여줍니다.
1,000,000개 항목의 목록이 있고 텍스트 상자가 있다고 가정해 보겠습니다. 사용자가 입력할 때 입력한 단어와 일치하는 단어가 있는 처음 50개의 항목을 반환하려고 합니다(순서 상관 없음).
이 예에서는 "unique-names-generator"를 사용하여 검색할 넌센스 목록을 만듭니다! 항목은 다음과 같이 표시됩니다.
Aaren the accused lime flyingfish from Botswana
Adriana the swift beige cuckoo from Botswana
검색 기능은 매우 간단합니다.
function find(value) {
if (!value || !value.trim()) return []
value = value.trim().toLowerCase()
const parts = value.split(" ")
return lookup
.filter(v =>
parts.every(p =>
v.split(" ").some(v => v.toLowerCase().startsWith(p))
)
)
.slice(0, 50)
}
그러나 1,000,000개의 항목이 있는 경우 경험은 매우 비참합니다. 아래 화면에서 내가 가장 좋아하는 요리인 '올빼미 레어'를 검색해 보고 애니메이션 진행률 원 글리치를 보세요...
이 경험은 끔찍하며 기능을 제거하거나 훨씬 더 나은 검색 방법을 찾아야 합니다.
js-coroutines 구조에!
js-coroutine을 사용하면
filterAsync
메서드를 가져오고 "find"를 비동기식으로 다시 작성할 수 있습니다.let running = null
async function find(value, cb) {
if (running) running.terminate()
if (!value || !value.trim()) {
cb([])
return
}
value = value.trim().toLowerCase()
let parts = value.split(" ")
let result = await (running = filterAsync(
lookup,
v =>
parts.every(p =>
v.split(" ").some(v => v.toLowerCase().startsWith(p))
)
))
if (result) {
cb(result.slice(0, 50))
}
}
여기에서 값이 변경될 때 현재 실행 중인 검색을 종료하고 콜백을 추가하고 함수를 비동기로 만든 것을 볼 수 있습니다.
결과가 훨씬 좋습니다.
Reference
이 문제에 관하여(js-coroutines를 사용하여 60fps로 입력하면서 검색), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/miketalbot/search-as-you-type-at-60fps-with-js-coroutines-35pc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)