microsoft / microsoft/TypeScript
Inferring complex arguments is slow when used inside a generic function
@weswigham đang làm issue này rồi.
Từ ngày 10/8/2021.
- Ngôn ngữ chính
- Go
- Star
- 111k
- Fork
- 14.4k
- Merge trung bình
- 1 ngày 19 giờ
- Pull request đã merge (30 ngày)
- 117
Mô tả
Bug Report
🔎 Search Terms
performance, generic, inference, slow, prisma
🕗 Version & Regression Information
Reproduced in ts 4.1, 4.3, 4.4-beta a @next
Using prisma in the repro, which does not run on older versions.
⏯ Playground Link
This issue is easier to see through extended-diagnostics, so I have created a repo here with an example: https://github.com/hayes/prisma-ts-perf-issue
The issue depends on some large and complex type to be noticeable (I am using a small prisma client in the repro). This playground example is kinda large, and the difference is not as obvious or noticeable :
playground link
💻 Code
import { PrismaClient } from "./prisma-client";
function createField<Type extends string>(options: {
type: Type;
resolve: (db: PrismaClient) => unknown;
}) {}
// function createField(options: {
// type: string;
// resolve: (db: PrismaClient) => unknown;
// }) {}
createField({
type: "Boolean",
resolve: async (db) => {
await db.user.findUnique({ where: { id: 1 } });
},
});
🙁 Actual behavior
The un-commented version of the createField is somewhat un-responsive in vs-code. This issue becomes worse as the prisma client grows. The commented out version (without the generic) is very responsive, and completions are almost instant.
Running tsc with --extended-diagnostics produces these results (version with the generic is on the left). There are massive differences in Types, Instantiations, and Assignability cache size .
🙂 Expected behavior
The commented out version, and un-commented versions should have similar performance. I am guessing using the generic is causing us to miss out on some existing optimization that lets us not check the full prisma types. I am hoping there is a way to optimize this pattern. I've run into this a few times now. It's often not as noticeable because few objects have a type as complex as a prisma client.
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Đánh giá
Issue này chưa được đánh giá.