Match ends, St. Johnstone 0, Rangers 3.
Rangers maintained their 16-point advantage at the top of the Scottish Premiership with an 11th straight league win at St Johnstone.
Kemar Roofe poked in Rangers' opener after Zander Clark had palmed away Ianis Hagi's strike and Glen Kamara's tidy finish doubled the visitors' advantage before the break.
Hagi blasted a shot through Clark for Rangers' third in the second half, before St Johnstone substitute Michael O'Halloran was sent off for two bookings late on.
The former Rangers winger was cautioned twice inside three minutes and was on the park for just six minutes in total.
And a third straight league loss leaves Callum Davidson's St Johnstone 10th in the division, above Hamilton Academical on goal difference.
St Johnstone's Murray Davidson and Kamara were unsuccessful with early efforts before Rangers went in front.
Kamara squared for Hagi to shoot and Roofe was on hand to convert after the Clark block. A quick check from the striker that he was not offside confirmed he had scored for the 11th time this season.
Finland international Kamara was the beneficiary moments later as he glided on to Joe Aribo's perfectly timed pass in behind the Perth defence and nudged the ball home with the outside of his right foot.
There was no let up from Steven Gerrard's side in the second half with Hagi thundering the ball under Clark after Roofe's shot had been blocked.
Substitute Stevie May almost pulled one back for the hosts when he got goal-side of the Rangers defence but Allan McGregor would not be beaten.
Amid a series of substitutions, O'Halloran came on for Danny McNamara and was quickly booked for a foul on Roofe's replacement Alfredo Morelos. And the winger saw red after a rash challenge on Borna Barisic met with the same punishment.
Morelos slipped a shot wide soon after but Rangers' work was done.
Man of the match - Glen Kamara

