Надо обязательно потестить на этой штуке производительность java (я как понимаю там аппаратная поддержка должна быть?), html5 canvas и какой-нибудь БД…
И если что, я говорю про клиентский JS, когда выхода нет кроме как юзать только его. А на сервере я уже давно сделал свой выбор. И node.js в нём нет, благодаря тому, что на сервер-сайде есть из чего выбрать, есть надежные и стабильные платформы.
Это работает в Chrome, Firefox, IE? Говоря про JS я не говорю про node.js, я говорю про браузерный JS. Ибо, он никуда не годится для работы с SQL, когда необходимы сложные взаимодействия с БД.
>Где, какой класс, о чём вы?
О том, что не надо пихать асинхронные функции туда где это не нужно.
>Напишите асинхронный код на любом распространенном web-языке
Зачем? Я просто, лишь указал еще на одну проблему в JS — лишние сложности при работе с БД. И написал вам красивое решение на той же java, как это делается «обычно» и просто.
В общем-то, можно в вашем стиле решить, но нужно кучу переменных передавать, например:
function first(foo1, foo2, externalCallback) {
db.query("...", second.bind(foo1, foo2, externalCallback))
}
function second(foo1, foo2, externalCallback, res) {
var someResult = ... // какой-то крутой алгоритм, которому нужен res
db.query("...", third.bind(someResult, foo1, foo2, externalCallback, res))
}
Как-то так. Это еще без мяса, когда еще куча всяких локальных переменных. И когда вложенность может уйти еще и на четвертый уровень. Как вариант, чтобы не таскать эти переменные можно создать объект и туда запихать все эти «локальные» переменные. Но в любом случае такой код сложнее, чем просто синхронные вызовы SQL кода.
Да, тоже выход, сразу вспомнилась книга фаулера про рефакторинг, где он советует использовать как можно больше функций.
Такой код пройдет в простых ситуациях. В сложных, когда нужно расшарить какие-то переменные между такими функциями, будут проблемы. И тогда нужно создавать целый класс (не в глобальную же область пихать эти переменные), когда хватило бы одной функции в любом другом языке (java, c, php, python и т.д.).
Всё это конечно зависит от меры безвыходности. Когда одна монополия — ничего не поделаешь, жуй что дают. А когда есть выбор — java, c, php, python, erlang, go и т.д. — выбирай то, что тебе нравится.
P.S. «мой стартап не взлетел, потому что его зохавала лапша из callback-ов» — когда запуск стартапа для тебя становится текучкой, хочется, чтобы это текучка была удобна в разработке, без костылей.
JS уж очень медленно развивается… Dart и JS это не совсем одинаковые технологии. Например, в Dart есть ООП, а в JS каждая либа делает свой ООП. Давно уже хочется нативный ООП, а не очередные костыли.
И еще, плюс в том, что можно указывать типы явно, что позволяет быстрее обнаруживать ошибки (с помощью IDE конечно), во время написания кода.
И конечно куча мелочей, типа неймспейсов, причесанного АПИ и т.д.
Так что я только за разнообразие, в разумных количествах конечно. Может и JS будет шустрее развиваться, потеряв монополию.
Бюджетные компьютеры до 50 долларов, типа Raspberry Pi, но более более шустрые под современную Ubuntu. Впрочем, вы и так это скоро будете делать, увидите успех конкурентов и копирнете, рано или поздно.
А те, кто имеет реальные идеи с вами не будут делиться, нах вы упали? Развивайте грамотное инвестирование, чтобы вы были интересны авторам серьезных идей. Или вы думаете миллионы леммингов придумают вам крутую идею?
Netty тут вообще не причем, просто удобный фреймворк. NIO тоже не решает основную проблему производительности. 980 потоков, которые создаёт java для обработки клиентов — вот где собака производительности зарыта. На переключение между этими потоками видимо уходит значительно больше времени, чем на саму полезную работу.
А Netty+NIO позволяют в 4 потоках обрабабывать всех юзеров. Тем самым, решая проблему, без создания over 9000 поток. Если интересны подробности гуглите на тему Green Threads, на хабре тоже что-то было.
А подскажите, как, в общих чертах, построена работа стартапера и инвестора, после получения инвестиций? На время разработки прототипа/продукта стартапер предоставлен сам себе или инвестор вмешивается в работу?
Ну вот, прогресс на лицо :) Чётко и ясно. Думаю вы уже сами думали над этим, но тем не менее:
микроинвестиции
Думаю найдутся люди, которые не готовы вкладывать 20К баксов, но вот 500-1000 баксов вложатся. Возможно есть смысл сделать такой раздел и наладить автоматизированный прием денег. С другой стороны сложно сказать будет ли это пользоваться популярностью.
комманда
Думаю не у всех есть команда. Но если вы подтвердите, что идея и человек вас заинтересовал, то будет проще найти специалистов к себе в команду. Ссылаясь на ваше подтверждение. Впрочем, у вас есть это на сайте (если я правильно понял, в разделе витрина), но тем не менее вы позиционируете себя так, что без команды нет смысла отправлять вам идеи — «мы инвестируем в команду, а не идеи».
О том, что не надо пихать асинхронные функции туда где это не нужно.
>Напишите асинхронный код на любом распространенном web-языке
Зачем? Я просто, лишь указал еще на одну проблему в JS — лишние сложности при работе с БД. И написал вам красивое решение на той же java, как это делается «обычно» и просто.
Object[] first(foo1, foo2) {
Res res = db.query("...");
List someResult = // крутой алгоритм с res
res = db.query("...");
// заканчиваем
Res res2 = db.query("...");
return new Object[] {someResult, res2};
}
Думаю наглядно видно, какой код проще читается и быстрее пишется.
function first(foo1, foo2, externalCallback) {
db.query("...", second.bind(foo1, foo2, externalCallback))
}
function second(foo1, foo2, externalCallback, res) {
var someResult = ... // какой-то крутой алгоритм, которому нужен res
db.query("...", third.bind(someResult, foo1, foo2, externalCallback, res))
}
function third(someResult, foo1, foo2, externalCallback, res) {
// заканчиваем
db.query("...", externalCallback.bind(someResult, res))
}
Как-то так. Это еще без мяса, когда еще куча всяких локальных переменных. И когда вложенность может уйти еще и на четвертый уровень. Как вариант, чтобы не таскать эти переменные можно создать объект и туда запихать все эти «локальные» переменные. Но в любом случае такой код сложнее, чем просто синхронные вызовы SQL кода.
Такой код пройдет в простых ситуациях. В сложных, когда нужно расшарить какие-то переменные между такими функциями, будут проблемы. И тогда нужно создавать целый класс (не в глобальную же область пихать эти переменные), когда хватило бы одной функции в любом другом языке (java, c, php, python и т.д.).
Всё это конечно зависит от меры безвыходности. Когда одна монополия — ничего не поделаешь, жуй что дают. А когда есть выбор — java, c, php, python, erlang, go и т.д. — выбирай то, что тебе нравится.
P.S. «мой стартап не взлетел, потому что его зохавала лапша из callback-ов» — когда запуск стартапа для тебя становится текучкой, хочется, чтобы это текучка была удобна в разработке, без костылей.
а вебсокетный сервер можно сделать, есть готовые либы?
И еще, плюс в том, что можно указывать типы явно, что позволяет быстрее обнаруживать ошибки (с помощью IDE конечно), во время написания кода.
И конечно куча мелочей, типа неймспейсов, причесанного АПИ и т.д.
Так что я только за разнообразие, в разумных количествах конечно. Может и JS будет шустрее развиваться, потеряв монополию.
А рефлекшн будет какой-нибудь?
А те, кто имеет реальные идеи с вами не будут делиться, нах вы упали? Развивайте грамотное инвестирование, чтобы вы были интересны авторам серьезных идей. Или вы думаете миллионы леммингов придумают вам крутую идею?
А Netty+NIO позволяют в 4 потоках обрабабывать всех юзеров. Тем самым, решая проблему, без создания over 9000 поток. Если интересны подробности гуглите на тему Green Threads, на хабре тоже что-то было.