Браузер как гипервизор
Feb. 2nd, 2016 10:43 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Я вчера, уже когда засыпАл, пребывая под впечатление от Win95 на JS, размышлял, чего же не хватает, чтобы сделать из браузера условно-полноценную платформу для виртуализации. То-есть, сделать из браузера гипервизор.
В диктофон записалось “локалсторидж и юдипи”, после этого я уснул. Расшифровываю.
Синхронная файловая система
В браузерном JS есть всего две сущности, которые могут сойти за синхронную запись/чтение на файловую систему, и обе очень ограниченные.
localStorage – единственная локальная браузерная БД, чтение/запись в которую синхронные. Главная проблема – localStorage крошечный, единицы мегабайт.
Есть ещё IndexedDB и уже считающаяся устаревшей (а напрасно) WebSQL – они дают объём до 1/10 диска на домен, но они обе асинхронные.
Synchronous XHR – синхронный ajax-запрос. Это сетевой запрос, а не локальный, стало быть сразу прилагается куча соответствующих проблем. Более того, Mozilla пометила синхронные ajax-запросы как deprecated.
В этой связи я предполагаю, что либо лимит на localStorage будет увеличен, либо появится какой-то новый механизм (либо адаптация имеющегося).
Про “адаптацию имеющегося” я говорю вот почему. В браузерах накоплено существенное количество самых разных технологий, которые могут очень неожиданно сочетаться. Например, btoa(unescape(encodeURIComponent(string))) служит для конвертации в base64 unicode-строк, и лишь единицы самых рафинированных экспертов впервые её увидев скажут вам, как и почему это вообще работает. Хотя все три функции – “системные” для браузера, их сочетание вводит в полный ступор сначала.
UDP
Сейчас в браузере нет никакого способа выполнять UDP-запросы. Я не думаю, что он появится, потому что такая возможность ставит под угрозу безопасность не конечного пользователя, а всей сети. Тем не менее, очевидно существует множество “классических” приложений, которым нужен UDP. Как тут быть, не очень понятно.
В браузере есть некоторое "идейное” подобие, чтоли – называется WebRTC. Эта технология предназначено для веб-версий “настольных” технологий, где UDP задействуется особенно широко. Потоковое видео, VoIP и тп.
Возможно, WebRTC будет как-то адаптирован под более широкового плана нужды.
Итого
Френды, если есть у вас какие-то навскидку соображения про фундаментальные ограничения на идею “браузер как гипервизор” – напишите плиз коммент.
no subject
Date: 2016-02-02 08:50 am (UTC)no subject
Date: 2016-02-02 08:53 am (UTC)no subject
Date: 2016-02-02 08:59 am (UTC)У меня на все соображения касательно «медленные» ровно один ответ – «медленный код» например 10-летней давности летает пулей на нынешнем железе даже с несколькими слоями перед CPU и после всех перекомпиляций туда-сюда.
no subject
Date: 2016-02-02 09:08 am (UTC)no subject
Date: 2016-02-02 09:10 am (UTC)no subject
Date: 2016-02-02 11:00 am (UTC)Ведь файловая система тоже работает асинхронно, и в лучшем случае она просто сообщает в ответ "окей, записала", в то время как данные еще на пути к магнитным пластинам.
no subject
Date: 2016-02-02 11:51 am (UTC)Техническим мы, конечно, можем говорить о каком-то синхронном кэше, который сливает по мере накопления всё в асинхронную базу. Но у нас же а) может несколько вкладок быть, б) непонятно как лочить.
no subject
Date: 2016-02-02 01:04 pm (UTC)Ну и если мы достигнем настоящей синхронности, отзывчивость приложения стремительно упадет - ведь мы действительно будем ожидать, пока битики запишутся на пластинку.
Так что, похоже, что лучше уж научиться жить асинхронно.
no subject
Date: 2016-02-02 09:36 pm (UTC)Ту же проблему можно решить и другими способами. Например, давать не только file-like API, но и базу данных с сихнронизацией между вкладками. Или давать API для discovery of other sessions and message exchange between them (тогда можно синхронизировать at application level). Но главное, что это должно поддерживаться browser-ом, следовательно, должно войти в стандарт, следовательно, должен быть достаточно большой application demand.
Пока application demand небольшой, и я не вижу особого тренда в эту сторону. Всё ещё идёт мощный обратный тренд - типа в жопу всякие локальные storage'и, давайте всё хранить в cloud'е, а у клиента максимум какие-то там session ids в куки.
no subject
Date: 2016-02-02 10:22 pm (UTC)> Всё ещё идёт мощный обратный тренд
Ты очень глубоко здесь ошибаешься. Обратного тренда нет, потому что это текущий статус-кво.
А вот люфт в сторону локального кэша очень даже есть, и не крошечный какой-то, а вовсе например Facebook Relay. Причины тут, я так полагаю, в первую очередь экономические – имея локальные кэши на клиентах, можно очень сильно понизить не-статический трафик. Да и статический кое-какой.
Массовому распространению технологии локальных БД мешает... сама эта технология.
Во-первых, IndexedDB подглючивает в большей или меньшей степени во всех без исключения браузерах. Во-вторых, API к ней удивительно уродлив и неудобен, я вообще так и не смог понять, зачем делать целиком на ивентах API к БД, которая не умеет стримить.
И в-третьих, IDB ни на что не похожа, это такой зверёк в себе. С ней без обёртки решительно невозможно иметь дело, а хороших обёрток всего две, и обе всё равно не общего назначения.
> но и базу данных с сихнронизацией между вкладками
IndexedDB это всё легко делает. Она одна на все вкладки одного домена.
no subject
Date: 2016-02-02 09:39 pm (UTC)Т.е. я думаю, ты прав, мы к этому придём, но я бы не стал делать краткосрочные прогнозы. Прямо сегодня вроде как мы немного не туда идём :)