Added basic caching for canvases

Note: doesn't update correctly