Este projeto fornece uma função memoize para melhorar o desempenho em projetos JavaScript ou TypeScript, armazenando em cache os resultados de chamadas de função caras. Ao memorizar, chamadas repetidas com os mesmos argumentos retornarão o resultado armazenado em cache, acelerando a execução.
Este módulo funciona como o gancho useMemo do react, mas NÃO é necessário reagir. Você pode usar qualquer framework ou projetos javascript puro
Pacote Npm
Github
No processo a seguir, quando o método concatPhoneNumber é chamado novamente com os mesmos parâmetros, a função não é executada novamente, ela busca o resultado no cache.
import memofy from "memofy"; const concatPhoneNumber = (extension, number) => { // Heavy calculation // return result }; const memoizedConcatPhoneNumber = memofy(concatPhoneNumber, []); memoizedConcatPhoneNumber(90, 555); // Runs concatPhoneNumber when first run memoizedConcatPhoneNumber(90, 555); // get value from cache memoizedConcatPhoneNumber(90, 552); // Runs concatPhoneNumber because params is change
Se você deseja que o método seja executado novamente com o mesmo parâmetro de acordo com algumas dependências, você pode passar o parâmetro deps da seguinte forma.
import memofy from "memofy"; const taxRatio = 0.5; const product = { title: "Test product", price: 10 }; const calculateTax = () => { // Calculate tax by product price // Heavy calculation return taxRatio * product.price; }; const memoizedConcatPhoneNumber = memofy(calculateTax, [product, taxRatio]); calculatedPrice = calculateTax(); // Runs concatPhoneNumber when first run product.price = 40; let calculatedPrice = calculateTax(); // Runs concatPhoneNumber because product dep changed taxRatio = 0.8; calculatedPrice = calculateTax(); // Runs concatPhoneNumber because taxRatio changed
Resultados de desempenho em uma função complexa que distingue números primos. Teste de desempenho
Caso | EM |
---|---|
Hora da primeira execução (sem cache) | > 52,08ms |
Segundo tempo de execução (armazenamento em cache) | |
e execução subsequente (armazenamento em cache) |
Os testes foram escritos para todos os casos e todos os tipos de parâmetros. Testes
Arquivo | % Stmts | % Filial | % Funções | % Linhas | Números de linhas descobertas |
---|---|---|---|---|---|
Todos os arquivos | 100 | 100 | 100 | 100 | 0 |
lib | 100 | 100 | 100 | 100 | 0 |
index.ts | 100 | 100 | 100 | 100 | 0 |
lib/loja | 100 | 100 | 100 | 100 | 0 |
CacheStore.ts | 100 | 100 | 100 | 100 | 0 |
DepsStore.ts | 100 | 100 | 100 | 100 | 0 |
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3