add template cache
add tests for template cache