Why is `zfs list -t snapshot` orders of magnitude slower than `ls .zfs/snapshot`?
zfs list -t snapshot
always takes many orders of magnitude more time to run than ls .zfs/snapshot
You're also comparing two completely different operations.
zfs list -t snapshot
enumerates all the ZFS snapshots on the system - and provides a lot of information about those snapshots, such as the amount of space used. Run that under strace
to see the system calls made.
ls .zfs/snapshot
is just emitting a simple name list from a directory. There's nothing to do other than read the names - and provide nothing else.