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