typia icon indicating copy to clipboard operation
typia copied to clipboard

Transform Performance Slow

Open timoxley opened this issue 1 year ago • 8 comments

I have a small vite/vitest application with a handful of tests. The tests take a long time to cold-start and it appears they are getting slowed down by the typia transform: ~15 seconds for ~15 files.

Is there something that can be configured to make it transform faster, e.g. caching, parallelism or something, or is this perhaps a limitation of esbuild/tsc/vite? Any suggestions or additional information I can provide?

~15 seconds for ~15 files

output of vite-plugin-inspect showing typia transform being slow         output of vite-plugin-inspect showing files using typia being the slow ones

AFAICT I'm on the latest version of all relevant packages.

    "typescript": "^5.6.2",
    "typia": "^6.11.0",
    "vite": "^5.4.4",
    "vite-plugin-inspect": "^0.8.7",
    "vitest": "^2.1.1"

timoxley avatar Sep 27 '24 12:09 timoxley

I think this might be more relevant for unplugin-typia. https://github.com/ryoppippi/unplugin-typia/issues/334

timoxley avatar Sep 27 '24 18:09 timoxley

you know what, I think it may be typia itself, I don't know?

I created a kind of subset of my setup in the typia playground

When I import this file and build it with my app, via vite, it takes ~1.5 seconds. ~1.5s is fine if this was the only file, but in my full (simple) app these add up to about 30s of additional build time 🎻😿. This file has no external deps (other than typia), so I'm starting to doubt my suspicion that it's an issue with the way the unplugin plugin sets up the ts context per-file (see issue I opened on the plugin).

image

What do you think @samchon, @ryoppippi?

timoxley avatar Sep 30 '24 18:09 timoxley

@timoxley Wait, is unplugin-typia process every single file? unplugin-typia skips processing a file without a keyword typia

ryoppippi avatar Sep 30 '24 19:09 ryoppippi

@timoxley Wait, is unplugin-typia process every single file? unplugin-typia skips processing a file without a keyword typia

It's processing all the files with the typia keyword, that seems to be working correctly.

timoxley avatar Sep 30 '24 19:09 timoxley

It's processing all the files with the typia keyword, that seems to be working correctly.

Yeah, so idk why it slows so much.

Anyway, I reopen https://github.com/ryoppippi/unplugin-typia/issues/334 again. In this issue, we discuss typia's transformer itself. We'll discuss unplugin-typia's improvement in another issue!

ryoppippi avatar Sep 30 '24 19:09 ryoppippi

I've tested using the plugin (unplugin-typia) and using the Generation method:

pnpm typia generate \
  --input src/templates \
  --output src/generated \
  --project tsconfig.json

And the problem is the same on both: When the file containing all Typia methods is really large the generation proccess halt and eventually gives a JavaScript heap out of memory.

The scenario that I'm using Typia is to generate validation methods for each API request body and response object that comes from an OpenAPI document. So there are thousands of types to check and the generation proccess cannot finish.

It would be nice to have some kind of partial generation, where it would generate and save partial validators to free the memory.

ziongh avatar Feb 18 '25 21:02 ziongh

Any news on this? I really like Typia, but it is has a drastic impact on performance for me. Every file not using Typia takes about 1ms to transform, while every file using Typia takes about 3 seconds.

Starting my dev server takes several minutes! 😧

Stadly avatar Apr 02 '25 07:04 Stadly

I have the same problem, it is bearable for now, although very noticeable 'slowness'. I worry I might need to change to a different solution as it will become impossible when the project grows. Is there any kind of solution in the works?

matej-io avatar May 29 '25 23:05 matej-io