swiftwasm / swiftwasm/JavaScriptKit
Event loop scheduling improvement
Ninguém assumiu esta issue ainda.
- Linguagem predominante
- Swift
- Estrelas
- 986
- Forks
- 76
- Merge médio
- 21h 11min
- PRs com merge (30d)
- 4
Descrição
Motivation
Think the following situation:
- The browser event loop has a pending event that fires an event listener that schedules high-priority work to JSKit's executor.
- But the current JSKit's executor loop does not yield its control to JS event loop until all enqueued works are done
- Even if some of them are low-priority
It resulted in the higher priority works planned to be enqueued to JSKit's executor are blocked by lower priority works that are already enqueued even though browser engine knows about the pending event.
Outcome
- Performance gain
Potential solution
Although yielding control to JS engine for every Swift job is not a realistic approach due to high overheads, but it's still considerable to yield control when certain time is spent for the current JSKit's executor loop.
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece pelo loop do executor em Sources/JavaScriptEventLoop/JobQueue.swift, especialmente pela seção vinculada, e acompanhe como os jobs Swift enfileirados são executados antes que o controle retorne ao loop de eventos do navegador. Defina e avalie uma abordagem de scheduling que ceda após uma quantidade limitada de tempo do executor, demonstrando a conclusão ao mostrar que o trabalho pendente de maior prioridade não está mais bloqueado por jobs de baixa prioridade e medindo o impacto no desempenho.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- javascript, swift, wasm
- Domínio
- performance, web-dev
- Tipo de issue
- Funcionalidade
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Status de atividade
- Estagnada
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 35/100