Performance issues with ModelUtils._coerce and coerceArray
Maintainer thường phản hồi trong vòng 2 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 35/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- javascript
- Lĩnh vực
- backend, performance
Hướng nghiên cứu
Bắt đầu trong lib/model-utils.js, quanh các dòng 498-503, nơi ModelUtils._coerce gọi coerceArray trong nhánh try/catch. Xem xét hành vi của coerceArray và workload create-heavy được mô tả trong issue, sau đó xác minh rằng việc coercion vẫn giữ nguyên hành vi hiện có mà không phát sinh chi phí lặp lại của các exception, và xác nhận cải thiện bằng profiling.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Describe the bug
The way ModelUtils._coerce uses coerceArray is inefficient, and is causing it to show up as 20% of my application's CPU usage in profiler runs under a create heavy workload.
The problem code is this in juggler:
try {
// Coerce val into an array if it resembles an array-like object
val = coerceArray(val);
} catch (e) {
// NOOP when not coercable into an array.
}
Throwing and catching an error is much more expensive than returning a value, and nearly every call to _coerce hits this try/throw/catch path.

A variant of coerceArray that doesn't throw, but instead returns [arrayVal | undefined, coerced: boolean] I think would fix the performance problem here.
Logs
No response
Additional information
No response
Reproduction
design issue
- Ngôn ngữ chính
- TypeScript
- Star
- 5.1k
- Fork
- 1.1k
- Merge trung bình
- 4 ngày 4 giờ
- Pull request đã merge (30 ngày)
- 44
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc 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.
Issue khác của loopbackio/loopback-next
-
Docs good first issue help wanted
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 68/100
loopbackio/loopback-next#683 · 3 bình luận ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 55/100
loopbackio/loopback-next#11726 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
bug
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
loopbackio/loopback-next#11500 · 1 bình luận · 1 reaction ·
Maintainer thường phản hồi trong vòng 2 ngày
-
@param.array throws INVALID_PARAMETER_VALUE:must be string if more than 20 elements are sentĐang mởbug
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 35/100
loopbackio/loopback-next#11412 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Query parameter array parsing broken for >20 items after qs upgrade (CVE fix side effect)Có thể làm lại được @KauanAfonso đã nhận 126 ngày trước và không có pull request nào đang mở. Đang mởbug help wanted
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 45/100
loopbackio/loopback-next#11396 · 2 bình luận · 1 reaction ·
Maintainer thường phản hồi trong vòng 2 ngày
Tất cả issue của loopbackio/loopback-next
Issue tương tự
-
Bump anybuf version to ^1.0.0Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
wormhole-foundation/wormhole#5062 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
internal os specific
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
frostney/GocciaScript#1688 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
integration:hermes
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
vectorize-io/hindsight#5592 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
vercel/streamdown#673 · 1 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
apache/rocketmq-dashboard#6712 ·
Maintainer thường phản hồi trong vòng 3 ngày