mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-07 09:25:33 +00:00
Keyman cross platform input methods system running on Android, iOS, Linux, macOS, Windows and mobile and desktop web
Fixes #9154. Improves performance in both kmcmplib and in kmc-kmn/kmw-compiler. After these changes are applied, vietnamese_telex keyboard builds in around 6 seconds on my machine (down from over 2 minutes). This is certainly only the surface of performance improvements we could make. Addresses excessive memory reallocations in kmcmplib, by reallocating store and key arrays in large chunks of 100 items rather than reallocating on each new item added. This resulted in a 250x speed-up on functions such as `AddStore` in WASM build. Some careful modulus arithmetic was needed for resizing the key array, which can be grown in larger increments. Resolved excessive zeroing out of destination buffer in u16ncpy, which was being called with an 8kb destination buffer on every line of the file. In the kmw side, vast majority of the performance cost was in copying of buffers while loading a .kmx into memory, rather than creating views into the memory. Essentially replaced this pattern: ``` return this.rString.fromBuffer(source.slice(offset)); ``` with: ``` const data = new Uint8Array(source.buffer, source.byteOffset + offset); return this.rString.fromBuffer(data); ``` |
||
|---|---|---|
| .github | ||
| android | ||
| common | ||
| core | ||
| developer | ||
| docs | ||
| ios | ||
| linux | ||
| mac | ||
| oem/firstvoices | ||
| resources | ||
| web | ||
| windows | ||
| .clang-format | ||
| .editorconfig | ||
| .eslintrc.cjs | ||
| .flake8 | ||
| .gitignore | ||
| .nycrc.json | ||
| .shellcheckrc | ||
| CODE_OF_CONDUCT.md | ||
| configure-repo.sh | ||
| CONTRIBUTING.md | ||
| crowdin.yml | ||
| HISTORY.md | ||
| LICENSE.md | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| TIER.md | ||
| tsconfig-base.json | ||
| tsconfig.cjs.json | ||
| tsconfig.esm-base.json | ||
| tsconfig.esm.json | ||
| VERSION.md | ||
Keyman makes it possible for you to type in any language on Windows, macOS, Linux, iPhone, iPad, Android tablets and phones, and even instantly in your web browser. Create keyboard layouts with Keyman Developer and share them with the community in the keyboards repository. The Keyman Community have already contributed keyboard layouts for over 2,000 languages!
License
Copyright (c) SIL International.
Keyman is an open source project distributed under the MIT license.
