Обновить
256K+

JavaScript *

Прототипно-ориентированный язык программирования

245,52
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Пятничный JS: единственно верный способ вычисления факториала

Время на прочтение4 мин
Охват и читатели55K

Введение


Вычисление факториала — одна из традиционных программистских задач для собеседований. Если вдруг кто забыл, факториал натурального числа N обозначается как N! и равняется произведению всех натуральных чисел от единицы до N включительно. Например, $6! = 1 \cdot 2 \cdot 3 \cdot 4 \cdot 5 \cdot 6 = 720$. Казалось бы, что тут сложного? Однако есть свои нюансы.

Например, сравним два самых распространённых способа вычисления факториала.

Через цикл
function factorial(n){
    var result = 1;
    while(n){
        result *= n--;
    }
    return result;
}


Через рекурсию
function factorial(n, result){
    result = result || 1;
    if(!n){
        return result;
    }else{
        return factorial(n-1, result*n);
    }
}


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

В любом случае, оба эти способа слишком примитивны, чтобы по ним судить о знаниях кандидата. А вот опытный разработчик на React.js уже может написать что-то в этом роде:
Узнать, что же напишет опытный разработчик на React.js

Давайте поговорим про Teams

Время на прочтение10 мин
Охват и читатели29K
Маленький интересный рассказ о том, как ребята из Wrike интегировали Microsoft Teams в свой сервис и к чему это привело, а также большая техническая часть про сам процесс интеграции. Кстати, они одни из первых в мире сделали это в день релиза чата.


Читать дальше →

Как мы оптимизировали Twitter Lite

Время на прочтение13 мин
Охват и читатели12K

Twitter Lite и высокопроизводительные прогрессивные веб-приложения на React




Взгляд на то, как удаляли обычные и необычные узкие места в производительности при создании одного из крупнейших в мире прогрессивных веб-приложений (PWA) на React.js — Twitter Lite

Создание быстрого веб-приложения требует многих циклов измерений, куда тратится время. Нужно понять, почему это происходит, и применить потенциальные исправления. К сожалению, не бывает одного простого решения. Производительность — это бесконечная игра, где мы ищем и измеряем области для улучшения. В Twitter Lite сделано много маленьких улучшений в разных сферах: от первоначального времени загрузки до рендеринга компонентов React (и предотвращения повторного рендеринга), загрузки изображений и много другого. Большинство изменений небольшие, но они складываются, и в конечном результате мы получили одно из самых больших и быстрых прогрессивных веб-приложений.
Читать дальше →

Несколько строк JS кода для звонка из браузера на мобильный телефон

Время на прочтение6 мин
Охват и читатели18K
Flashphoner.createSession(...).createCall({callee:'+74957718000'}).call();

В этой статье мы расскажем как сделать кнопку для звонка со страницы сайта на мобильный или городской номер телефона.
Читать дальше →

Лямбда-исчисление на JavaScript

Время на прочтение8 мин
Охват и читатели67K
Привет! В этой статье я хочу в очередной раз взглянуть на лямбда-исчисление. Теоретическую сторону вопроса на хабре обсуждали уже множество раз, поэтому взглянем на то, как лямбда-исчисление может выглядеть на практике, например, на языке JavaScript (чтобы примеры можно было выполнять прямо в браузере).

Итак, основная идея: всё есть функция. Поэтому мы ограничим себя очень узким кругом возможностей языка: любое выражение будет либо анонимной функцией с одним аргументом (x => expr), либо вызовом функции (f (x)). То есть весь код будет выглядеть похожим образом:

id = x => x
double = f => x => f (f (x))

Поскольку результатом работы функций будут другие функции, нам понадобится способ интерпретировать результат. Это единственное место, в котором пригодятся нетривиальные возможности JavaScript.
Читать дальше →

Свой веб-сервер на NodeJS, и ни единого фреймворка. Часть 1

Время на прочтение7 мин
Охват и читатели139K
Для многих людей JavaScript ассоциативно связан с обилием разнообразных фреймворков и библиотек. Разумеется, инструменты, которые помогают нам каждый день — это хорошо, но, мне кажется, нужно искать некий баланс между использованием инструментов и прокрастинацией, а также знать, как работают вещи, которыми ты пользуешься. Поэтому, когда я только сел разбираться с NodeJS, мне было особенно интересно написать полноценный веб-сервер, которым я мог бы пользоваться сам.
Читать дальше →

Пытаемся управлять освобождением памяти в JavaScript

Время на прочтение7 мин
Охват и читатели8.8K


В JavaScript есть тысячи способов выделить память, но разработчики языка лишили нас права её освобождать. Этим занимается сборщик мусора (Garbage collector, GC), функций управления которым также нет. В большинстве случаев он неплохо справляется со своей работой, однако когда в программе непрерывно освобождаются большие объёмы данных, порядка мегабайта в секунду, сборщик мусора может тупить, из-за чего процесс браузера разрастается в памяти до невменяемых размеров. В этой статье я покажу пару грязных трюков, с помощью которых можно ускорить освобождение памяти.
Читать дальше →

Загрузка данных из REST API

Время на прочтение3 мин
Охват и читатели13K

Хочу поделиться ещё одним маленьким велосипедом — в первую очередь, чтобы получить бесценные советы. Дополнительные примеры можно посмотреть в исходниках фан-проекта на GitHub.

Читать дальше →

The Better Parts: доклад Дугласа Крокфорда о JavaScript и языках программирования будущего с конференции .concat() 2015

Время на прочтение25 мин
Охват и читатели20K
Кто знает о JS больше, чем один из его «отцов»? На HolyJS 2017 Piter приедет легендарный Дуглас Крокфорд, создатель JSON и автор множества инструментов JavaScript. В преддверии его выступлений в Петербурге публикуем перевод его выступления на .concat() 2015: The Better Parts — о том как использовать существующие языки программирования более эффективно и каким будет язык программирования будущего. Хотя с момента выступления прошло более года, доклад коснулся ряда «вечных» вопросов программирования, которые, мы уверены, будут актуальны и через 3-5 лет.


Что должен уметь фронтенд-разработчик

Время на прочтение6 мин
Охват и читатели570K
Редактор Нетологии Светлана Шаповалова разбирается в том, кто такой фронтенд-разработчик, что он должен уметь (или не должен) и за что ему платят прекрасную зарплату (или не очень).

Кто такой фронтенд-разработчик


Согласно ежегодному исследованию StackOverflow, самая популярная профессия среди пользователей сервиса в 2017 году — это Web developer. Именно в эту категорию входят все фронтенд-разработчики.


Читать дальше →

Dagaz: Репетиция

Время на прочтение7 мин
Охват и читатели3K
image — Неправда! В этой сказке говорится совсем не то.
— Но если ты уже знаешь, что говорится в этой сказке, зачем мне ее читать?
— Затем, что я хочу её услышать!

          Тед Чан "История твоей жизни"
 
 
 
Это большое событие, когда что-то вдруг начинает работать. Маловразумительные страницы кода на Java и JavaScript, ещё менее понятный XML, картинки, нарисованные в Paint-е — всё это вместе!
Теперь, это можно запустить и «потрогать». Тесты можно было запускать и раньше, они помогали добраться до этого дня. Но разве можно сравнить тесты с работающей программой? Работоспособный релиз! Для многих, эта веха знаменует конец пути.

Надеюсь, что для меня это только начало…
Читать дальше →

Создание приложения для тренировки мозга. Выбор технологии и приемы геймификации

Время на прочтение4 мин
Охват и читатели6.1K

В статье попытаюсь рассказать об опыте поиска кроссплатформенной технологии для реализации хобби проекта посвященного тренировке мозга и некоторых приемах ее геймификации.


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


И пока идея полностью не созрела, начался процесс поиска технологий для реализации версии сайта 2.0, плюс был интерес по изучать новые технологий и языки

Читать дальше →

Как сделать жизнь Redux разработчика проще?

Время на прочтение2 мин
Охват и читатели5K
Наверняка многие из вас, кто постоянно работают с React + Redux (а может не только с React), постоянно совершают множество однотипных действий. В оригинальном исполнении задача эта монотонная и включает в себя постоянное создание экшенов и редюсеров. Тем более, если приходится работать с какими-то экстраординарными кейсами, в игру включаются экшены с префиксами.

Ваш покорный слуга также испытал очень много батхерта страданий, пока работал по старинке, через switch → case, но я взглянул на задачу немного с другой стороны и привёл к единообразию это в более удобную функционально — объектную форму записи.

И так — после некоторого времени я (master-7) и мой коллега (one-more) попробовали справиться с этим страшным сном фронтэндера и создали весьма интересную библиотечку Redux-Utils.

Конечно же, мы попытались написать общепонятное и исчерпывающее ридми, но для затравки — несколько примеров в статье.
Читать дальше →

Ближайшие события

Карусель на Vanilla.JS

Время на прочтение4 мин
Охват и читатели36K
Прочитав эту статью решил запилить свою карусель с блэк-джеком и jQuery хотя нет, без него ибо 2017 год и он не особо и нужен. Создадим функцию, которая принимает объект с параметрами, и делает слайдер. Некоторые моменты будут опущены, такие, как: вендорные префиксы, таймер смены и т.д.
Первое что мы сделаем — разметка для карусели, на классах, а не id, дабы можно было использовать несколько раз один и тот же модуль на странице, ну и специфичность не была 3-его порядка.

А ваша вебкамера работает в новом Firefox 53?

Время на прочтение2 мин
Охват и читатели6.7K

В недавнем апдейте Firefox 53, возможно пропала поддержка некоторых веб-камер либо произошли какие-то сдвиги в WebRTC API. Сейчас разбираемся. Мы заметили это на тестах. Если в Firefox 52 видео корректно захватывалось со всех вебкамер, участвующих в тестировании, то в FF 53 некоторые камеры выпали, а именно встроенные камеры. Стоит заметить, что баг воспроизводится только со встроенными камерами под Windows 7 и Windows 8. Не воспроизводится с USB-камерами на Windows 10 и совсем не воспроизводится на Mac OS.
Читать дальше →

Трансляция RTMP видеопотока из Live Encoder на WebRTC

Время на прочтение7 мин
Охват и читатели36K

HTTP протоколы доставки видеоконтента, такие как HLS и DASH давно потеснили Flash в нише воспроизведения онлайн-видео контента в браузерах.

Тем не менее, изначально флэшовый протокол RTMP, остается одним из самых популярных способов доставки Live видео от источника видео до сервера ретранслятора. RTMP продолжают использовать такие сервисы, как Facebook Live, Youtube Live, и другие, где требуется вещать живое видео и проводить трансляции. Таким образом, несмотря на предсказания и констатации скорой кончины Flash, протокол RTMP все еще на коне и не уступает своих позиций в нише видеотрансляций.
Читать дальше →

Архитектура модульных React + Redux приложений 2. Ядро

Время на прочтение9 мин
Охват и читатели13K
В первой части я уделил внимание только общей концепции: редюсеры, компоненты и экшны чаще меняются одновременно, а не по отдельности, поэтому и группировать и их целесообразнее по модулям, а не по отдельным папкам actions, components, reducers. Также к модулям были предъявлены требования:

  1. быть независимыми друг от друга
  2. взаимодействовать с приложением через API ядра

В этой части я расскажу о структуре ядра, подходящей для разработки data-driven систем.
Читать дальше →

Дайджест свежих материалов из мира фронтенда за последнюю неделю №259 (17 — 24 апреля 2017)

Время на прочтение4 мин
Охват и читатели16K
Предлагаем вашему вниманию подборку с ссылками на полезные ресурсы и интересные материалы из области фронтенда.

Читать дальше →

Способы отладки JS на клиенте

Время на прочтение2 мин
Охват и читатели24K

Применительно к разработке на create-react-app (CRA) в браузере и в IDE WebStorm. Если вам известны какие-либо другие способы отладки, большая просьба поделиться знаниями.

Читать дальше →

Революция в JavaScript. Буквально

Время на прочтение11 мин
Охват и читатели16K
Сегодня 22 апреля юбилейного 2017 года, день рождения человека, без которого не состоялись бы события столетней давности. А значит, есть повод поговорить о революционной истории. Но причём тут Хабр? — Оказалось, всё в этом мире может иметь самую неожиданную связь.

Владимир Ильич Ленин
Читать дальше →