Как посчитать время чтения текста (и добавить индикатор на сайт)

Инструкция по добавлению индикатора времени чтения текста на сайт.

Как посчитать время чтения текста (и добавить индикатор на сайт)
Дата публикации
22.06.24
Время чтения
4 мин.
Автор
Алексей Баранов

Индикатор времени чтения — простая деталь, которая улучшает пользовательский опыт: читатель сразу понимает, сколько времени займёт статья.

В этой статье разберём:

  • как считается время чтения;
  • какую скорость брать за основу;
  • как реализовать расчёт на JavaScript / TypeScript.

Как быстро посчитать время чтения текста

Базовая логика очень простая:

  • считаем количество слов в тексте;
  • делим на среднюю скорость чтения.

Формула расчёта

Формула выглядит так:

время чтения (мин) = количество слов / скорость чтения

Чтобы избежать значения 0 минут, результат обычно округляют вверх.

Пример расчёта

700 слов / 140 слов в минуту ≈ 5 минут

Какая скорость чтения считается нормальной

Единого стандарта нет, но обычно используют такие значения:

  • 100–120 слов/мин — сложный или технический текст
  • 130–160 слов/мин — обычные статьи
  • 180+ слов/мин — лёгкое чтение

Для блога с техническим контентом разумно брать около 140 слов в минуту — это даёт более реалистичную оценку.

Подсчёт количества слов

Начнём с функции подсчёта слов. Один из самых простых вариантов — использовать регулярное выражение:

export const countWords = (str: string) => {
  const words = str.match(/[ЁёА-я\w\d\’\'-]+/gi);
  return words ? words.length : 0;
};

Важный момент

Обратите внимание на часть:

ЁёА-я

Без неё кириллические слова не будут учитываться, и результат окажется некорректным (например, будет считаться только код или латиница).

Тесты для функции подсчёта слов

После этого я написал несколько тестов для функции countWords, вот один из них для примера:

it("should return correct value for cyrillic string", () => {
  // arrange
  const expectedResult = 1;
  const inputValue = "тест";

  // act
  const result = countWords(inputValue);

  // assert
  expect(result).toBe(expectedResult);
});

Расчёт скорости чтения

Теперь подсчитаем количество слов:

const AVERAGE_READ_SPEED = 140; //Слов в минуту

export const getReadTime = (content: string) => {
  return Math.ceil(countWords(content) / AVERAGE_READ_SPEED);
};

Не забудьте про округление

Обратите внимание на вызов:

Math.ceil()

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

Тесты для функции подсчёта времени чтения

it("should return 0 for an empty string", () => {
  // arrange
  const expectedResult = 0;
  const inputValue = "";

  // act
  const result = getReadTime(inputValue);

  // assert
  expect(result).toBe(expectedResult);
});

it("should return 1 for not empty string", () => {
  // arrange
  const expectedResult = 1;
  const inputValue = "тест";

  // act
  const result = getReadTime(inputValue);

  // assert
  expect(result).toBe(expectedResult);
});

Ограничения подхода

Важно понимать, что это приближённая оценка:

  • не учитывается сложность текста;
  • не учитываются изображения, код и форматирование;
  • скорость чтения у разных людей отличается.

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

Где это может пригодиться

Индикатор времени чтения полезен не только разработчикам, но и:

  • авторам блогов;
  • копирайтерам;
  • SEO-специалистам;
  • редакторам;
  • студентам;

Это простой способ сделать контент более предсказуемым для читателя.

Как проверить результат

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

На этом всё! Спасибо за внимание!

Расскажите о вашем проекте

Связаться иначе

Вам может быть интересно

Добавляем рекомендации постов и блок "Поделиться в соц. сетях"
Добавляем рекомендации постов и блок "Поделиться в соц. сетях"

Добавляем рекомендации постов и блок "Поделиться в соц. сетях"

4 мин.

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

Пост#туториалы
Добавляем пагинацию в статический блог на Next.js
Добавляем пагинацию в статический блог на Next.js

Добавляем пагинацию в статический блог на Next.js

4 мин.

Инструкция по добавлению пагинации постов в статическом блоге на Next.js...

Пост#туториалы#nextjs
Добавляем кнопку для сбора пожертвований (донатов) к блогу
Добавляем кнопку для сбора пожертвований (донатов) к блогу

Добавляем кнопку для сбора пожертвований (донатов) к блогу

6 мин.

Инструкция по добавлению кнопки для сбора пожертвований (донатов) к блогу...

Пост#туториалы
Автопостинг в VK через RSS feed
Автопостинг в VK через RSS feed

Автопостинг в VK через RSS feed

4 мин.

Заметили в настройках сообщества в VK интересную настройку, связанную с фидами. И понеслось...

Пост#соцсети#фиды
Текстовый калькулятор
Текстовый калькулятор

Текстовый калькулятор

Утилита для подсчёта длины, количества слов и примерного времени чтения текста/статьи онлайн.

Инструмент#calculator