самый быстрый скриптовый язык программирования?

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

Тесты языковых перестрелок, которые на самом деле не связаны с веб-приложениями.

Кого бы вы порекомендовали в качестве наиболее подходящих кандидатов?

Спасибо!


Друг предложил сервер gwan в IRC. Похоже, это то, что я искал, но я никогда не слышал об этом раньше. У кого есть опыт работы с этим пакетом? Простота использования, надежность?

Прежде чем я покину Apache, я хотел бы узнать ваше мнение.


person Michi    schedule 11.08.2010    source источник
comment
Вы говорите конкретно о серверном программировании?   -  person Adam Crossland    schedule 11.08.2010
comment
Используйте свой любимый серверный язык сценариев в обычных областях и делайте важные для производительности вещи на C и вызывайте их из своего сценария.   -  person Amarghosh    schedule 11.08.2010
comment
это не только субъективно, у него также есть несколько дубликатов на SO, пожалуйста, используйте поиск. О, и укажите свои требования более четко, если вы хотите получить четкие ответы.   -  person SpliFF    schedule 11.08.2010
comment
что это за веб-приложение, то есть какие данные/обработка оно будет выполнять?   -  person Jagmag    schedule 11.08.2010
comment
Да, это серверное программирование. И нет, я не считаю выступления чем-то «субъективным». В основном будет происходить обработка изображений и шифрование.   -  person Michi    schedule 11.08.2010
comment
Связанный: stackoverflow.com/questions/3502896/   -  person Benjol    schedule 18.08.2010
comment
Так почему же это должен быть язык сценариев? обработка изображений и шифрование не выглядят так, как будто они выигрывают от динамической природы языков. Но, может быть, вы спрашиваете, какой язык имеет наиболее эффективные расширения/функции (обычно написанные на C) для выполнения таких задач?   -  person StaxMan    schedule 11.01.2011


Ответы (9)


Если производительность важнее всего остального, не используйте язык сценариев. Тем более, что у вас есть полный контроль над стеком технологий. Скомпилированные языки будут работать лучше для операций с интенсивным использованием ЦП.

person marr75    schedule 11.08.2010
comment
или написать библиотеку расширения C (или другого скомпилированного языка) для какого-либо языка сценариев, чтобы получить лучшее из двух миров. - person kriss; 11.08.2010
comment
Сценарии являются обязательным требованием, поскольку исходный код веб-приложения должен быть постоянно доступен в целях безопасности (чтобы супервизоры могли проверить, не было ли вмешательства изнутри или снаружи). - person Michi; 11.08.2010
comment
Мичи, значит, скорость на самом деле не главный приоритет? Вы должны быть в состоянии более или менее проверить исполняемые файлы, используя MD5-хеш или что-то подобное, что позволит вашим руководителям проверить, не было ли фальсификации. - person Rob; 11.08.2010
comment
@Michi: и если вы не пойдете по пути, предложенному @Rob (или какому-либо эквивалентному пути), будет очень трудно гарантировать, что не было взлома на уровне модулей веб-сервера или на уровне ОС (и человек-наблюдатель чтение исходного кода не является эффективным способом проверки того, что файл все равно не изменился). Будут ли они каждое утро читать код приложения, чтобы убедиться, что ничего не подделано? Звучит смешно. - person kriss; 11.08.2010
comment
Идея Роба с MD5 — гораздо лучший способ аудита изменений файлов кода, и на самом деле скомпилированные файлы добавят еще один уровень сложности к изменению кода. В целом, это кажется довольно глупым требованием безопасности и еще более глупым способом справиться с этим. Если ваши супервайзеры обеспокоены тем, что код может быть злонамеренно изменен внутри компании, им следует настроить систему, которая автоматически уведомляет их об изменении хэшей файлов. - person marr75; 12.08.2010

G-WAN — это аккуратный веб-сервер: он основан на концепции «скриптов C»:

Сценарий C — это просто исходный код C, который компилируется веб-сервером, а затем загружается в защищенную память. Он будет вызываться веб-сервером, когда будет сделан запрос к сервлету. Сервлет, скомпилированный компилятором C, "так же быстр", как и обычная компиляция программы C. Однако преимущество сценариев C перед, например, CGI или FastCGI заключается в том, что скомпилированная программа находится в том же пространстве памяти, что и веб-сервер. Это уменьшает накладные расходы на связь (либо путем создания процесса, в случае CGI, для каждого запроса, либо сокета для FastCGI).

Веб-сервер использует метод выбора/опроса: неблокирующий ввод-вывод. Тем не менее, есть опрятная вещь. Каждая программа может быть написана так, как если бы она использовала блокирующий ввод-вывод. Поскольку веб-сервер сам компилирует каждый сценарий C, он может преобразовать программу для использования неблокирующего ввода-вывода. Благодаря этому он может связываться со сторонними библиотеками (например, доступ к базе данных) и по-прежнему использовать неблокирующий характер ввода-вывода: без переключения контекста потока/процесса.

