LINUX.ORG.RU

scala web framework + низкое потребление памяти

 


0

4

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

Play жрет 300 мегабайт минимум, и 700+ на реальном наборе плагинов. (Я не знаю почему столько, уменьшить не удалось. Оно может стартануть и со 150, но потом случится ахтунг. Да и 150 на мой взгляд излишне дофига.)

Пользователь, наверное, не обрадуется софтине, жрущей так много для реализации своих, в сущности, мелочных задач, нарисовать 3 формочки, проиграть 3 видоса.

Хочу нечто минималистичное, что решало бы стандартные вопросы (выдать страничку, обработать рест, выплюнуть хтмл, выплюнуть статику, куки, авторизация)

★★★★☆

Ответ на: комментарий от sventovit

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

stevejobs ★★★★☆ ()
Ответ на: комментарий от anonymous

как-то ссыкотно юзать жавовский фреймворк в скаловской обёртке)

из скаловских решений нашел такое:

Scalatra - http://www.scalatra.org/
Finatra - https://github.com/capotej/finatra
https://github.com/RestExpress/RestExpress

Скалатра даже имеет какую-то документацию. Это кто-нибудь вообще использует?

stevejobs ★★★★☆ ()
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от stevejobs

То ли дело, ява, отжирающая несколько сот мегабайт памяти? ;-)

Как вариант можешь попробовать Луа. Там никаких конфигов, есть свой пакетный менеджер.

sventovit ()

Undertow

Да. Нету легких фреймворков на Scala

vertexua ★★★★☆ ()
Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от sventovit

Тогда уж можно взять node.js или что-нибудь на ерлангое и не парицо, они вообще памяти не жрут. Но я хочу именно Скалу. Это правильный компромисс - с одной стророны, достаточно просто, чтобы потом в коде мог разобраться кто-то кроме меня (unlike clojure, haskell), с другой стороны - на этом можно писать не плюясь (unlike node.js, erlang, java).

stevejobs ★★★★☆ ()

А куда там столько памяти уходит? Не смотрел heap dump?

Надеюсь измерял не в dev mode?

maxcom ★★★★★ ()
Ответ на: комментарий от stevejobs

Реально, если нужно память экономить, то лучше ноду или flask.

На скале чуть-чуть получится экономить если смотреть исключительно голые встроеные Java HTTP сервера

vertexua ★★★★☆ ()
Ответ на: комментарий от stevejobs

Ну и зря. Все библиотеки, которые я видел на Scala, жуткий аццкий переусложненный трэш. Правда, почему-то он сокращается до трех букв DSL.

Сравним хеллоуворлд на скалатре

package com.example.app
import org.scalatra._

class HelloWorldApp extends ScalatraFilter {
  get("/") {
    <h1>Hello, {params("name")}</h1>
  }
}

со спарком

import static spark.Spark.*;
import spark.*;

public class HelloWorld {

   public static void main(String[] args) {
      
      get(new Route("/hello") {
         @Override
         public Object handle(Request request, Response response) {
            return "Hello World!";
         }
      });

   }

}

Кода чуть больше, а магии очень сильно меньше. И кого проще отлаживать, сразу понятно. Да, шаблонизатора тут не видать, ну и фиг с ним, для небольшого-то приложения.

Почему не использовать Java-фреймворк — непонятно. Всегда можно всю сложность описать на Scala, а приклеить ее к фреймворку в одном-единственном Java-файле, который и запускать. Тебе же не нужны авторизации и прочие усложнения?

anonymous ()
Ответ на: комментарий от maxcom

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

stevejobs ★★★★☆ ()
Ответ на: комментарий от anonymous

спасибо что привел примеры

Почему не использовать Java-фреймворк — непонятно.

потому что я не хочу жаву, если можно сразу писать на скале, сразу писать «магически» как ты выразился

Тебе же не нужны авторизации и прочие усложнения?

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

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

stevejobs ★★★★☆ ()
Ответ на: комментарий от stevejobs

А размер скалы тебя не смущает? Я бы что-то встроенное писал бы на Java+Netty без всякой скалы и навелосипедил бы что-нибудь для простейшего роутинга.

Legioner ★★★★★ ()

Не перестаю удивляться. Profit Scala в том что она на JVM и доступны все Java либы. Но многие Scala разработчики гнушаются ими пользоваться, им лучше schoolpodelie_2.10-0.2-SNAPSHOT.jar, лишь бы это был враппер для Scala то же Java либы.

