<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><description>Just as planned</description><title>Boris Egorov</title><generator>Tumblr (3.0; @dolphin278-blog)</generator><link>https://dolphin278.net/</link><item><title>React.js на сервере</title><description>&lt;p&gt;Решили посмотреть на React в деле. Взяли простенький функционал, сделали изоморфное приложение, посмотреть, как это будет выглядеть в работе.&lt;/p&gt;

&lt;p&gt;До начала процесса меня больше беспокоила клиентская сторона — там и процесс сборки настраивать надо, и flux заставлять работать с диспетчерами, хранилищами, и вот этим всем, тогда как за серверную часть я был более-менее спокоен — ну js и js, что может пойти не так?&lt;/p&gt;

&lt;p&gt;Оказалось, именно рендеринг страниц React'ом на сервере представляет основную проблему — без ухищрений, сейчас он очень медленный — в несколько раз медленнее того, что можно выжать другим шаблонизатором (особенно, если брать что-то действительно быстрое, вроде &lt;a href="http://olado.github.io/doT/index.html"&gt;doT&lt;/a&gt;, который тоже, естественно, можно и на сервере, и в клиенте использовать).&lt;/p&gt;

&lt;p&gt;Причины:
- каждый тег, который возвращает ваша компонента — это тоже отдельный компонент — т.е. чем больше элементов на вашей странице, тем медленнее она рендерится
- процесс рендеринга на сервере отличается от клиентского, но все равно содержит огромное количество лишних телодвижений
- код изобилует try/catch/finally-конструкциями, которые пока не могут быть обработаны оптимизирующими компиляторами v8 (в TurboFan обещали уметь их оптимизировать, но пока я не нашел, в какой версии, и даже последний iojs(2.3.1 на момент написания) этого не умеет)&lt;/p&gt;

&lt;p&gt;Что можно сделать для ускорения работы React на сервере?&lt;/p&gt;

&lt;p&gt;Прежде всего, не превращать в компоненты &lt;strong&gt;весь&lt;/strong&gt; html, который вы возвращаете, сделать это можно двумя способами:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;обычный шаблон для каркаса страницы, и React — для тела страницы (это первое, что все делают)&lt;/li&gt;
&lt;li&gt;использование &lt;a href="https://facebook.github.io/react/tips/dangerously-set-inner-html.html"&gt;&lt;code&gt;dangerouslySetInnerHTML&lt;/code&gt;&lt;/a&gt;, который позволяет явно указать html, который будет отображаться в компоненте. То есть — компоненты-листья в вашем дереве компонент могут возвращать конкретный HTML, вместо компонентизируемых html-тегов React'а.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;была даже дикая идея использовать &lt;code&gt;dangerouslySetInnerHTML&lt;/code&gt; и отдавать туда результат работы какого-нибудь другого шаблонизатора :-)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Второе, что можно сделать — подождать :)&lt;/p&gt;

&lt;p&gt;Сейчас в React'е работают над возможностью создавать разные типы рендеров с одной иерархии компонент. Это позволит сильнее отделить серверный рендер от всех остальных компонент, сделав его более быстрым. Так что код, который вы пишете сегодня, будет становиться только быстрее без дополнительных действий с вашей стороны.&lt;/p&gt;

&lt;p&gt;Кроме того, как я писал выше, js-код React'а пока не может быть оптимизирован, но изменения в v8 уже на подходе, так что если вы используете iojs, которая включает свежие stable-версии v8, есть большая вероятность, что c появлением все новых и новый оптимизаций в v8, рендер react'ом на сервере будет становиться все быстрее и быстрее.&lt;/p&gt;

