The Braves waited out a rain delay at the start of the contest and then scored five times during the first two innings.
Atlanta improved the best record in the majors by winning for the 17th time in 19 games.
Heyward hit his 11th home run of the season in the opening inning and Johnson added a sacrifice fly later in the frame. Freddie Freeman also had a sacrifice fly in the second, after which Johnson delivered a two-run single.
Brandon Beachy (2-0) took a shutout into the sixth inning before giving up a two-run homer to Dominic Brown. Beachy, making just his fourth start of the season, gave up the two runs on six hits in six innings of work.
Craig Kimbrel needed only seven pitches to record a perfect ninth inning for his 38th save, tops in the National League.
Philadelphia starter John Lannan (3-6) left the game in the second inning with what team officials said was a knee injury. He gave up five runs on four hits in 1 1/3 innings. Lannan missed two months earlier this season with knee problems.
Megyn Kelly: Santa Claus and Jesus are both white men
Costly malfunction causes beer flood at Boston-area brewery