Google Планета Земля в браузере с помощью WebAssembly


WebAssembly — это самое захватывающее, что происходит на данный момент, и, несомненно, станет следующим большим событием — если это еще не так. Теперь Google продемонстрировал возможности переноса Земли в браузер в WebAssembly.

Вы, должно быть, слышали о WebAssembly к настоящему времени, но это низкоуровневый язык, который обеспечивает скорость и эффективность, близкую к нативному коду. Он запускается в браузере как часть системы JavaScript. Вы не можете избавиться от JavaScript и написать чистый WebAssembly (пока?), Потому что JavaScript действует как поток пользовательского интерфейса и выполняет все взаимодействия с пользователем.

Google Планета Земля — это сложное картографическое приложение, которое загружает фрагменты фотографий в фоновом режиме и позволяет пользователю в интерактивном режиме перемещать точку обзора. Исходный дизайн выполнял всю загрузку в фоновом режиме, поэтому многопоточный дизайн в WebAssembly имеет важное значение. Не все браузеры предлагают многопоточность, и, в частности, Firefox просто пришлось отключить ее из-за уязвимости, обнаруженной в SharedArrayBuffer. В блоге Google объясняется:

«Браузеры на основе Chromium, включая Chrome, предстоящую версию Edge и Opera, все предлагают поддержку WebAssembly (некоторые с многопоточностью, другие без). Как только новая версия Edge на основе Chromium будет выпущена, приложения в WebAssembly будут работают в Edge так же хорошо, как и в Chrome. Firefox предлагает хорошую поддержку WebAssembly, но ему пришлось отключить поддержку многопоточности из-за проблемы с SharedArrayBuffer. И хотя Opera основана на Chromium, текущая версия Opera предлагает только одно- многопоточная поддержка WebAssembly. Safari имеет сильную реализацию WebAssembly, но не имеет полной поддержки WebGL2 ».

В общем, как бы красиво они ни пытались это выразить, это «Лучше всего работает только в Chrome». К сожалению, я должен признать, что у меня складывается такое мнение, что Chrome настолько опережает другие браузеры, что, если вы хотите использовать даже немного передовые технологии, вы вынуждены его использовать. Неужели Google вкладывает в Chrome гораздо больше возможностей программирования, чем остальные?

Итак, что включало в себя преобразование? Earth — это приложение C ++, и верный компилятор Emscripten сделал работу по его преобразованию в WebAssembly. Это далеко не просто перевод C ++ на WebAssembly. Компилятор также должен преобразовывать вызовы POSIX во что-то, что работает в браузере. Он также преобразует вызовы OpenGL в WebGL. В конце концов, вам все равно нужно проделать некоторую ручную работу, чтобы код работал правильно.

Сообщение в блоге Google также предлагает, что может быть дальше для WebAssembly:

Поддержка SIMD

Динамическое связывание

Лучшая отладка

Лично я хотел бы упростить использование WebAssembly. Сообщение blob предлагает:

Подумайте о том, чтобы опробовать WebAssembly для себя и своего нативного кода, чтобы обеспечить единообразную и эффективную работу со всеми вашими пользователями.

Если вы все же попробуете, то обнаружите, что техническая задача намного выше, чем просто написание JavaScript. Это нормально, если вы программист на C ++ и хотите преобразовать существующее приложение в WebAssembly, но не очень хорошо, если у вас есть новое приложение, которое вы хотите написать в WebAssembly. Было бы безумно реализовать его на C ++, а затем использовать Emscripten. Есть другие компиляторы и инструменты, но ничего, что выглядело бы достаточно стабильным, чтобы делать ставку на будущее.

Если вас интересует WebAssembly, я бы все же уделил ему немного времени, прежде чем пытаться что-нибудь сделать с in.

Пора группе WebAssembly обратить внимание на инструменты — Emscripten не является или не должен быть единственным компилятором верхнего уровня.

Ян Эллиот — автор книги «Просто JavaScript: идиоматический подход»; JavaScript Async; Просто jQuery: Core UI и Just jQuery: Events, Async & AJAX, которые являются частью библиотеки I Programmer Library, опубликованной I / O Press.


Добавить комментарий