?

Log in

No account? Create an account
November 2016   01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Часть 2. Возможности и ограничения современных веб-платформ

Posted on 2015.06.26 at 22:19
Tags: ,
SPA (Single-Page Application) весьма сильно изменили архитектуру веб-приложений. Если говорить кратко - архитектура SPA гораздо проще традиционных, и по характеру ограничений практически ничем не отличается от традиционных клиент-серверных приложений. С поправками на веб-технологии, конечно. Остановимся поподробнее на принципиальных возможностях и ограничениях современных веб-платформ - что поменялось с архитектурной точки зрения.

Первое, и, возможно, самое важное. JavaScript в современных браузерах невероятно быстр. Виртуальные машины во всех основных браузерах полагаются на JIT-компиляцию. Помимо JIT, в современном JS есть unboxed-массивы, а также возможности работы с бинарными данными. В целом, можно считать, что JS примерно вдвое медленнее .NET и Java, и вчетверо медленнее С++.

Вместо отсылок к тестам, я покажу вам в качестве иллюстрации вот это. Это декодер видео H.264, написанный на JS. Там есть ссылка на демо-страницы, посмотрите. Сколько кадров в секунду это будет выдавать, как вы думаете? Проверять надо в Chrome и в Firefox. Вы будете удивлены.
https://github.com/mbebenita/broadway

Для тех, кому влом открывать ссылку - браузер в состоянии играть *несколько* видео одновременно с полным фреймрейтом. Программно декодируя видео, на чистом JS.

Итак, современный JS в состоянии экономно работать с памятью. Он имеет полный доступ к canvas, для рисования там чего угодно. Он имеет досуп к видеоускорителю через WebGL API, к потокам через WebWorker API, а также к файлам, аудиоустроуству, и к сети.

Все это с рядом ограничений из-за соображений безопасности, конечно. Например - из браузера есть доступ не ко всем сетевым протоколам, а только к HTTP, WebSocket, и SCTP (через WebRTC API, с возможностью устанавливать прямые соединения между браузерами).

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

Если мы добавим к этому nodejs, который представляет собой JS движок, выпиленный из Chrome для использования на серверах (со снятыми ограничениями безопасности), и заглянем в статистику проектов на github по языкам (JavaScript будет на первом месте), то станет очевидным невероятное еще 3 года назад. JavaScript сейчас представляет собой универсальную, практичную, безопасную, и популярную платформу, в рамках которой можно сделать почти все, что в принципе делается на managed-языках.

Звучит хорошо, так что с этого момента, и до конца изложения, мы принимаем следующее правило проектирования:
- Наше приложение работает в браузере.

Но стоп. Давайте проверим это правило.
- Его надо довести до всех. Ок, допустим сделали, это не сложно.
- Оно должно быть простое, штоб до всех дошло. Да куда уж проще, ну?
- Следование ему не должно быть слишком утомительным занятием...
Так, стоп, секундочку. Как мы знаем из предыдущей части, у нас сотни JS фреймворков, и никто в мире толком не знает, как такие приложния писать. Во всяком случае, договорится об этом не могут точно.

Это ж-ж-ж не спроста. Звучит так, как будто у нас проблемы.

- Следование правилу должно приносить неиллюзорную пользу.
Ну ок, а что мы хотя бы за это получим? Вдвое медленнее чем Java с C# - звучит не как польза, а самый что ни на есть вред. Так в чем польза?
- Веб-приложения не требуют установки, и доступны немедленно любому пользователю глобальной сети.
- У веб-приложений короткий цикл обновления, их можно обновлять хоть каждый день, не создавая пользователю неудобств.
- Веб-приложения по настоящему кроссплатформены, они работают везде, включая мобильные устройства.

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

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

Comments:


alekciy
alekciy at 2015-07-04 07:37 (UTC) (Link)
Не JS-ом единым. CSS и HTML тоже не отстают. Всё вместе собранное под капотом того же Twitter Bootstrap дает возможность собирать из типовых блоков практически готовые веб морды управления-чем-угодно. Получившийся интерфейс предсказуемо работает на широком спектре устройств и платформ. И главное поддерживаться в принципе может силами одного разработчика.

У меня лично такое впечатление что 5-7 лет и приложения поголовно станут веб приложениями. У которых будет только одно требование - последняя версия браузера + относительно постоянное соединение с интернетом. Остальное будет на чем-то другом в силу либо специфичных требований (банки? армия?), либо по историческим причинам, либо это будет мобильное приложение (для задач которые невозможно выполить из JS всилу ограничения безопасности).
Previous Entry  Next Entry