Tested against the WebKit git repo by entering the repo with 1 file dirty.
git diff --quiet --ignore-submodules HEAD
# Will tell if there are any uncomitted changes, staged or not.
0.6 sec
git diff-index --quiet HEAD
# Only tracked
2 sec
git diff --shortstat
8.2 sec
git status --porcelain
42 sec
zstyle ':vcs_info:*' check-for-changes true
50 sec
True, but the only
git status --percelain
will do that, and it's sloooow.