すでに出てるけどあらかじめシャッフルした山札を用意しておくと
ゲーム開始時に若干のローディングはいるだろうけど
ゲームプレイ中はサクサク動作するはず

別の方法をひとつ考えてみた
カードを引いたときに可変DBを上に詰めるっていうやり方
ループ等は使ってないので動作は軽いはず

○カードの残り枚数を N と仮定する(初期値は52)
○適当な可変DBの[データ番号1〜52]に[代入値1〜52]を代入

1.[乱数1〜N]で適当なデータ番号を選んで、そこに入ってる代入値を取得
(例:データ番号18を選んだなら18を取得)

2.データ番号のN番目にある数字をいま選んだところに代入
(例:データ番号18に52を代入)

3.N を 1 減らす

これで1〜52のうちまだ選んでない数を取得できるから
後は適当なユーザーDBにカードと数の対応表でも作って
どのカードを選んだのかゲームに反映させるといい