use Object.keys() instead of for ... in
issue #19 support async filter cache
v0.2.17