Serverside JavaScript, 1ms for transform.
[info]andrewsumin

What for?


“What for?” — that is the key question in any decision. In our case we had several answers to this question.


First – developers. Current template engine was written in C# and making any changes in it required time. The key reason – this template engine was developed by certain people, while used by others.


To my mind, it’s quite a common practice among coders. There is no doubt that coders need tools, but these tools are implemented by people who hardly have any idea of day-to-day tasks we face. I’d even say the approach is often like “let them write conditions and cycles, for coding it’s enough”. Maybe that’s the fault of coders, their skills and experience.

Mail.Ru Group has a team of highly qualified specialists, experts in JS, who are able to write a tool and use this tool.


Second - tasks. Let’s take the project mail.ru. We can’t refuse from a template engine on the sever – we need a quick download at first login. We can’t refuse from a template engine on the client – users should see rapid reaction to their actions, which means AJAX and template engine on the client are essential.


The problem is evident: we have two sets of absolutely different templates on the server and on the client. What is most unfair - they solve the same task. Double work simply crocked us up.


V8 is a JavaScript interpreter, and that means we can have one template for both the server and the client.


Third - speed. After a bulk of articles that say many good words about operation time of v8, we decided to check it. But first we were to understand what we want a new template engine to be.


Читать дальше... )
Метки: , , ,

Google Chrome!
[info]andrewsumin
Google Chrome 24,70%
Opera 24,09%
Mozilla Firefox 22,11%
Explorer 20,82%

Такие дела, статистика про mail.ru
Метки: ,

Доверие.
[info]andrewsumin
Давно предположил, но ждал нескольких лет проверки на себе одного предположения: любимому человеку надо однозначно и безоговорочно верить. Просто без вариантов. Не теребить на корпоративах, не нервировать в командировках, короче не сомневаться никогда и ни за что.

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

Если рассмотреть варианты, то.

Вы верите, а вам изменяют. Что имеем, несколько лет спокойной и счастливой жизни доверия, день разочарования и ты открыт для ноывх отношений.

Вы не верите и вам изменяют. Несколько лет нервотрепок, один день в стиле "я так и знал" и ты открыт для ноывх отношений.

Вы не верите, а вам не изменают. Вся жизнь на нервах у обоих, совсем плохой вариант.

Вы верите и вам не изменяют. win win.
Метки:

instagram
[info]andrewsumin
Общаясь со знакомыми и друзьями я слышу два мнения про сервисы вроде instagram.

Первое – круто, следующий шаг это кнопка "седелать шедевр" (с) veged.
Второе – ужас, если фото плохое, не прикрываяся фильтрами, хорошее не порти его фильтраим.

Интересно есть ли другие мнения? Мне кажется все интереснее.

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

Использовать слова для описания момента или состояния хорошая мысль, но:
– нужен талант для точной передачи состояния словами;
– нужно знать язык, хорошо если достаточно одного языка;
– нужно понимать что обрекаешь знакомых и друзей на потерю нескольких минут жизни чтобы прочесть твое творение.

Если рассмотреть картинку как способ:
– понятен всем;
– не требует особых навыков, если мы говорим про фотку для своих;
– воспринимается моментально и целиком.

Но у фотки есть одна проблема, в отличии от слов ее содержимое очень сложно фильтровать. Как в фото передать ровно то что ты хочешь? Речь идет не про образ, а про состояние, передать хочется именно состояние.

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

Казалось бы именно зрительный образ лучше всего должен решить эту задачу

но нет это не бар, это просто полки с бутылками.

Тут на помощь приходит второй интересный момент. Если на картинке не хватет деталей, то мозг их достраивает сам, а самое интересное, что он достраивает детали так, чтобы картина получилась максимально приятной для восприятия (помните порно в плохом качествес с рябью на экране?).

Тут уже ближе и могз, по крайней мере мой, ассоциирует эту картинку с моим последним визитом в бар.

Т.е. делая визуальный образ и немного стирая детали достигается одна единственная цель – мгновенно достать у друзей и знакомых из памяти то душевное состояние, в котором пребываешь сейчас сам и хочешь с ними поделиться.

Давайе попробуем еще раз.

Девушка в красном на белом фоне.


Стриптиз.
Метки:

Как не утонуть в мегабайтах JavaScript кода
[info]andrewsumin

Как увеличить хиты на сайте.
[info]andrewsumin
Вчера наблюдали забавный эффект. Если кто не в курсе недолго лежали сервера tns счетчиков.
Мы неожиданно получили больше хитов на главной странице



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



Открываем морду в этом браузе и видим что очень долго у курсора висит статус progress.
Интересно, что progress был практически во всех браузерах, но не возле курсора, а в закладке, например, и там всплесков небыло.
Метки: ,

NODE or PERL update
[info]andrewsumin
Дали совет, добавить строку

"с response.setEncoding('utf8') работает быстрее."
http://andrewsumin.ya.ru/replies.xml?parent_id=2827&item_no=2826&with_parent=1#reply-AndrewSumin-2827


