Integração com WebAssembly
Este documento explica como configurar e usar a integração do Swiss Ephemeris em WebAssembly na biblioteca Kaabalah.
Visão geral
O Swiss Ephemeris é uma biblioteca de cálculo astronômico de alta precisão escrita em C, amplamente usada para cálculos astrológicos. Para usá-la em navegadores via nossa biblioteca JavaScript/TypeScript, criamos um wrapper em WebAssembly.
Pré-requisitos
Para compilar o Swiss Ephemeris para WebAssembly, você precisará de:
Emscripten SDK (emsdk): A cadeia de ferramentas do compilador para WebAssembly
Instruções de instalação: https://emscripten.org/docs/getting_started/downloads.html
Código-fonte do Swiss Ephemeris: O código C que será compilado
Baixar em: https://www.astro.com/swisseph/swesrc.htm
Arquivos de efemérides: Arquivos de dados usados pelo Swiss Ephemeris para cálculos
Baixar em: https://www.astro.com/ftp/swisseph/ephe/
Processo de compilação
Baixe o código-fonte do Swiss Ephemeris e extraia-o para o
wasm/swissephdiretórioInstale o Emscripten SDK seguindo as instruções de instalação deles
Compile o código usando o script fornecido:
cd wasm/scripts chmod +x compile.sh ./compile.shVerifique os arquivos de saída:
wasm/build/swisseph.js: Código glue JavaScriptwasm/build/swisseph.wasm: Binário WebAssembly
Integração com a biblioteca
A integração do Swiss Ephemeris em WebAssembly é usada pelo módulo de astrologia para realizar cálculos astronômicos precisos.
Estrutura do módulo
src/astrology/swisseph.ts: Wrapper que faz interface com o módulo WebAssemblysrc/astrology/index.ts: Funcionalidade principal de astrologia que usa o wrapper
Carregamento dinâmico
O módulo WebAssembly é carregado dinamicamente em tempo de execução, tornando-o compatível tanto com Node.js quanto com ambientes de navegador. Essa abordagem garante que:
O código pesado em WebAssembly seja carregado apenas quando necessário
O mesmo código funcione tanto no Node.js quanto em navegadores
A biblioteca possa degradar graciosamente se o WebAssembly não estiver disponível
Uso no navegador
Para usar o Swiss Ephemeris em um ambiente de navegador:
Copie os arquivos WebAssembly para um local acessível pela sua aplicação web:
swisseph.jsswisseph.wasm
Trate questões de origem cruzada: Garanta que seu servidor web esteja configurado para servir arquivos WebAssembly com o tipo MIME correto (
application/wasm)Forneça os arquivos de efemérides que o Swiss Ephemeris precisa para os cálculos:
Crie um diretório acessível pela sua aplicação web
Coloque os arquivos de efemérides (*.se1) nesse diretório
Especifique o caminho ao inicializar o módulo Swiss Ephemeris
Uso no Node.js
Para ambientes Node.js:
Inclua os arquivos WebAssembly compilados no seu pacote publicado:
Adicione-os ao
array filesempackage.jsonCertifique-se de que eles sejam copiados para o
diretório distdurante a build
Coloque os arquivos de efemérides em um local conhecido:
Por exemplo, em um subdiretório chamado
ephedentro do seu pacoteDefina o caminho das efemérides ao inicializar o módulo
Mecanismo de fallback
O módulo de astrologia inclui um mecanismo de fallback para lidar com situações em que o módulo WebAssembly pode não estar disponível:
Se a compilação falhar ou os arquivos WebAssembly estiverem ausentes, o módulo se degrada graciosamente
Valores substitutos são retornados em vez de lançar erros
Um aviso é registrado no console
Exemplo de implementação
Resolução de problemas
Problemas comuns
"Módulo WebAssembly não encontrado":
Garanta que os arquivos .wasm e .js estejam corretamente incluídos na sua distribuição
Verifique os caminhos no seu código
"Não é possível encontrar arquivos de efemérides":
Verifique se os arquivos de efemérides estão disponíveis no caminho especificado
Verifique as permissões dos arquivos
"Erro de cálculo":
Verifique se os parâmetros de entrada (data, localização) são válidos
Garanta que você tenha os arquivos de efemérides corretos para o intervalo de datas
Ferramentas de depuração
Use as ferramentas de desenvolvedor do navegador para verificar erros relacionados ao WASM no console
Ative a
ASSERTIONS=1flag durante a compilação para mensagens de erro mais detalhadas
Atualizado