It should take about 10-15 minutes to play. You might need to play it more than once to see all the content. Please check it out, and let us know what you think.
I initially tried an implementation similar to yours, but quickly realised it's impossible to get acceptable performance when you're updating all the tiles.
For my solution, I used tiles with two frames (one is "fog", one is the actual tile).
Then the key to good performance is that, when you move, you must only change the tiles that are affected by the movement. So if you press Right, then change 1 column of tiles to the right to be visible, and change 1 column of tiles to the left to be fog (only changing the number of tiles vertically matching your visibility diameter).
It's basically impossible to update a whole screen of tiles and expect to have a good frame rate.