JavaScript

индекс
246,46

ServerSideJS: теперь проще просто. Встречайте v8cgi!

v8cgi — обертка для JS-движка v8 от гугла. Меня попросили его поставить на сервер и он меня приятно удивил непредсказуемо малой прожорливостью и удобством эксплуатации.

Итак, задачи:
1. Собрать v8
2. Собрать v8cgi в том числе как модуль апача
3. Настроить апач.
4. Выпить чаю с карамельками по этому поводу.

v8


Необходимо: питон, subversion и scons(gcc есть везде).
Для неопытных: в debian подойдут пакеты svn, scons, python-minimal

Забираем исходный код с SVN
svn checkout v8.googlecode.com/svn/trunk/ v8-read-only
и, перейдя в полученную папку, запускаем конструктор.
scons library=shared
Копируем свежесобранный файл (libv8*.so) в /usr/lib/libv8.so

cgi


Надо: библиотеки apache, mysql и GD
(пакеты deb: libmysqlclient15-dev libgd2-dev apache2-threaded-dev )
Опционально: sqlite и fastcgi ( libfcgi-dev libsqlite3-dev)
Обязательно исправляем примерно на 58 строке файла Sconfigure ../v8 на ../V8, иначе конструктор будет недоволен.
Собираем:
scons module=1 sqlite=0 fcgi=0

Собрано. Имеем 2 файла: mod_v8cgi.so и v8cgi, копируем их в /home/v8, а содержимое каталога lib в /usr/lib/v8cgi.
Конфиг libv8cgi.conf.posix скопируем в /etc/v8cgi.conf

Apache


добавим 3 строчки с кофиг и модуль заработал.
LoadModule v8cgi_module /home/v8/mod_v8cgi.so
v8cgi_Config /etc/v8cgi.conf
AddHandler v8cgi-script .ssjs


По поводу запуска как cgi программы.
scriptAlias /ssjs/ /home/lazutov/ssjs/
AddHandler v8cgi-handler .ssjs
Action v8cgi-handler /ssjs/v8cgi

В еррорлоге v8cgi ругается на неверные заголовки и ожидаемо падает 500 ошибкой. Руки, что поделаешь :)

Заключение


v8cgi заработал с непредсказуемо малым расходом памяти — 20-30 мб, против ожидаемых 70-100.
JS получил еще одно пинковое ускорение в развитии уже в совершенно другом качестве. Перспективы? Горизонты? Время покажет.
Чай
.
Ой. карамелек нет. Нет и чая.
Есть очень кислая вишня. Зальем ее кипятком и отправим в организм немного витаминов :) Кстати неплохо, рекомендую.
+29
7 августа 2009, 01:13
33
la0

комментарии (45)

+26
Lalartu #
Javascript на стороне сервера, python и ruby на стороне клиента — вот он, перевернутый мир.
+13
Zada #
Как вам такое: веб-сервер на Javascript, запущенный в вашем браузере и использующий комет-соединения дло ответа на входящие HTTP запросы черес Reverse HTTP Proxy?

www.reversehttp.net/demos/demo.html via simonwillison.net/2009/Jul/21/reversehttp/
–1
Gospodin #
Это вы про Opera Unite? :)
+2
alkhankhel #
Ага, в серверных языках программисты стараются абстрагироваться от SQL диалекта, а вот в YQL наоборот в JS вносят SQL диалект ;)
+3
ApeCoder #
во впремена браузера Netscape Navigator уже был сервер сайд js от той же фирмы Netscape.

Щас по ссылкам нашел только книжку
www.amazon.ca/Official-Netscape-Server-Side-Javascript-Applications/dp/1566047455
0
lugansk #
Так и ASP от MS изначально был по сути попыткой скопировать нетскейповский SSJS (как jscript попыткой скопировать их же javascript), разве что MS организовали одновременную поддерку не только JS на сервере, но и VBscript.
0
darkstyler #
для связи с DOM, Gestalt просто транслирует код python и ruby на тот же javascript
0
ApeCoder #
а еще в Python под виндой есть Activescripting host, так что счастливые пользователи IE могут использовать CPython в браузере
0
catbegemot #
Дождались. Осталось только Server-side HTML прикрутить и усё :)

+5
la0 #
SSI называется
0
catbegemot #
Да ладно! Если это не гугл сделал, то не считово!

