Bring the vegetable broth to a gentle simmer in a small pot, then reduce to low to keep warm throughout cooking.
Trim the woody ends from the asparagus, then cut into 1-inch pieces. Blanch in boiling water for about 2 minutes until vibrant green and tender-crisp, then quickly transfer to a bowl of ice water to stop cooking and preserve color.
In your large pan, heat the olive oil and butter over medium heat until they shimmer and smell fragrant, about 2 minutes.
Add the finely chopped onion or shallot to the pan and cook, stirring often, until translucent and fragrant, about 3-4 minutes.
Stir in the Arborio rice, cooking for about 2 minutes until the edges turn slightly translucent and it begins to crackle softly, giving a toasted aroma.
Start adding the warm broth one ladleful at a time, stirring gently and constantly, allowing each addition to be absorbed before adding the next. Continue this process, maintaining a gentle simmer, for about 10 minutes.
When the rice is halfway cooked, gently fold in the blanched asparagus pieces, stirring to combine and continue adding broth as needed.
Cook until the rice is tender but still has a slight bite, and the mixture is creamy, about 8-10 more minutes. If it thickens too much, add a splash more warm broth.
Remove the pan from heat and stir in the grated Parmesan, lemon zest (if using), and season with salt and pepper to taste. The risotto should be silky and fragrant.
Let the risotto rest for a minute or two, then give it a gentle stir. Serve immediately in warm bowls, garnished with extra Parmesan if desired.