Инструменты, предоставляемые для программирования сценариев C, — это, например, кэширование и безопасные буферы. Следующая (еще не выпущенная на момент написания этого поста) версия также будет включать хранилище ключей и значений.

С точки зрения производительности: есть несколько доступных тестов, показывающих, что он превосходит любой другой веб-сервер, однако я им не доверяю. Попробуйте написать небольшую программу, интенсивно использующую процессор, на C и, например, на PHP. Пусть сценарий C работает в G-WAN, а сценарий PHP — в Apache, а сами выполните тест производительности.

Это еще не все, но это выходит за рамки этого вопроса.

Некоторыми недостатками G-WAN является то, что он разработан только одним человеком. Но есть форум, где можно задавать вопросы.

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

Если вы хотите быть в безопасности: используйте независимость C от платформы: разрешите компилировать ваш код в программы (Fast)CGI, а также использовать G-WAN. В случае сбоя G-WAN вы всегда можете вернуться к Apache (Fast)CGI (см. http://www.fastcgi.com/ для API).

person Pindatjuh    schedule 23.06.2011
comment
Существуют независимые эталонные тесты, показывающие те же результаты, поэтому ваше доверие не имеет к этим фактам никакого отношения: rootusers.com/web-server-performance-benchmark здесь Apache, Nginx, Lighttpd, Varnish, Litespeed, Cherokee и G-WAN тестируются на ядрах ЦП 1/2/4/8. - person Gil; 14.10.2012

Javascript постоянно изучается и оптимизируется для использования на мобильных устройствах, поэтому на реальных полноразмерных серверах он работает ОЧЕНЬ быстро. Ознакомьтесь с Node.JS, проектом реализации javascript на стороне сервера для обслуживания веб-страниц: http://nodejs.org/

person pokstad    schedule 09.03.2011
comment
Node.js работает быстро только в PR-статьях: gwan.ch/blog/20121027.html - person Gil; 15.11.2012

Начните с определения того, действительно ли производительность вашего приложения зависит от языка или от какого-либо другого фактора (например, от запросов к базе данных). Возможность кэширования результатов также может быть очень важным фактором.

Что касается производительности, то используемый язык стоит далеко в списке важных моментов, которые необходимо проверить, и вариант использования также влияет на то, какой язык лучше. Например, если у вас есть много регулярных выражений для проверки, вы должны проверить поддержку регулярных выражений на языке-кандидате и т. д.

Для обработки изображений наиболее важным моментом, вероятно, будет используемая вами базовая библиотека изображений, обычно написанная на C. Я имею в виду случай ImageMagick, потому что в настоящее время я использую его. Он доступен в качестве библиотеки для большинства языков, а уровень языка сценариев необходим только для вызова функций библиотеки, и используемый язык на этом уровне не сильно изменится (но кэширование предварительно вычисленных изображений результатов может значительно изменить производительность). Этот вариант использования, вероятно, будет аналогичен вызову криптографической библиотеки.

Если производительность действительно является такой проблемой, для обработки изображений вы также можете рассмотреть возможность использования библиотеки, которая работает с картами ускорителей GPU (библиотеки с поддержкой cuda или openGPU).

person kriss    schedule 11.08.2010
comment
Спасибо, но ImageMagick (очень многофункциональный пакет) слишком большой и не такой быстрый. - person Michi; 11.08.2010
comment
@Michi: я не предлагаю использовать его, просто у большинства библиотек должны быть тонкие слои для доступа к ним из языков сценариев, найти нужную библиотеку, проверить доступность слоя. Надеюсь, вы не ожидаете более высокой производительности от кода обработки изображений, написанного с использованием какого-либо языка сценариев? - person kriss; 11.08.2010
comment
По моему опыту, это действительно зависит от того, кто написал код: я повсюду вижу отвратительный код на языке C, позволяя другим языкам делать нелепые заявления. - person Gil; 15.11.2012
comment
Да, ты прав. Вы можете сравнивать вещи только для одинакового уровня навыков программиста. Это важный фактор, который следует проверить перед сменой языка: действительно ли он медленный или я слишком тупой, чтобы использовать эффективные доступные инструменты. Обычно переход на менее освоенный язык программирования не является хорошим шагом. Шансы написать более эффективную программу таким образом довольно малы. - person kriss; 15.11.2012

Что ж, если вы используете базу данных с большим объемом данных, вы потратите на это больше времени, чем на запуск скрипта php, asp или (вставьте здесь другие разновидности) скрипта
Если вы можете, вам следует создать макет вашего приложения (или в по крайней мере, сегмент более ресурсоемких частей базы данных или процессора) и попробуйте сравнить их

person vlad b.    schedule 11.08.2010
comment
Спасибо за ответ. На самом деле база данных не задействована, только обработка изображений и другие задачи с интенсивным использованием процессора, такие как шифрование. - person Michi; 11.08.2010
comment
Затем я бы сравнил встроенные в язык функции с запуском программ из командной строки, по одному и в пакетном режиме.... ‹br›‹br› Для параллельной обработки массивных изображений у меня обычно есть небольшой скрипт обработки, который работа и диспетчер процессов, который устанавливает некоторые ограничения на использование процессора/ОЗУ и запускает/приостанавливает/останавливает процессы, чтобы всегда работать с желаемой нагрузкой с 5%-ным пространством для ошибки. ‹br›‹br› Для нарезки файлов и md5-ing я использую аналогичный скрипт, и оба они могут работать одновременно и оставлять достаточно энергии, чтобы apache работал так же быстро, как обычно. - person vlad b.; 12.08.2010
comment
Даже задания БД могут быть ускорены сервером приложений, выступающим в роли кеша. - person Gil; 14.10.2012

LuaJit (Lua) — самый быстрый язык сценариев с технологией JIT.

если вам нужно самое быстрое веб-приложение на стороне сервера (которое не всегда скриптует), это будет g-wan.. вы можете использовать c, c++, java..

ASP.NET также достаточно быстр практически для всего, но довольно дорогой.

php с хип-хопом было бы проще всего выучить, а также достаточно быстро.

это зависит от того, сколько запросов вам нужно.. и как быстро вы изучаете язык ^^ не забывайте кэшировать статические данные (используя memcache или nosql)

person Kokizzu    schedule 12.03.2012

Обновление: кажется, что Java 7 с использованием NIO.2 удалось превзойти Gwan с использованием C, но почти в 2 раза по времени, это невероятно, но вы можете провести несколько простых тестов.

Единственным недостатком Java является то, что он не может интегрировать разделяемые библиотеки, построенные на C. Я готов бросить вызов кому-то, кто докажет, что я не прав, что Java NIO.2 медленнее, чем C.

person James ONG    schedule 25.01.2012
comment
уверен, что он может вызывать библиотеки c. когда-либо слышал о JNA (или даже о более раннем JNI) - person mata; 03.05.2012
comment
Java NIO намного медленнее, чем G-WAN+Java: gwan .ch/blog/20120809.html#hello.java - person Gil; 15.11.2012

Я рекомендую язык программирования Java; это не язык сценариев, но, вероятно, это самый быстрый язык программирования, который можно использовать для программирования веб-приложений. Я также рекомендую использовать фреймворк, такой как Spring, для лучшего опыта программирования (по сравнению с «сырым» программированием сервлетов Java).

person Mr. X    schedule 11.08.2010
comment
Хм... мои ранние (грубые) тесты показывают, что Java быстрее, чем C#, но медленнее, чем PHP для того, что я пытаюсь сделать. - person Michi; 11.08.2010
comment
Java быстрее в некоторых проблемных областях, некоторых функциях, некоторых конфигурациях, но медленнее в других. Зависит также от вкуса Java и соответствия аппаратного обеспечения. Во всех смыслах и целях java и asp.net имеют одинаковый порядок скорости, PHP определенно медленнее (хотя эксперименты с компиляцией языков сценариев дают многообещающие результаты). - person marr75; 12.08.2010
comment
Обычно Java достаточно быстр для большинства задач. Он не медленнее, чем PHP, для любой задачи, о которой я знаю, однако возможно, что расширения PHP (написанные на C) могут быть быстрее для некоторых задач. - person StaxMan; 11.01.2011

Быстрый язык сценариев — это ASP, за которым следует PHP, но если вы хотите, чтобы приложения масштабировались до неограниченной скорости, используйте C++ или Java. Google Search использует C++ Gmail использует Java YouTube = Python Twiiter раньше использовал Ruby, теперь они перешли на Java Facebook = PHP на интерфейсе и немного Java на сервере

Но я рекомендую PHP во внешнем интерфейсе и C++ во внутреннем.

person Silas Akudo    schedule 03.05.2012
comment
Не могли бы вы предоставить некоторые контрольные показатели, подтверждающие ваши утверждения? Сейчас нет возможности проверить ваши комментарии. - person Paul Hiemstra; 03.05.2012
comment
C#/Mono медленнее, чем PHP... если только не обслуживается G-WAN: см. gwan. ch/blog/20120923.html#loan.cs и gwan.ch/ блог/20121021.html#hello.php - person Gil; 15.11.2012