Любой разумный разработчик просто использовал бы растровое изображение (хранящееся внутри в браузере) и рисовал его, используя собственные команды рисования ОС.
Почему это важно? Это совсем не связано с HTML + CSS, если это то, что вам интересно.
Более подробно, ради деталей:
Когда анализатор HTML браузера видит элемент canvas (заданной ширины и высоты), ему необходимо выделить экранное растровое изображение, чтобы покрыть эту область. Он либо делает это вручную (то есть malloc ()), либо вызывает некоторый собственный API рисования ОС, чтобы создать поверхность для рисования. Нативным API операционной системы может быть Windows, Gtk, Kde, Qt или любая другая библиотека чертежей, выбранная разработчиком браузера. Кроме того, это сильно зависит от операционной системы. Internet Explorer, вероятно, вызывает какую-то собственную библиотеку Windows (например, DirectX или WinFooBarMethod ()).
Как только поверхность рисования создана, она становится доступной внутренним внутренностям интерпретатора JavaScript, вероятно, через указатель или дескриптор созданной поверхности рисования. Затем, когда интерпретатор JS видит вызов одного из методов canvas, он превращает его в вызов соответствующей собственной команды ОС.
Итак, используя метафору стиля Windows 3.1:
"new canvas(width, height)" = "WinCreatePixmap(width, height)"
"canvas.setPixel(x,y,color)" = "WinSetPixel(x,y,color)"
И используя вручную управляемое растровое изображение:
"new canvas(width, height)" = "malloc(width * height * sizeof(Pixel))"
"canvas.setPixel(x,y,color)" = "canvas[x][y] = color;"
Опять же, для разработчика JavaScript не должно иметь значения, как эти методы реализованы. Единственные люди, которым нужно заботиться, это те, кто пишет HTML5-совместимые веб-браузеры с поддержкой canvas.