Когда будешь свою задачу решать, а не фреймворки щупать?

vertexua ★★★★☆ ()
Ответ на: комментарий от Legioner

Netty хорош, но для задротов. Есть попроще абстракции. Undertow, Jetty (без доп модулей, embedded, pure-Server)

vertexua ★★★★☆ ()
Ответ на: комментарий от stevejobs

Ну и пусть себе торчит, в разумных пределах, разумеется. Если забиндил на loopback-интерфейс, то из сети никто ничего не увидит. А параноику от троянов-руткитов-прочей-нечисти можно напомнить, что можно и напрямую в память приложения залезть, ArtMoney тому пример.

А вот раз это на самом деле не «пара страничек», а полноценное приложение с БД, авторизацией, логикой и багами, то микрофреймворк можно и не искать. На голом JDBC далеко не уедешь, нужна обертка, нужен шаблонизатор, нужны прочие либы. Раз-два-три, и нету никаких преимуществ перед Play-ем. Лучше уж его оттюнить, ну или Python взять. Только распространять сложнее, одним Jar-ником никак не обойтись будет.

anonymous ()

Unfiltered попробуй. Еще есть Spray

dizza ★★★★★ ()

Для таких задач лучше go + revel. Потребление памяти минимальное, никаких зависимостей, высокая скорость работы. То, что нужно для небольшой цельной системы.

northicewind ()
Ответ на: комментарий от Aeon

На мой взгляд прикольно брать подходящий инструмент под задачу и решать ее в срок

northicewind ()
Ответ на: комментарий от Aeon

К тому же Go весьма приятный язык. Довольно простой, но в этом тоже есть свои плюсы

northicewind ()
Ответ на: комментарий от northicewind

и в чём удовольствие от решение этой задачи? Мы бОльшую часть жизни, по 10 часов в день, тратим на работу. Если не получать от нее удовольствия, вместо жизни выйдет фильм ужасов.

stevejobs ★★★★☆ ()
Ответ на: комментарий от stevejobs

Удовольствие от того, что твой софт работает быстро и не выжирает память гигами. Я же не посоветовал на php переделать. Go очень неплохой язык. Сам на скалке кое-что пилю, но go у меня на особом месте для решения как раз этого класса задач.

northicewind ()
Ответ на: комментарий от northicewind

я бы не сказал, что прям таки приятно постоянно проверять коды возврата функций

Aeon ()

mojolicio.us
Кстати вполне кроссплатформенно.

kilolife ★★★★★ ()

Если проблемы со Scala, то почему бы не попробовать Clojure ? Сам писал на Play 1.x, но когда вышел 2.x это просто ад и выстрел в голову. Ребята почти JEE запилили. В итоге и свалил с него. Кстати Golang мне кажется более идеальный выбор для этого проекта.

abc ()
Ответ на: комментарий от Aeon

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

northicewind ()
Ответ на: комментарий от abc

Clojure я пробовал и представляю, как написать, используя минимум памяти. Но есть проблема — clojure нечитабельный as fuck. Никто не захочет смотреть в него без специальных пинков. Sad but true.

Плюс стектрейсы. Если сам не писал код, понять откуда произошла ошибка - какой кошмар. Много кода - много ошибок - ничерта не разберешь. А я хочу чтобы конкретно вот этот код мог ковырять даже самый умственно-отсталый новичок.

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

stevejobs ★★★★☆ ()

нет сынок, это фантастика, ведь ты сам это прекрасно понимаешь

umren ★★★★★ ()
Ответ на: комментарий от stevejobs

Плюс стектрейсы. Если сам не писал код, понять откуда произошла ошибка - какой кошмар. Много кода - много ошибок - ничерта не разберешь. А я хочу чтобы конкретно вот этот код мог ковырять даже самый умственно-отсталый новичок.

Страшные стектрейсы - это и про скалу тоже. Шило на мыло в этом плане.

migesok ()
Ответ на: комментарий от HappyCoder

Во-во. Хоть кто-то чето дельное сказал

Вот с этим вот: -server -Xmx16m -Xms16m -Xss1m -XX:MaxPermSize=32m простой CRUD на 10 форм вполне шевелицца (~ 1000-1200 rps. Action.async не использовал).

anonymous ()

А не play run ли ты использовал для продакшена, петушок, а? Для stage|dist можно просто создать файл <ИМЯ_ПРОЕКТА>_config.txt с параметрами JVM в папке с дистром (или в target/universal/stage для stage)

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.