performance: Depends on what you're doing, but in general, ->C compilers (Stalin, Bigloo, Gambit, Chicken) come at the top, with Stalin somewhat faster than the others; some compilers (mzc) are on par with fastest interpreters. Interpreters fall in three classes, fast (Racket, Gauche, RScheme, STklos), intermediate (Scheme48, scsh, SCM, MIT Scheme, Guile 2.0) and rather slow (guile1.6). guile1.4 is yet slower.
standards compliance: Scheme48 and its offspring scsh are "bare-bones" but very standards-compliant, whereas MIT Scheme and guile are standards-compliant but provide oodles of extensions. Racket the language is close to R5RS but not intended to be compliant, and includes R5RS and R6RS languages. SIOD (& SCM?) and other "older" implementations tend to have their own way. RScheme lacks R5RS macros, STklos lacks real continuations; Gauche has a very specific limitation to call/cc, but is quite standards-compliant in other ways. STklos and MzScheme have very wide SRFI support.
extensions: Racket has the kitchen sink and MIT Scheme also has a lot of stuff. Some of it is common lisp like, some of their own, some well designed, some not. guile is very practical, providing stuff for "script hackers" (like lots of OS bindings). Scheme48 and scsh are puristic, only extending standard Scheme with the most essential stuff and well-accepted SRFI's. Gauche, RScheme and STklos all share a strikingly similar attitude, embedding R5RS into a tiny CLOS-like object system. Gauche is oriented towards character sets and string processing, STklos towards providing bindings for "cool" libraries. Every implementation seems to have some kind of module system, from the theoretical (Scheme48, scsh) to the mundane (Gauche, RScheme, STklos, guile).