&lt;p&gt;Остается только решить — есть ли возможность сейчас потерять в производительности исполнения, но выиграть в производительности разработки, и ждать изменений в React и v8, или сегодня использовать более быстрые альтернативы, лишаясь компонентной инфраструктуры React'а.&lt;/p&gt;</description><link>https://dolphin278.net/post/122666278080</link><guid>https://dolphin278.net/post/122666278080</guid><pubDate>Sun, 28 Jun 2015 13:40:05 +0300</pubDate><category>react</category><category>nodejs</category><category>v8</category><category>isomorphic</category></item><item><title>"Every ten years (approximately), members of the language camp notice that the number of distributed..."</title><description>“Every ten years (approximately), members of the language camp notice that the number of distributed applications is relatively small. They look at the programming interfaces and decide that the problem is that the programming model is not close enough to whatever programming model is currently in vogue (messages        in the 1970s [7], [8], procedure calls in the 1980s [9], [10], [11], and objects in the 1990s [1], [2]). A furious bout of language and protocol design takes place and a new distributed computing paradigm is announced that is compliant with the latest programming model. After several years, the percentage of distributed applications is discovered not to have increased significantly, and the cycle begins anew.”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;DBus over the network thread &lt;a href="http://lists.freedesktop.org/archives/dbus/2008-April/009611.html"&gt;http://lists.freedesktop.org/archives/dbus/2008-April/009611.html&lt;/a&gt;&lt;/em&gt;</description><link>https://dolphin278.net/post/95263644306</link><guid>https://dolphin278.net/post/95263644306</guid><pubDate>Wed, 20 Aug 2014 11:00:10 +0400</pubDate></item><item><title>High Speed Robot Arm</title><description>&lt;iframe width="420" height="315" src="//www.youtube.com/embed/-KxjVlaLBmk?rel=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;2009 год.&lt;/p&gt;</description><link>https://dolphin278.net/post/76747919735</link><guid>https://dolphin278.net/post/76747919735</guid><pubDate>Sat, 15 Feb 2014 21:51:00 +0400</pubDate><category>robotics</category><category>robot arm</category></item><item><title>Двое лезут на 650-метровый небоскреб в Шанхае

Если вы хотя бы...</title><description>&lt;iframe width="400" height="225"  id="youtube_iframe" src="https://www.youtube.com/embed/gLDYtH1RH-U?feature=oembed&amp;enablejsapi=1&amp;origin=https://safe.txmblr.com&amp;wmode=opaque" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="Shanghai Tower (650 meters)"&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Двое лезут на 650-метровый небоскреб в Шанхае&lt;/p&gt;

&lt;p&gt;Если вы хотя бы немного боитесь высоты — не смотрите это видео.&lt;/p&gt;

&lt;p&gt;via &lt;a href="https://twitter.com/Dymio"&gt;https://twitter.com/Dymio&lt;/a&gt;&lt;/p&gt;</description><link>https://dolphin278.net/post/76443031684</link><guid>https://dolphin278.net/post/76443031684</guid><pubDate>Wed, 12 Feb 2014 22:42:21 +0400</pubDate><category>ontheroofs</category><category>shanghai</category><category>GoPro</category></item><item><title>Whistler Skeleton GoPro Helmet Cam POV</title><description>&lt;iframe width="400" height="300"  id="youtube_iframe" src="https://www.youtube.com/embed/X-erVsD7LuM?feature=oembed&amp;enablejsapi=1&amp;origin=https://safe.txmblr.com&amp;wmode=opaque" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="Whistler Sliding Center Skeleton GoPro Helmet Cam POV"&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Whistler Skeleton GoPro Helmet Cam POV&lt;/p&gt;</description><link>https://dolphin278.net/post/76337447974</link><guid>https://dolphin278.net/post/76337447974</guid><pubDate>Tue, 11 Feb 2014 21:41:55 +0400</pubDate><category>skeleton</category><category>gopro</category></item><item><title>Как собирали самый маленький (работающий) двенадцатицилиндровый...</title><description>&lt;iframe width="400" height="300"  id="youtube_iframe" src="https://www.youtube.com/embed/3YfTtGCsiD8?feature=oembed&amp;enablejsapi=1&amp;origin=https://safe.txmblr.com&amp;wmode=opaque" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="El motor V-12 más pequeño del mundo.(Smallest V-12 engine of the world)"&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Как собирали самый маленький (&lt;strong&gt;работающий&lt;/strong&gt;) двенадцатицилиндровый двигатель.&lt;/p&gt;</description><link>https://dolphin278.net/post/72185686871</link><guid>https://dolphin278.net/post/72185686871</guid><pubDate>Sat, 04 Jan 2014 12:20:19 +0400</pubDate><category>v12 engine</category><category>miniature</category></item><item><title>Красивые скульптуры из бумаги</title><description>&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Красивые скульптуры из бумаги&lt;/p&gt;</description><link>https://dolphin278.net/post/71502843592</link><guid>https://dolphin278.net/post/71502843592</guid><pubDate>Sun, 29 Dec 2013 12:20:06 +0400</pubDate><category>art</category><category>paper</category><category>sculpture</category></item><item><title>Визитки мизантропа

