Родное дополнение узла, зависит от V8 - PullRequest
0 голосов
/ 20 марта 2019

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

Предположим, я создавал приложение Electron.По соображениям производительности некоторые функциональные возможности будут записаны в собственном коде в независимой библиотеке, которая будет вызываться из собственного дополнения Node.Нативная библиотека должна выполнять JavaScript.Итак:

Приложение Electron -> Родная надстройка -> Собственная библиотека -> V8

Во-первых, возможно ли это?Например, будет ли попытка создать / запустить контекст V8 неудачной из-за его выполнения внутри контекста Electron V8?Я думаю, тупики, прерывания и т. Д.

1 Ответ

0 голосов
/ 21 марта 2019

Я разработал план действий из комментариев к основному вопросу. К сожалению, это затрудняет кредитование конкретного пользователя или комментария за ответ. В частности:

  • Реструктуризация потока данных. Позвольте Native Add-on использовать свою копию V8 для выполнения любого необходимого JavaScript, вместо того, чтобы представлять его как зависимость от Native Library. ( комментарий )
  • Поддерживается ввод отдельного V8 Isolate в другом. ( комментарий ) ( документы )

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

  • Анализ двоичного файла. Из-за скорости V8 это, вероятно, может быть сделано в самом приложении Node.js и может быть быстрее, чем маршалинг данных через языковые барьеры. Если нет, я мог бы рассмотреть N-API Native API для анализа документа и возврата объекта JS, представляющего проанализированные данные. ( комментарий )
  • Выполнение JavaScript на уровне документа. Это должно быть выполнимо в родной надстройке, введя отдельный изолятор V8. (См. Выше.)
  • Рендеринг документа на холст / растровое изображение. Это неизвестно, так как оно продиктовано производительностью рисования, состоящей из сложных путей и т. Д. Я, вероятно, сначала попытаюсь сделать это непосредственно в приложении Node.js, и если оно не достаточно производительно, то я рассмотрю что-то вроде N -API Native Add-On с, например, Skia как зависимость для рендеринга данных.
...