Improved performance with canvas buffering