I'm using the SKTAudio library given by Ray Wenderlich on his Github. Here's the code I've modified for playing a sound effect that I call everytime I play one:
public func playSoundEffect(_ filename: String) {
    let url = Bundle.main.url(forResource: filename, withExtension: nil)
    if (url == nil) {
        print("Could not find file: \(filename)")
        return
    }
    if !UserDefaults.standard.bool(forKey: "soundOff"){
    var error: NSError? = nil
    do {
        soundEffectPlayer = try AVAudioPlayer(contentsOf: url!)
    } catch let error1 as NSError {
        error = error1
        soundEffectPlayer = nil
    }
    if let player = soundEffectPlayer {
        DispatchQueue.global(qos: .background).async {
            player.numberOfLoops = 0
            player.prepareToPlay()
            player.play()
        }
    } else {
        print("Could not create audio player: \(error!)")
    }
    }
}
I'm using this because this way I can mute the sound effects easily, since this is using a singleton class method. The thing is, this produces minor lag everytime I play a sound effect. If I mute the game, no lag. I tried making the sound play in a background thread, but the result is the same.
Is there any easy change to this code to make it have NO LAG?
EDIT: This is not a duplicate because none of the other answers on other questions solved my problem.