20 карточек для вручения человекообразным....</title><description>&lt;img src="https://64.media.tumblr.com/639d9951786f6b1ad248476f9ee785a6/tumblr_mx4z6zMpkE1qb12fuo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Визитки мизантропа&lt;/p&gt;

&lt;p&gt;20 карточек для вручения человекообразным. Обладают психотерапевтическим эффектом и долгим послевкусием.&lt;/p&gt;</description><link>https://dolphin278.net/post/68678971842</link><guid>https://dolphin278.net/post/68678971842</guid><pubDate>Sun, 01 Dec 2013 20:30:35 +0400</pubDate></item><item><title>The official Node.js buildpack is going on a diet</title><description>&lt;a href="https://discussion.heroku.com/t/the-official-node-js-buildpack-is-going-on-a-diet/100"&gt;The official Node.js buildpack is going on a diet&lt;/a&gt;: &lt;p&gt;A lot has changed under the hood, but here are the high-level improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can now run any version of node you want on Heroku, even pre-release (0.11) versions.&lt;/li&gt;
&lt;li&gt;The node_modules directory is now cached across deploys, so your future deploys should be faster.&lt;/li&gt;
&lt;li&gt;npm is now bundled with node, so the engines.npm field in package.json is no longer needed.&lt;/li&gt;
&lt;/ul&gt;</description><link>https://dolphin278.net/post/68545865101</link><guid>https://dolphin278.net/post/68545865101</guid><pubDate>Sat, 30 Nov 2013 12:20:07 +0400</pubDate><category>heroku</category><category>nodejs</category></item><item><title>genome.js</title><description>&lt;a href="http://genomejs.com/"&gt;genome.js&lt;/a&gt;: &lt;p&gt;genome.js is a fully open source platform built on Node.js that utilizes streams for high-performance analysis of DNA SNPs&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Get your DNA sequenced by a supported vendor&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Convert your SNP file to SNP-JSON using dna2json&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Feed your SNP-JSON into any tools/genosets&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make your own analysis tools/genosets using GQL&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;</description><link>https://dolphin278.net/post/68451297408</link><guid>https://dolphin278.net/post/68451297408</guid><pubDate>Fri, 29 Nov 2013 14:40:25 +0400</pubDate><category>dna</category><category>genomejs</category></item><item><title>Сценарий успеха</title><description>&lt;p&gt;&lt;img src="http://vdmsti.ru/img/newsline/2013/11/28/19348121_news_bigpic.jpg" alt="Фото: С. Портер/Ведомости"/&gt;&lt;/p&gt;

&lt;p&gt;Замордовать выбранную отрасль регулированием до полного невменоза под предлогом защиты населения от всего-на-свете страшного, а потом тыкать палкой в тех, кто после этого выжил, и говорить, &amp;ldquo;вот, дети, это такой-сякой злой бизнес, он только о деньгах   думает, а государство вас защищает от него&amp;rdquo;.&lt;/p&gt;

&lt;p&gt;И, главное, &amp;ldquo;не парьтесь&amp;rdquo;, как &lt;a href="http://www.vedomosti.ru/finance/news/19348121/siluanov-oslablenie-rublya-eto-legkaya-ryab"&gt;советует&lt;/a&gt; нам министр, кхм, финансов. Это же все для нашей пользы.&lt;/p&gt;</description><link>https://dolphin278.net/post/68446403076</link><guid>https://dolphin278.net/post/68446403076</guid><pubDate>Fri, 29 Nov 2013 12:20:52 +0400</pubDate></item><item><title>MongoDB поверх Postgres</title><description>&lt;a href="https://github.com/jerrysievert/mongolike"&gt;MongoDB поверх Postgres&lt;/a&gt;: &lt;p&gt;Mongolike is an experimental MongoDB clone being built on top of PLV8 and Postgres.&lt;/p&gt;

