optimize canvas

* only draw map when necessary
* only redraw parts that change on each step