2012-06-16 2 views
4

От http://nodejs.org/api/vm.html:NodeJs VM - сохранить скомпилированный код ... на диск?

JavaScript код может быть скомпилирован и запустить немедленно или скомпилирован, сохранены и запустить позже. [...] Возвращаемый скрипт не привязан к глобальному объекту. Он связан перед каждым прогоном, только для этого запуска.

И тогда в API нет метода, который возвращает любые байты, ничего. Просто объект «Сценарий».

Итак, прежде чем я вежливо оторву этот стол под моими руками, есть ли способ, которым я могу на самом деле SAVE скомпилированный скрипт, на диск? Я считаю, что это обычные обычные двоичные данные, может быть, синтаксическое дерево или что-то еще.

+0

Зачем вам нужно сохранять его на диск? Что вы намерены делать с этим? Вы понимаете, что весь javascript интерпретируется в памяти при загрузке, а затем двигатель действительно никогда не перечитывает файл для обработки команд. Компиляция - это чтение. – jcolebrand

+1

Я фактически планировал продать двоичный результат в качестве приложения nodejs с близким исходным кодом. –

+0

Оооо, хорошо, спасибо за разъяснение этого, потому что мы можем адаптировать наши ответы _specifically_ к вашим потребностям, если вы дадите их нам, вместо того, чтобы нас угадать (как вы это делали здесь). Я ожидал большего от кого-то с золотым значком для «Unsung Hero» и 1400 rep. – jcolebrand

ответ

4

функции вы Ссылочные для JavaScript которые управляют JavaScript в новом контексте (так что он может быть безопасным, новые функции и т.д.) ... не столько сохранение предварительно скомпилированных двоичная ...

Если вам нужна информация о том, как реально перезагрузить предварительно скомпилированный скрипт, вы можете посмотреть на источник node.js. Сам файл «node.js» предварительно скомпилирован и загружен как двоичный файл (если вы построите его с помощью этой опции). При этом узел запускается быстрее.

Однако вы должны иметь в виду, что для этого мало преимуществ, если вы не задумаете какой-то конкретный процесс (например, node.js) с использованием библиотеки V8, которая будет запускать/останавливать/запускать/останавливать ... и т. д. Причина заключается в том, что библиотека V8 будет только компилировать ваш сценарий один раз - и затем будет выполнять его как машинный код каждый раз после этого или до тех пор, пока работает библиотека V8.

Предварительная компиляция и загрузка в виде двоичного файла приведут к некоторым существенным недостаткам, в том числе к зависящему от вашей программной архитектуры (даже к 32-разрядной версии x86 и x86_64) и т. Д. Итак, это не может быть лучшим дизайнерским решением.

+1

Я, как и вы, надеюсь, это то, о чем спрашивал OP. Теперь я грустный панда, я не набирал этот ответ первым – jcolebrand

Смежные вопросы