(сверху — это шутка была, если вдруг не понятно)
+1
yuretsz #
Хотелось бы на бенчмарки глянуть.
+4
ScREW #
Автор, обращаюсь к вам. По всей видимости, раз вы установили этот интерпретатор у себя на машине, вы понимаете для решения каких задач он полезен/необходим. А я даже представить себе таких задач не могу. Объясните мне пожалуйста.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
+1
waterhouse #
Без «щитаю — не щитаю» — делал на нем расширение для софтинки на АРМ, в 2006 вроде, работает по сию пору, 24 часа, 7 дней. Достаточно много математики, взаимодействия с Сишным кодом. Дяди с того объекта сейчас реконструкцию затеяли, видимо придется навестить объект, в целях продления его существования. Там и посмотрим состояние. Но жалоб нету.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
0
ScREW #
Что вы имели в виду под «прикрутить скриптинг»? Что делает ваша серверная софтина на ObjectiveC? Можно немного конкретизировать scope?
НЛО прилетело и опубликовало эту надпись здесь
0
haikuos #
Я например выдачу рамблера парсил
Они решили шифровать страницу через JS
0
la0 #
Цель одна, потестить. Других побуждений не наблюдается. Чего-либо написанного под SSJS у меня пока нет.
А бенчмарки, это уже другая история. Постараюсь потестить, как будет время.
0
ApeCoder #
А как там организуется то, что не входит стандарт JS. Например через какой API он работает с файлами?
+4
Kolyaj #
0
la0 #
А вот хз. Сейчас разбираюсь. Доков негусто
0
Kolyaj #
Я вот, например, не нашел в v8cgi удобного способа подключения файлов. Он их непонятно где ищет. В этом плане GLUEscript gluescript.sourceforge.net/ удобней, он умеет брать файлы относительно текущего, а не того, который запустили (банальщина, казалось бы). Автор glue обещает в скором времени перевести его на TraceMonkey (щас SpiderMonkey), тогда скорость может быть сопоставима с v8. Да и расширения языка у мозилы покруче будут, почти Python ))). Но у glue с библиотеками похуже.
–1
blo #
уже давненько существует helma, которая использует js как сервер-сайд язык
+1
linuxoid #
хельма — java приложение. Интерпретация(!) кода ECMAscript осуществляется с помощью надстройки Rhino. V8 — нативно скомпилированный исполняемый файл, который нативно компилирует(!) ECMAscript в инструкции процессора.

Профит очевиден?..
+2
djko #
Отлично! Фреймворк использующий для клиентской и серверной частей одну технологию — Javascript, может показаться странной идеей, но думаю, что он не за горами:). Javascript все еще явно недооценивается большинством.
+1
remal #
Jaxer вам в руки
–3
afi #
ээээ… а зачем все это?
+7
bolk #
Ребята, вы чего как с Луны все упали?

Javascript'а на сервере, как собак нерезанных: en.wikipedia.org/wiki/Server-side_Javascript

Когда существовала ещё компания Netscape со своим браузером, у них был веб-сервер, поддерживающий JS на сервере и даже специальный атрибут у тега script — RUNAT=SERVER.
0
bolk #
В общем, «script» в конце ссылки с большой буквы.
0
ConstNW #
а jaxer который уже более года публичный чем плох?
0
remal #
Он плох прежде всего тем, что слишком прост. Написание чего-либо серьезного превратиться в постоянную борьбу с быдлокодом. В т.ч. и быдлокодом от самого себя.

Также, имхо, существенным минусом является невозможность объявить функцию как используемую и на клиенте, если она является свойством объекта:
func.proxy = true; // все супер
obj.func.proxy = true; // не работает и никаких предупреждений
Но это уже ограничение JS, а не Jaxer'a
0
farcaller #
А что есть такого, что б не просто JS движок, а еще и окружение, DOM, XmlHttpRequest, etc.? Кроме Rhino.
0
Kolyaj #
Зачем браузерное окружение на сервере? Там другое окружение нужно.
0
farcaller #
Cappuccino и сопутствующие тулзы тестить. Сейчас у них все завернуто на rhino, и тормоза на запуске просто бесят
0
remal #
А от чего тормоза? Парсинг? Запуск движка? Сам движок тормозной?
0
farcaller #
Я так подозреваю, что там очень большая инициализация. Не знаю, насколько усложняет этот этап наличие рантайма, но тот же spidermonkey из-под питоновых биндингов работает очень и очень шустро.
0
kosiasik #
А пример хоть одного серьёзного ресурса на js-backend кто-нибудь может привести? =)
0
linuxoid #
Helma хвалилась, что используется. http://dev.helma.org/wiki/Sites+using+Helma/
0
darkk #
Копируем свежесобранный файл (libv8*.so) в /usr/lib/libv8.so

По FHS кошерно копировать самосбор в /usr/local/lib.
0
catdog #
Кстати, v8 не трэдится, пока вообще никак, в официльной рассылке разрабы говорят что пока только в планах сделать его thread safe. При этом если оборачивать его в мутексы то производительнось падает в разы, а в качстве cgi нахрен он такой красивый не нужен.

правда 1 поток у меня на 1 ядре отдает 3500 хэлоу вордов ;-)
вообще встраивать его достаточно гиблое дело. сделанно красиво но все же упирает в трэды

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.