Both Jimmy Garoppolo and Trey Lance shredded the 49ers defense on Day 1 of training camp.

Day 2 was much different. On Day 2, the defense responded and made life much more difficult for the two quarterbacks.

Here's how each QB performed.

JIMMY GAROPPOLO

Not a good day for James. He airmailed his first pass attempt of the morning, and finished practice having completed just 4 of 10 throws during 11-on-11 team drills. This is the James I've come to know. The inconsistent, indecisive, innaccurate James. Four of his passes got broken up -- two by Jason Verrett, one by K'Waun Williams and one by Dontae Johnson. Garoppolo is lucky one of those throws didn't get picked. His best throw of 11 on 11s was a 10-yard completion to Deebo Samuel over the middle. Nothing special about that. Garoppolo clearly was the second-best quarterback on the field today.

TREY LANCE

Lance completed 6 of 10 passes during 11 on 11s, but those numbers don't do him justice, because all four of his incompletions were well thrown. First, he fired a pass downfield to Brandon Aiyuk who turned his head late to find the ball. It seemed like Aiyuk gave up on the play and didn't expect to get the ball. Maybe he's too used to playing with Garoppolo, who doesn't attempt those power throws. Next, Lance threw a strike to tight end Josh Pederson, who dropped it. Next, Lance threw a strike to Kevin White, who was running an out route when he slipped and fell face first. Finally, Lance dumped the ball down to Ross Dwelley, who uncharacteristically dropped the pass. 

Throughout the practice, Lance showed a quick release and tremendous arm strength. And he still hasn't run once in front of the media this offseason. Which means he's playing the position the way it's supposed to be played, and he's playing it well. 

Only a matter of time until he takes Garoppolo's job.

Here's a video of the 49ers quarterbacks warming up on Day 2.