Попробовал результат отличный

было
join: 593ms
parse: 668ms

стало
join: 95ms
parse: 630ms

для сравнения perl
join: 11ms
parse: 426ms

Еще идеи? Осталось ускорить раз в 7-8 и всем будет счастье.
Метки: ,

Продолжая тему NODE or PERL
[info]andrewsumin
У нас реальная задача забрать данные удаленно, для примера я сделал поход по http.
Превратить их в объект и обработать.

Тестовый пример на JS

var http = require('http');

http.request({host:'dreadatour.ru', port:80, path:'/larry.js', method:'GET'}, function(response){
    var body = new Array();
    response.on('data', function(chunk){body.push(chunk)})
            .on('end', function(){
                var i, join;
                console.time('join');
                for (i = 0; i < 100; i++){
                    join = body.join('');
                }
                console.timeEnd('join');
                console.time('parse');
                for (i = 0; i < 100; i++){
                    JSON.parse(join);
                }
                console.timeEnd('parse');
            });
}).end();


тестовый пример на perl


use strict;
use Time::HiRes qw(time);
use LWP::UserAgent;
use JSON::XS;

my (@body, $body, $json, $ua, $t);

$ua = new LWP::UserAgent;
$ua->request(HTTP::Request->new('GET', 'http://dreadatour.ru/larry.js'), sub { push @body, shift });

$t = time;
$body = join('', @body) foreach 1..100;
printf "join: %dms\n", int((time - $t) * 1000 + 0.5);

$t = time;
$json = JSON::XS->new->ascii->decode($body) foreach 1..100;
printf "parse: %dms\n", int((time - $t) * 1000 + 0.5);


Забираю даные чанками, собираю чанки в строку (измеряю), парсинг строки (измеряю)

Результаты:

node
join: 593ms
parse: 668ms

perl
join: 11ms
parse: 426ms

Вывод.
Парсинг отличается но не в разы, разница непричтна но терпима.
Но превращение массива чанков в строку отстает на 2 порядка.

Такое силное отставание дя нас блокер при наших нагрузках (100 000 000+ хитов в сутки).

Или мы мы опять не то измеряем?
Метки: ,

V8 JSON parse
[info]andrewsumin
Benchmark
~~~~~~~~~

$ perl parse-json.pl
json.read: 3ms
json.parse: 9ms
json.transform: 6ms
all: 18ms

$ php parse-json.php
json.read: 2ms
json.parse: 28ms
json.transform: 11ms
all: 44ms

$ node parse-json.js
json.read: 4ms
json.parse: 40ms
json.transform: 11ms
all: 68ms

https://github.com/RubaXa/NodeJS
Метки:

Три месяца работы в Mail.ru
[info]andrewsumin
Скажу честно, когда зашла речь о возможности поработать в mail.ru я очень сомневался. У меня есть знакомые в Яндексе, СУПе, естественно в hh.ru, даже в Рамблере и много где. Но никого не было в mail.ru (кроме Оли, но она не технарь). Я вообще редко мэйл встречал на конференциях и никогда на client-side конференциях.

Я очень удивился, когда узнал что там работают мои знакомые Алексей Сергеев и Сергей Мартынов. Их присутствие стало первым сигналом “может все не так как я себе представляю”.

Собеседование с тех. директором (Владимир Габриелян), его замом (Ермаков Игорь), с Анной Артамоной и все умные и адекватные.

Оставался еще один фактор. Верстку в отличии от сервер сайд кода не скроешь, и на главном продукте mail.ru все было не так радужно как на собеседованиях.

Окончательно чашу весов перевесило два фактора. Во-первых убивать плохую верстку и делать хорошую это моя работа. Во-вторых я очередной раз был на родине и там все мои знакомые, подчеркну все, а не большинство, ищут на Яндексе, а почта у них на mail.ru. Я уверен что они заслуживают пользоваться хорошим продуктом.

Я рискнул, по другому это никак не назовешь.

Еще один сюрприз меня ждал по выходу на работу. На верстке почты была новая и отличная команда. Да много легаси кода, да старый шаблонизатор, хоть и быстрый, но главное люди!

За три месяца мы переделали основыне страницы на БЭМ, внедрили SASS, сделали темы на почте, внедрили единую навигацию и шапку на основных проектах (Виталий Харисов, ты сейчас должен меня понять!) и перелопатили главную страницу (пару недель до запуска). Это только технически интересные задачи, сколько было сделано по бизнесу я боюсь считать.

Подробности технических задач я обязательно расскажу на ближайших конференциях и напишу в блоге.

Я никогда не успевал так много в такие короткие сроки, особенно если учесть что пол команды новые, вторая половина, как и я вообще с нуля.

Дальше уверен будет больше. В планах новые проекты, сменить шаблонизатор, и еще много чего о чем не могу рассказать.

P.S. у меня всегда есть вакансия для верстальщиков!
Метки:

Вы читаете журнал [info]andrewsumin