Personally I've always disliked settings panels that apply the moment you click a control. I like being able to hit OK, or better yet, click Apply and see the button then get greyed out as a little visual confirmation that the settings have applied.
I can tell you that that behaviour is learnt. People unfamiliar with classic desktop paradigms find annoying and confusing to have to confirm a choice they’ve already made.
The most intuitive setup, imho, is to apply the change immediately, but also materialize some sort of UNDO button to revert back.
Sometimes you are doing multiple changes at once, at which point it's better to have an apply. Take a game. Change the resolution, delay. Change the textures, delay, Change the shadows, delay. Change vsync, restart. I could wait the 30 seconds between every click twiddling my thumbs, or I could just click it all at once and restart the game.
This makes sense when applying changes is expensive. If applying the changes is cheep (or invisible while the settings dialog is open) then you don't need the confirm step and you can do it immediately or when the dialog is closed.
Windows itself is an offender in that regard - e.g. the setting to select when updates are (and aren't) installed is a modal dialog that itself requires confirmation. And on top of that, it has two time pickers, each of which has separate scrolling columns for hours and minutes, but then you also have to press the "Confirm" button to actually apply changes after you scroll. And if you just click away to get back to the dialog, it 1) doesn't prompt to save changes, and 2) doesn't apply them.
I've found that having a good undo is far, far better than a commit step. I think the best ux would be
- Apply changed immediately.
- Provide indication that the change was applied (maybe pop a checkmark our for a second or two)
- Provide an undo that at least revertes to the state when the dialog was opened, but ideally even be able to recent to snapshots from before previous changes. (So that if you close the dialog then decide you don't like it you can go back).
COMMIT is useful in databases because you have made a "permanent" change and for atomicity reasons. If you make undo effective and there is no concurrent access it is unnecessary.
This is especially annoying on a slower computer that takes time to activate the individual controls. I would rather set them all and then have the PC take a moment to ready.