Я вроде бы нашёл в чем причина.
Во-первых, методом тыка было определено, что если закомментировать строку 97:
drawBoard();
То никаких тормозов в Opera не наблюдается.
Во-вторых, если в глобальную переменную
gridOn записать
false, то тормоза тоже исчезают.
Ну и в-третьих, оказалось, что достаточно добавить после 127-ой строки
gDrawingContext.beginPath();
И тормоза исчезают в Opera навсегда.
Мне кажется, что если не вызывать
beginPath, то Opera запоминает все созданные с помощью
lineTo линии при каждом вызове
drawBoard. И когда вызывается
stroke() то рисуется сетка от всех предыдущих кадров вместе взятых. Эту гипотезу нужно ещё проверить. Но судя то тому, что вызов
beginPath исправляет проблему производительности, Я думаю, дело именно в этом.