&lt;p&gt;Надо будет поэкспериментировать на досуге.&lt;/p&gt;</description><link>https://dolphin278.net/post/68148763297</link><guid>https://dolphin278.net/post/68148763297</guid><pubDate>Tue, 26 Nov 2013 12:20:38 +0400</pubDate><category>postgresql</category><category>mongodb</category></item><item><title>How GitHub (no longer) Works // Speaker Deck</title><description>&lt;a href="https://speakerdeck.com/holman/how-github-no-longer-works"&gt;How GitHub (no longer) Works // Speaker Deck&lt;/a&gt;: &lt;p&gt;Как GitHub менялся по дороге к 200+ сотрудникам.&lt;/p&gt;</description><link>https://dolphin278.net/post/67936056697</link><guid>https://dolphin278.net/post/67936056697</guid><pubDate>Sun, 24 Nov 2013 12:20:00 +0400</pubDate><category>github</category></item><item><title>А ты на работу?</title><description>&lt;img src="https://64.media.tumblr.com/1310f89ce212b74447272ee47d4108de/tumblr_mwqe69B1oU1qb12fuo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;А ты на работу?&lt;/p&gt;</description><link>https://dolphin278.net/post/67872154358</link><guid>https://dolphin278.net/post/67872154358</guid><pubDate>Sat, 23 Nov 2013 23:30:09 +0400</pubDate></item><item><title>Inception</title><description>&lt;p&gt;Текстовое поле в РСУБД, в котором лежит сериализованный JSON, в котором есть поле, в котором лежит ejs-шаблон, который рендерит SQL-запрос, который уходит к другой РСУБД, и результатом выполнения которого является очередной сериализованный JSON.&lt;/p&gt;

&lt;p&gt;А, ну да, исходный JSON используется в пачке запросов, которые собирают пол-базы в еще один JSON-документ с конфигурацией.&lt;/p&gt;

&lt;p&gt;А теперь два слова — экранирование кавычек. :-)&lt;/p&gt;

&lt;p&gt;P. S. Как вы уже догадались, нужно все это для того, чтобы корректно наполнить некоторые недостающие поля в еще одном JSON-документе.&lt;/p&gt;</description><link>https://dolphin278.net/post/67673768736</link><guid>https://dolphin278.net/post/67673768736</guid><pubDate>Thu, 21 Nov 2013 22:27:37 +0400</pubDate></item><item><title>Новости про LevelDown 0.10</title><description>&lt;a href="http://r.va.gg/2013/11/leveldown-v0.10-managing-gc-in-native-v8-programming.html"&gt;Новости про LevelDown 0.10&lt;/a&gt;: &lt;p&gt;Rod Vagg написал длиннющий пост про новую версию LevelDown. Исправления утечек памяти (особенно достававшее использующие LevelGraph), оптимизация работы с GC в V8, домены для ловли ошибок, и вроде, все.&lt;/p&gt;

&lt;p&gt;Если просто пользуетесь — то можно резюмировать коротко “стало лучше”, но если интересуют потроха — почитайте, интересно.&lt;/p&gt;</description><link>https://dolphin278.net/post/67456572734</link><guid>https://dolphin278.net/post/67456572734</guid><pubDate>Tue, 19 Nov 2013 14:40:29 +0400</pubDate><category>leveldb</category></item><item><title>Ender's Game</title><description>&lt;p&gt;&lt;img src="https://64.media.tumblr.com/d25bbb04933caa5bb7fb32fba1420e02/tumblr_inline_mwf9tvCcgm1qafipn.jpg" alt='"Игра Эндера"' title="Игра Эндера"/&gt;&lt;/p&gt;

&lt;p&gt;Исключая &amp;ldquo;Гравитацию&amp;rdquo;, которую я так и не посмотрел, и уже, наверное, не посмотрю, самый приятный фантастический фильм в этом году. Идиотов нет, неминуемые сокращения и отличия есть, но мне удовольствие не испортили. Правда, если книжку не читать, что-то может быть непонятно, но кто ж ее не читал-то?&lt;/p&gt;

&lt;p&gt;В Москве показ в центральных кинотеатрах (если вообще был) как-то стремительно прошел, и на прошлой неделе уже был только в периферийных залах (что вдвойне обидно, потому что кино в кои-то веки хорошее). Увидев Харрисона Форда в трейлере я думал, что крутить будут везде, долго и упорно.&lt;/p&gt;</description><link>https://dolphin278.net/post/67284189645</link><guid>https://dolphin278.net/post/67284189645</guid><pubDate>Sun, 17 Nov 2013 23:31:00 +0400</pubDate><category>enders game</category></item></channel></rss>
