Install any skill in seconds. Free to start, no credit card required.
Get Started Free →jeremylongshore/lokalise-performance-tuning
Optimize Lokalise API performance with caching, pagination, and bulk operations.
Passed 17 of 21 test cases with the skill, and 5 of 21 without it.
and 18 more in the full report
14 fixed4 passed either way3 still failing1 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 13 test cases the skill fixed. Same model, same prompt, with and without the skill.
In my Lokalise local cache implementation, I read a local JSON metadata file. What specific object property from this file must match what specific property from the API's project statistics to confidently consider it a cache hit?
| Checked | Without skill | With skill |
|---|---|---|
| Extracts the timestamp property from the local metadata file | Passed | Passed |
| Compares the timestamp against the last_activity property from the project statistics object | Missed | Passed |
The instructions your model reads when the skill loads.
Optimize Lokalise API throughput for translation pipelines by implementing cursor pagination, local caching, batch key operations (500/request), request throttling under the 6 req/s rate limit, and selective language downloads.
@lokalise/node-api SDK v9+ (ESM) or REST API accessLOKALISE_API_TOKEN environment variable setCursor pagination is significantly faster than offset pagination for projects with 5K+ keys. Offset pagination degrades as page numbers increase because the server must skip rows; cursor pagination uses a pointer.
import { LokaliseApi } from '@lokalise/node-api';
const lok = new LokaliseApi({ apiKey: process.env.LOKALISE_API_TOKEN! });
// Generator that yields all keys using cursor pagination
async function* getAllKeys(projectId: string) {
let cursor: string | undefined;
do {
const result = await lok.keys().list({
project_id: projectId,
limit: 500, // Maximum allowed per request
pagination: 'cursor',
cursor,
});
for (const key of result.items) yield key;
cursor = result.hasNextCursor() ? result.nextCursor : undefined;
} while (cursor);
}
// Usage: 10,000 keys = 20 API calls (vs 100 with default limit=100)
let count = 0;
test cases passed, vs 5 / 21 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.