Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Suggestion: Return early from collection partial rendering if blank. #560

Merged
merged 7 commits into from
Sep 14, 2024

Conversation

tylerjc
Copy link
Contributor

@tylerjc tylerjc commented Mar 31, 2024

I was messing around with making a project's Jbuilder renders more efficient the other day.

I noticed that even empty collections trigger partial renders and take milliseconds for each, although they end up just returning []. For the examples below (pulled from the README):

json.array! @posts, partial: 'posts/post', as: :post

# or
json.partial! 'posts/post', collection: @posts, as: :post

# or
json.partial! partial: 'posts/post', collection: @posts, as: :post

# or
json.comments @post.comments, partial: 'comments/comment', as: :comment

Originally, I had written a little helper method in our project to optionally include the { partial:, as: } hash to the json.comments(@post.comments) call, but that seemed cumbersome to include everywhere and I wondered why this wasn't somehow handled in Jbuilder code.

I just started messing around locally and found that this seems to take care of it, but figured I'd open a discussion and see what others think, since I'm extremely knew to Jbuilder and could be missing something obvious.

Screenshots (Console Output Differences)

  • Before PR changes (same collection):

image

  • After PR changes (same collection):

image

@dhh dhh merged commit 0adeb96 into rails:main Sep 14, 2024
12 checks passed
derricklannaman referenced this pull request in powerhome/power-web-development-interview Sep 24, 2024
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [jbuilder](https://redirect.github.com/rails/jbuilder)
([changelog](https://redirect.github.com/rails/jbuilder/releases/tag/v2.13.0))
| `2.12.0` -> `2.13.0` |
[![age](https://developer.mend.io/api/mc/badges/age/rubygems/jbuilder/2.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/rubygems/jbuilder/2.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/rubygems/jbuilder/2.12.0/2.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/rubygems/jbuilder/2.12.0/2.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>rails/jbuilder (jbuilder)</summary>

###
[`v2.13.0`](https://redirect.github.com/rails/jbuilder/releases/tag/v2.13.0)

[Compare
Source](https://redirect.github.com/rails/jbuilder/compare/v2.12.0...v2.13.0)

#### What's Changed

- Redirect to `@record` or path in controller generator by
[@&#8203;jeromedalbert](https://redirect.github.com/jeromedalbert) in
[https://github.com/rails/jbuilder/pull/569](https://redirect.github.com/rails/jbuilder/pull/569)
- Return early from collection partial rendering if blank by
[@&#8203;tylerjc](https://redirect.github.com/tylerjc) in
[https://github.com/rails/jbuilder/pull/560](https://redirect.github.com/rails/jbuilder/pull/560)
- Add missing ':see_other' status code in generated destroy controller
method by [@&#8203;ldeld](https://redirect.github.com/ldeld) in
[https://github.com/rails/jbuilder/pull/538](https://redirect.github.com/rails/jbuilder/pull/538)
- Remove OpenStruct references from Jbuilder by
[@&#8203;mtsmfm](https://redirect.github.com/mtsmfm) in
[https://github.com/rails/jbuilder/pull/567](https://redirect.github.com/rails/jbuilder/pull/567)
- Use new `params.expect` syntax instead of `params.require` by
[@&#8203;jeromedalbert](https://redirect.github.com/jeromedalbert) in
[https://github.com/rails/jbuilder/pull/573](https://redirect.github.com/rails/jbuilder/pull/573)

#### New Contributors

- [@&#8203;jeromedalbert](https://redirect.github.com/jeromedalbert)
made their first contribution in
[https://github.com/rails/jbuilder/pull/570](https://redirect.github.com/rails/jbuilder/pull/570)
- [@&#8203;tylerjc](https://redirect.github.com/tylerjc) made their
first contribution in
[https://github.com/rails/jbuilder/pull/560](https://redirect.github.com/rails/jbuilder/pull/560)
- [@&#8203;ldeld](https://redirect.github.com/ldeld) made their first
contribution in
[https://github.com/rails/jbuilder/pull/538](https://redirect.github.com/rails/jbuilder/pull/538)
- [@&#8203;mtsmfm](https://redirect.github.com/mtsmfm) made their first
contribution in
[https://github.com/rails/jbuilder/pull/567](https://redirect.github.com/rails/jbuilder/pull/567)

**Full Changelog**:
rails/jbuilder@v2.12.0...v2.13.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/powerhome/power-web-development-interview).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC43NC4xIiwidXBkYXRlZEluVmVyIjoiMzguNzQuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants