Pull to refresh
49
0
Alexander Shtuchkin @ashtuchkin

User

Вот вам ещё 3 теста, которые не проходит ваш текущий код:

assert.equal(add(0)(0.5), 0.5);
assert.equal(add('aa')(1), 1);
assert.equal(add('aa'), 0);


Лучше заменить parseInt(val+'', 10) на более стандартное приведение к числу +val (оно вызовет .valueOf), а если предполагаем что строки и другие объекты у нас считаются нулями (с чем я бы поспорил), то добавляем "|| 0". Получаем короче и симметричнее:

var add = function (orig) {
  var inner = function (val) {
    return add((+val || 0) + (+orig || 0));
  };
  inner.valueOf = function () {return +orig || 0;};

  return inner;
};
ИМХО, специфичность здесь ни при чём.

Проблема здесь в том, что эти модификаторы слишком низкоуровневые и действительно эквивалентны inline-стилям, а значит не нужны.

Гораздо лучше было бы модификаторы делать более высокоуровневые — например, b-link_primary, b-link_secondary, b-link_inverted-background в которых стиль ссылок соответствует семантике, а не деталям реализации.

Хороший тест для проверки этого свойства — это придумать хотя бы 2 различные реализации модификатора. Для b-link_primary их бесчисленное множество, в зависимости от стиля сайта. Для b-link_white или b-link_undecorate — только одна.
Там дальше разъясняют, что не добавили поддержку, а просто увеличили производительность на бенчмарке asm.js.

Кстати, как альтернативное мнение о asm.js (с которым я согласен) можно почитать замечательную статью от одного из разработчиков V8:
mrale.ph/blog/2013/03/28/why-asmjs-bothers-me.html
А я уже во втором проекте использую для этих целей UploadCare, опыт оч. положительный.
Спасибо за видео!
Что-то всё равно не выходит у меня каменный цветок. Пробую на ubuntu 12.04, node.js, делает file watcher с грехом пополам, в списке файлов .js и .map лежат рядом с .coffee, breakpoints не работают…
Я не спорю. Просто сейчас для генерации Source Maps используется только Redux, а он ещё не полностью понимает все фичи языка. Использовать обычный компилятор (тот, который github.com/jashkenas/coffee-script) было бы лучше, т.к. вся кодовая база написано под него.
Как я вижу сейчас для Source Maps поддерживается только CoffeeScript Redux. На днях вышла их поддержка и в основном CoffeeScript. Есть ли планы поддержки?
Jeremy Ashkenas говорит что у Redux значительно чище и меньше код, поэтому когда допилят сделают официальной версией 2.0.
Спасибо вам за вашу работу!
Присоединяюсь к благодарности за статью (хотя заголовок, мне кажется, мог бы быть и поскромнее).

Вопрос по существу — если у вас разные типы объектов обрабатываются в разных потоках, то не возникает ли проблем с неопределённостью *порядка* обработки? Условно, если 2 объекта разных типов как-то связаны (например, через общие данные), то при разном порядке их обработки могут быть различные варианты развития событий, на макро уровне.

Плюс, не может ли это повлиять на рассинхронизацию состояния с клиентами? Ведь у клиентов-то всё в одном потоке, насколько я понимаю.
Вроде не имеет github.com/jashkenas/coffee-script/issues/558
Только Redux aka Coffeescript 2, но он еще не вышел github.com/michaelficarra/CoffeeScriptRedux
По-моему, очень годное начинание, спасибо, автор!

Нет, не требовалось. Хотя, после теста они прислали мне письмо, что зарегистрировали атаку с моего сервера, т.к. количество пакетов превысило 30 тыс в секунду (мой сервер отсылал 50 тыс), но ничего страшного — я написал, что это тест и всё.
Просто тут нет ситуации, когда БД выполняет 1 секунду запрос от 1 клиента, а остальные 999999 клиентов эту секунду ждут из-за того, что Event Loop заблокирован. В реальности сразу после посылки запроса БД (например, записи в TCP сокет БД) управление возвращается Event Loop-у. Далее идет обработка событий от других клиентов в штатном режиме, а через секунду от операционной системы приходит событие, что в TCP сокете БД появились данные, они обрабатываются и возвращаются клиенту. То, что сама БД синхронная или асинхронная — совершенно не важно. Важно, что работа с ней асинхронная, через асинхронный механизм TCP сокетов.
Совершенно другой вопрос, если, например, веб-сервер может обрабатывать 10 тыс запросов в секунду, каждый запрос генерирует 1 запрос в БД, а БД может обрабатывать только 1 тыс в секунду. Тогда очевидно, что все очереди переполнятся и скорость упадёт до скорости БД. Но, я так понимаю, вы не этот случай имели в виду.
В свою очередь извиняюсь, что не сделал это очевидным) С остальным полностью согласен!
Именно в этом сила экосистемы Node.js — там всё асинхронное по умолчанию. И ввод-вывод тоже асинхронный, как файловый, так и сетевой (по крайней мере до уровня операционной системы, а дальше нам не прыгнуть).

С базами данных — все драйвера БД в Node.js асинхронные, насколько я знаю. Т.е. сама база может быть и синхронная, но взаимодействие с ней — нет. Event Loop никогда не ждёт ответа, операционная система сама оповещает когда нужно, что ответ пришёл.

Вот с долгими вычислениями — может быть проблема, но есть предположение, что в большинстве веб-серверов они не возникают, а если и возникают, то можно опять же асинхронно передать задачу другому воркеру или серверу.
Действительно, пока не придёт подтверждения, вся отправленная информация хранится в буфере ядра.
На графиках в статье суммарный объём памяти, используемой ядром, обозначается серой полосой (разница между Total Netto и RSS Sum), это около 4 Гб в пике, по 4 кб на соединение. Думаю, этого должно хватить для обслуживания совсем медленных клиентов если их будет не большинство.

К тому же, т.к. в тесте клиентские машины были равномерно в 3-х датацентрах AWS, два из них в США, а сервер — в Германии, а, думаю, пинг у них был не менее 200-300 мс, то это можно считать вполне реалистичной пользовательской нагрузкой (если, конечно, не целиться на мобильные клиенты — там, конечно, всё по другому).
Вроде ничего страшного не предвидится. В текущем тесте передается один пакет в 20 секун, мне кажется это уже достаточно медленно. Возможно, если вы опишете подробнее что вы имеете в виду, тогда можно будет сделать тест.
Меня тут побьют, но это CSV -> Excel 2013 preview. Возможно, это можно как-то автоматизировать.
Класс! Стоит статьи на хабре!
1

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity