this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Memoize translated results

First step in migrating to moize

+55 -2
+39
package-lock.json
··· 23 23 "lz-string": "~1.5.0", 24 24 "masto": "~6.3.1", 25 25 "mem": "~9.0.2", 26 + "moize": "~6.1.6", 26 27 "p-retry": "~6.1.0", 27 28 "p-throttle": "~5.1.0", 28 29 "preact": "~10.18.1", ··· 4295 4296 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 4296 4297 "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 4297 4298 }, 4299 + "node_modules/fast-equals": { 4300 + "version": "3.0.3", 4301 + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-3.0.3.tgz", 4302 + "integrity": "sha512-NCe8qxnZFARSHGztGMZOO/PC1qa5MIFB5Hp66WdzbCRAz8U8US3bx1UTgLS49efBQPcUtO9gf5oVEY8o7y/7Kg==" 4303 + }, 4298 4304 "node_modules/fast-glob": { 4299 4305 "version": "3.3.1", 4300 4306 "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", ··· 5321 5327 "node": ">= 8" 5322 5328 } 5323 5329 }, 5330 + "node_modules/micro-memoize": { 5331 + "version": "4.1.2", 5332 + "resolved": "https://registry.npmjs.org/micro-memoize/-/micro-memoize-4.1.2.tgz", 5333 + "integrity": "sha512-+HzcV2H+rbSJzApgkj0NdTakkC+bnyeiUxgT6/m7mjcz1CmM22KYFKp+EVj1sWe4UYcnriJr5uqHQD/gMHLD+g==" 5334 + }, 5324 5335 "node_modules/micromatch": { 5325 5336 "version": "4.0.5", 5326 5337 "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", ··· 5376 5387 }, 5377 5388 "engines": { 5378 5389 "node": "*" 5390 + } 5391 + }, 5392 + "node_modules/moize": { 5393 + "version": "6.1.6", 5394 + "resolved": "https://registry.npmjs.org/moize/-/moize-6.1.6.tgz", 5395 + "integrity": "sha512-vSKdIUO61iCmTqhdoIDrqyrtp87nWZUmBPniNjO0fX49wEYmyDO4lvlnFXiGcaH1JLE/s/9HbiK4LSHsbiUY6Q==", 5396 + "dependencies": { 5397 + "fast-equals": "^3.0.1", 5398 + "micro-memoize": "^4.1.2" 5379 5399 } 5380 5400 }, 5381 5401 "node_modules/ms": { ··· 10525 10545 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 10526 10546 "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 10527 10547 }, 10548 + "fast-equals": { 10549 + "version": "3.0.3", 10550 + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-3.0.3.tgz", 10551 + "integrity": "sha512-NCe8qxnZFARSHGztGMZOO/PC1qa5MIFB5Hp66WdzbCRAz8U8US3bx1UTgLS49efBQPcUtO9gf5oVEY8o7y/7Kg==" 10552 + }, 10528 10553 "fast-glob": { 10529 10554 "version": "3.3.1", 10530 10555 "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", ··· 11281 11306 "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 11282 11307 "dev": true 11283 11308 }, 11309 + "micro-memoize": { 11310 + "version": "4.1.2", 11311 + "resolved": "https://registry.npmjs.org/micro-memoize/-/micro-memoize-4.1.2.tgz", 11312 + "integrity": "sha512-+HzcV2H+rbSJzApgkj0NdTakkC+bnyeiUxgT6/m7mjcz1CmM22KYFKp+EVj1sWe4UYcnriJr5uqHQD/gMHLD+g==" 11313 + }, 11284 11314 "micromatch": { 11285 11315 "version": "4.0.5", 11286 11316 "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", ··· 11318 11348 "dev": true, 11319 11349 "requires": { 11320 11350 "brace-expansion": "^1.1.7" 11351 + } 11352 + }, 11353 + "moize": { 11354 + "version": "6.1.6", 11355 + "resolved": "https://registry.npmjs.org/moize/-/moize-6.1.6.tgz", 11356 + "integrity": "sha512-vSKdIUO61iCmTqhdoIDrqyrtp87nWZUmBPniNjO0fX49wEYmyDO4lvlnFXiGcaH1JLE/s/9HbiK4LSHsbiUY6Q==", 11357 + "requires": { 11358 + "fast-equals": "^3.0.1", 11359 + "micro-memoize": "^4.1.2" 11321 11360 } 11322 11361 }, 11323 11362 "ms": {
+1
package.json
··· 25 25 "lz-string": "~1.5.0", 26 26 "masto": "~6.3.1", 27 27 "mem": "~9.0.2", 28 + "moize": "~6.1.6", 28 29 "p-retry": "~6.1.0", 29 30 "p-throttle": "~5.1.0", 30 31 "preact": "~10.18.1",
+10 -2
src/components/translation-block.jsx
··· 7 7 import sourceLanguages from '../data/lingva-source-languages'; 8 8 import getTranslateTargetLanguage from '../utils/get-translate-target-language'; 9 9 import localeCode2Text from '../utils/localeCode2Text'; 10 + import pmem from '../utils/pmem'; 10 11 11 12 import Icon from './icon'; 12 13 import Loader from './loader'; ··· 25 26 ]; 26 27 let currentLingvaInstance = 0; 27 28 28 - function lingvaTranslate(text, source, target) { 29 + function _lingvaTranslate(text, source, target) { 29 30 console.log('TRANSLATE', text, source, target); 30 31 const fetchCall = () => { 31 32 let instance = LINGVA_INSTANCES[currentLingvaInstance]; ··· 59 60 // lang: DEFAULT_LANG, 60 61 // }); 61 62 } 62 - const throttledLingvaTranslate = throttle(lingvaTranslate); 63 + const TRANSLATED_MAX_AGE = 1000 * 60 * 60; // 1 hour 64 + const lingvaTranslate = pmem(_lingvaTranslate, { 65 + maxAge: TRANSLATED_MAX_AGE, 66 + }); 67 + const throttledLingvaTranslate = pmem(throttle(lingvaTranslate), { 68 + // I know, this is double-layered memoization 69 + maxAge: TRANSLATED_MAX_AGE, 70 + }); 63 71 64 72 function TranslationBlock({ 65 73 forceTranslate,
+5
src/utils/pmem.js
··· 1 + import moize from 'moize'; 2 + 3 + export default function pmem(fn, opts = {}) { 4 + return moize(fn, { isPromise: true, ...opts, maxSize: Infinity }); 5 + }