Существуют ли значительные издержки при повторном вызове C ++ в v8 JavaScript? - PullRequest
0 голосов
/ 25 августа 2018

Я хочу разработать игровой движок JavaScript, который использует C ++ в качестве бэк-энда для рендеринга / обновления / столкновения и т. Д. Практически все тяжелые вещи.

Тогда были бы классы / функции C ++, которыемогут быть изменены путем изменения переменной isolate (или, может быть, просто нативный модуль nodejs).Некоторые из этих классов, например класс Sprite, могут иметь свою функцию update, переопределенную подклассом JS, чтобы позволить пользователям настраивать поведение.

Наконец, игровой движок будет работать в циклев JavaScript, но каждый фрейм будет вызывать контекст C ++ для обновления / рендеринга, и все вещи ПЛЮС будет множество вызовов для проверки ввода, столкновения и т. д. Не говоря уже о всех обратных вызовах, которые каждый подкласс будет делать дляродительские классы, написанные на C ++.

Меня беспокоит то, что я прочитал, что при вызове C ++ из контекста JS (будь то ffi или нативные модули) возникают значительные издержки (больше, чем обычно).Обычно это того стоит, но, учитывая, сколько вызовов будет выполняться между двумя языками в каждом кадре, возможно, это не лучшая идея?Вместо этого, может быть, что-то вроде Python будет более подходящим из-за его нулевых накладных расходов (хотя Python в целом намного медленнее) или из-за другого интерпретатора JS, вместе взятых?

1 Ответ

0 голосов
/ 26 августа 2018

Этот ответ будет очень субъективным, из наблюдений моего опыта я бы не сказал, что они очень строгие, я сам сейчас прорабатываю эту проблему, и я не проверял свои утверждения с помощью эталонных тестов.Тем не менее ...

Да, звонки из JS в C ++ относительно дороги.Конечно, больше, чем звонки внутри чистого JS.Фактически, это значительно больше, чем звонки в другом направлении, от C ++ до JS.Я предполагаю, что основной причиной неэффективности является то, что механизм javascript теряет некоторые возможности оптимизации.

Однако, если вы придерживаетесь механизма V8, вызовы из JS в C ++ будут намного быстрее, чем вызовы в любой другойязык.

...