Эта запись в основном для разработчиков, т.к. апдейты в архитектуре, и новых штук для “помацать руками” почти нет.
Есть такая модная фишка - обновление страничек в браузере пользователя, если там что-то произошло. Например кто-то добавил пост в тему, которую вы смотрите, или кто-то прислал сообщение в личку, когда вы разглядываете страницу. Или если у вас чатик открыт в нескольких вкладках. Примеров для народного хозяйства можно найти много. На практике делается так - браузер постоянно держит соединение с сервером и получает обновления о тех страницах, в которых заинтересован. То есть постоянно перегружать страничку не надо. Т.к. все делается по современному протоколу websockets, то накладные расходы небольшие.
Но есть проблема - пользователь может запросто открыть и десять и двадцать вкладок. А если держать соединение из каждой - будет уже заметно. На сервере просядет процессор, а клиентам на мобилках насчитают лишний траффик. Поэтому заботливые люди поступают хитрее - пишут “роутер”, который конннектится из одной вкладки, и раскидывает сообщения по всем остальным. Естественно, если вкладку закроют, то роутер автоматически поднимается в другой.
Вот эту фиговину мы и делали. Пока можно посмотреть только в одном месте - если залогиниться, открыть много вкладок и разлогиниться в одной - остальные тоже обновятся. На следующей неделе будем активно вворачивать эти мгновенные обновления везде где можно.
Т.к. “визуальных” обновлений нонче немного, дальше будет о новых и почти новых библиотеках, написанных за последнее время. Возможно, будет полезно кому-то из разработчиков. Качество кода, как обычно, максимально возможное 😃 Все покрыто тестами и т.п. Можете быть уверены, что библиотеки делались не из-за NIH-синдрома, а потому что не нашлось готовых, которые бы устроили. В каждой есть свой изюм, кому интересно - сравнивайте с другими.
Полностью готовое:
navit - библиотека для тестирования страниц сайтов через phantomjs. Очень упрощает написание тестов. В конце описания - сравнение с другими самыми популярными.
event-wire - медиатор с возможностью сортировать обработчики. На нем написана вообще вся нодека.
В процессе:
queue - распределенная очередь задач, с поддержкой мапредьюса, расписания и т.п. Код полностью готов, но еще не выделен в отдельный пакет. Пока набиваем нодеку задачами и сорцы “отстаиваются”. Но логика блокировок проверена, тесты есть, так что проблем не ожидается. Если кто-то хочет себе - могу опубликовать пораньше.
live - crosstab communication, о котором писал в начале сообщения. На демке уже работает, на следующей неделе доведем до ума и выложу отдельно для всех.
Из прочего - markdown-it, который делался для нодеки, оказался настолько удачен, что его уже воткнули себе Diaspora*, NodeBB и скоро воткнет Discourse.
{"assets_hash":"a8b26fa7f6e768b07a72c8c9aadb9422","page_data":{"users":{"39c21abc3df9550077797d18":{"_id":"39c21abc3df9550077797d18","hid":349,"name":"Vitaly","nick":"Vitaly","avatar_id":null,"css":""}},"settings":{"blogs_can_create":false,"blogs_mod_can_delete":false,"blogs_mod_can_hard_delete":false,"blogs_mod_can_add_infractions":false,"can_report_abuse":false,"can_vote":false,"can_see_ip":false,"blogs_edit_comments_max_time":30,"blogs_show_ignored":false,"blogs_reply_old_comment_threshold":30,"votes_add_max_time":168},"entry":{"_id":"555795209970730077112407","hid":20333,"title":"Очередное обновление, теперь с большим братом","html":"<p><a href=\"http://dev.nodeca.com/\" class=\"link link-ext link-auto\" data-nd-link-type=\"autolink\" data-nd-link-orig=\"http://dev.nodeca.com/\" target=\"_blank\" rel=\"nofollow noopener\">dev.nodeca.com</a></p>\n<p>Эта запись в основном для разработчиков, т.к. апдейты в архитектуре, и новых штук для “помацать руками” почти нет.</p>\n<p>Есть такая модная фишка - обновление страничек в браузере пользователя, если там что-то произошло. Например кто-то добавил пост в тему, которую вы смотрите, или кто-то прислал сообщение в личку, когда вы разглядываете страницу. Или если у вас чатик открыт в нескольких вкладках. Примеров для народного хозяйства можно найти много. На практике делается так - браузер постоянно держит соединение с сервером и получает обновления о тех страницах, в которых заинтересован. То есть постоянно перегружать страничку не надо. Т.к. все делается по современному протоколу websockets, то накладные расходы небольшие.</p>\n<p>Но есть проблема - пользователь может запросто открыть и десять и двадцать вкладок. А если держать соединение из каждой - будет уже заметно. На сервере просядет процессор, а клиентам на мобилках насчитают лишний траффик. Поэтому заботливые люди поступают хитрее - пишут “роутер”, который конннектится из одной вкладки, и раскидывает сообщения по всем остальным. Естественно, если вкладку закроют, то роутер автоматически поднимается в другой.</p>\n<!--cut-->\n<p>Вот эту фиговину мы и делали. Пока можно посмотреть только в одном месте - если залогиниться, открыть много вкладок и разлогиниться в одной - остальные тоже обновятся. На следующей неделе будем активно вворачивать эти мгновенные обновления везде где можно.</p>\n<p>Т.к. “визуальных” обновлений нонче немного, дальше будет о новых и почти новых библиотеках, написанных за последнее время. Возможно, будет полезно кому-то из разработчиков. Качество кода, как обычно, максимально возможное <span class=\"emoji emoji-smiley\" data-nd-emoji-src=\":smiley:\">😃</span> Все покрыто тестами и т.п. Можете быть уверены, что библиотеки делались не из-за NIH-синдрома, а потому что не нашлось готовых, которые бы устроили. В каждой есть свой изюм, кому интересно - сравнивайте с другими.</p>\n<p>Полностью готовое:</p>\n<ul>\n<li><a href=\"https://github.com/nodeca/navit\" class=\"link link-ext\" data-nd-link-orig=\"https://github.com/nodeca/navit\" target=\"_blank\" rel=\"nofollow noopener\">navit</a> - библиотека для тестирования страниц сайтов через phantomjs. Очень упрощает написание тестов. В конце описания - сравнение с другими самыми популярными.</li>\n<li><a href=\"https://github.com/nodeca/event-wire\" class=\"link link-ext\" data-nd-link-orig=\"https://github.com/nodeca/event-wire\" target=\"_blank\" rel=\"nofollow noopener\">event-wire</a> - медиатор с возможностью сортировать обработчики. На нем написана вообще вся нодека.</li>\n</ul>\n<p>В процессе:</p>\n<ul>\n<li><a href=\"https://github.com/nodeca/nodeca.core/tree/master/lib/queue\" class=\"link link-ext\" data-nd-link-orig=\"https://github.com/nodeca/nodeca.core/tree/master/lib/queue\" target=\"_blank\" rel=\"nofollow noopener\">queue</a> - распределенная очередь задач, с поддержкой мапредьюса, расписания и т.п. Код полностью готов, но еще не выделен в отдельный пакет. Пока набиваем нодеку задачами и сорцы “отстаиваются”. Но логика блокировок проверена, тесты есть, так что проблем не ожидается. Если кто-то хочет себе - могу опубликовать пораньше.</li>\n<li><a href=\"https://github.com/nodeca/nodeca.core/tree/master/lib/live\" class=\"link link-ext\" data-nd-link-orig=\"https://github.com/nodeca/nodeca.core/tree/master/lib/live\" target=\"_blank\" rel=\"nofollow noopener\">live</a> - crosstab communication, о котором писал в начале сообщения. На демке уже работает, на следующей неделе доведем до ума и выложу отдельно для всех.</li>\n</ul>\n<p>Из прочего - <a href=\"https://github.com/markdown-it/markdown-it\" class=\"link link-ext\" data-nd-link-orig=\"https://github.com/markdown-it/markdown-it\" target=\"_blank\" rel=\"nofollow noopener\">markdown-it</a>, который делался для нодеки, оказался настолько удачен, что его уже воткнули себе <a href=\"https://www.google.ru/search?q=diaspora\" class=\"link link-ext\" data-nd-link-orig=\"https://www.google.ru/search?q=diaspora\" target=\"_blank\" rel=\"nofollow noopener\">Diaspora*</a>, <a href=\"https://www.google.ru/search?q=nodebb\" class=\"link link-ext\" data-nd-link-orig=\"https://www.google.ru/search?q=nodebb\" target=\"_blank\" rel=\"nofollow noopener\">NodeBB</a> и скоро воткнет <a href=\"https://meta.discourse.org/t/markdown-table-support/13546/46\" class=\"link link-ext\" data-nd-link-orig=\"https://meta.discourse.org/t/markdown-table-support/13546/46\" target=\"_blank\" rel=\"nofollow noopener\">Discourse</a>.</p>\n","user":"39c21abc3df9550077797d18","ts":"2015-05-16T19:06:08.000Z","st":1,"cache":{"comment_count":0},"views":614,"bookmarks":0,"votes":0},"subscription":null},"locale":"en-US","user_id":"000000000000000000000000","user_hid":0,"user_name":"","user_nick":"","user_avatar":null,"is_member":false,"settings":{"can_access_acp":false,"can_use_dialogs":false,"hide_heavy_content":false},"unread_dialogs":false,"footer":{"rules":{"to":"common.rules"},"contacts":{"to":"rco-nodeca.contacts"}},"navbar":{"tracker":{"to":"users.tracker","autoselect":false,"priority":10},"forum":{"to":"forum.index"},"blogs":{"to":"blogs.index"},"clubs":{"to":"clubs.index"},"market":{"to":"market.index.buy"}},"recaptcha":{"public_key":"6LcyTs0dAAAAADW_1wxPfl0IHuXxBG7vMSSX26Z4"},"layout":"common.layout"}