What did we learn?
St Johnstone did not do much wrong before falling behind but could not find an answer after Rangers started scoring. May and Ali McCann came on at half-time but were barely on the park two minutes when Hagi struck Rangers' third.
One of Rangers' strengths this season has been the amount of different scorers and Kamara became the club's 14th scorer in the league.
Hagi has had a largely frustrating first half of the season but certainly staked his claim for more game time with a hand in two of the goals.
Gerrard's men were clinical in both boxes with their defensive prowess registering a 21st clean sheet in all competitions this term.
What did they say?
St Johnstone manager Callum Davidson: "We limited them to very few chances. It's a throw-in and we deal with it all wrong. Six minutes later, we're 2-0 down and it's an uphill struggle. We conceded right after half-time. And that's it, game's over.
"I'm really disappointed with Michael O'Halloran. It was reckless going into that challenge already being booked. Just stay on your feet."
Rangers manager Steven Gerrard: "We really stood up to the physicality of St Johnstone. They are a well organised team, they are right up for it and compete well, so we had to first and foremost match that and at the right times we were very clinical and showed our quality.
"We're very pleased with the run we're on in the league. With 19 games gone, to return 53 points is a really good effort from the players."
What's next?
Rangers are involved in the first Premiership match on Boxing Day, at home to Hibernian (12:30 GMT), before St Johnstone take on hosts Aberdeen later on Saturday (15:00).
Player of the match
RoofeKemar Roofe
St Johnstone
Avg
- Squad number15Player nameMcNamaraAverage rating
5.00
- Squad number6Player nameGordonAverage rating
4.93
- Squad number19Player nameRooneyAverage rating
4.90
- Squad number4Player nameMcCartAverage rating
4.86
- Squad number9Player nameKaneAverage rating
4.86
- Squad number13Player nameBrysonAverage rating
4.84
- Squad number10Player nameWotherspoonAverage rating
4.81
- Squad number24Player nameBoothAverage rating
4.78
- Squad number8Player nameDavidsonAverage rating
4.77
- Squad number7Player nameConwayAverage rating
4.73
- Squad number1Player nameClarkAverage rating
4.70
- Squad number14Player nameMayAverage rating
4.58
- Squad number18Player nameMcCannAverage rating
4.53
- Squad number26Player nameCraigAverage rating
4.06
- Squad number17Player nameMelamedAverage rating
4.02
- Squad number11Player nameO'HalloranAverage rating
3.50
Rangers
Avg
- Squad number25Player nameRoofeAverage rating
7.99
- Squad number18Player nameKamaraAverage rating
7.83
- Squad number17Player nameAriboAverage rating
7.74
- Squad number7Player nameHagiAverage rating
7.71
- Squad number2Player nameTavernierAverage rating
7.56
- Squad number14Player nameKentAverage rating
7.55
- Squad number10Player nameDavisAverage rating
7.54
- Squad number31Player nameBarisicAverage rating
7.53
- Squad number6Player nameGoldsonAverage rating
7.48
- Squad number1Player nameMcGregorAverage rating
7.37
- Squad number5Player nameHelanderAverage rating
7.27
- Squad number11Player nameIttenAverage rating
7.10
- Squad number15Player nameZunguAverage rating
7.08
- Squad number20Player nameMorelosAverage rating
7.05
- Squad number37Player nameArfieldAverage rating
6.89
Line-ups
St Johnstone
- 1Clark
- 19Rooney
- 6Gordon
- 4McCart
- 15McNamaraSubstituted forO'Halloranat 77'minutesBooked at 83mins
- 13BrysonSubstituted forCraigat 82'minutes
- 8DavidsonSubstituted forMcCannat 45'minutes
- 24Booth
- 7ConwaySubstituted forMayat 45'minutes
- 10WotherspoonBooked at 60mins
- 9KaneSubstituted forMelamedat 82'minutes
Substitutes
- 11O'Halloran
- 12Parish
- 14May
- 17Melamed
- 18McCann
- 22Hendry
- 26Craig
- 46Ferguson
Rangers
- 1McGregor
- 2Tavernier
- 6Goldson
- 5Helander
- 31Barisic
- 17Aribo
- 10DavisSubstituted forZunguat 77'minutes
- 18Kamara
- 7HagiSubstituted forIttenat 82'minutes
- 25RoofeSubstituted forMorelosat 64'minutes
- 14KentSubstituted forArfieldat 82'minutes
Substitutes
- 3Bassey
- 9Defoe
- 11Itten
- 15Zungu
- 16Patterson
- 20Morelos
- 26Balogun
- 33McLaughlin
- 37Arfield
- Referee:
- Nick Walsh
Match Stats
- Possession
- Home36%
- Away64%
- Shots
- Home9
- Away10
- Shots on Target
- Home2
- Away5
- Corners
- Home2
- Away5
- Fouls
- Home13
- Away15
Live Text
Post update
Full Time
Second Half ends, St. Johnstone 0, Rangers 3.
Post update
Foul by Cedric Itten (Rangers).
Post update
David Wotherspoon (St. Johnstone) wins a free kick in the defensive half.
Post update
Corner, Rangers. Conceded by Stevie May.
Post update
Attempt blocked. Bongani Zungu (Rangers) right footed shot from a difficult angle on the right is blocked. Assisted by Borna Barisic with a cross.
Post update
Corner, Rangers. Conceded by Jamie McCart.
Post update
Attempt missed. Liam Craig (St. Johnstone) right footed shot from outside the box is too high. Assisted by Liam Gordon following a set piece situation.
Post update
Foul by Scott Arfield (Rangers).
Post update
David Wotherspoon (St. Johnstone) wins a free kick on the left wing.
Post update
Attempt missed. Alfredo Morelos (Rangers) right footed shot from the centre of the box misses to the left.
Dismissal
Second yellow card to Michael O'Halloran (St. Johnstone) for a bad foul.
Post update
Borna Barisic (Rangers) wins a free kick in the defensive half.
Post update
Foul by Michael O'Halloran (St. Johnstone).
Substitution
Substitution, St. Johnstone. Liam Craig replaces Craig Bryson.
Substitution
Substitution, St. Johnstone. Guy Melamed replaces Christopher Kane.
Substitution
Substitution, Rangers. Scott Arfield replaces Ryan Kent.
Substitution
Substitution, Rangers. Cedric Itten replaces Ianis Hagi.
Booking
Michael O'Halloran (St. Johnstone) is shown the yellow card for a bad foul.
Post update
Alfredo Morelos (Rangers) wins a free kick in the defensive half.