Pull to refresh
128K+

ReactJS *

JavaScript library for interfaces creation

43,02
Rating
Show first
Rating limit

В последнее время появляется всё больше новых решений, но выбрать по-прежнему сложно. Поэтому я потратил время, чтобы сравнить и провести бенчмарк всех решений для интернационализации в Next.js и TanStack Start.

На одном и том же приложении я протестировал 4 сценария, комбинируя динамическую загрузку и JSON-скоупинг по неймспейсам.

Что я измерял:

  • размер библиотеки

  • размер страницы

  • утечки неиспользуемого контента на страницу и локаль

  • размер компонентов

  • время загрузки, переключение страниц и реактивность приложения

После 6 часов тестов вот результаты:
Тренд оказался неожиданным. Чем более «хайповым» и модным является решение, тем хуже оно справляется с реальными задачами интернационализации. Самые приятные сюрпризы оказались там, где их меньше всего ожидаешь.

Отчёт TanStack
https://intlayer.org/ru/doc/benchmark/tanstack

Отчёт Next.js
https://intlayer.org/ru/doc/benchmark/nextjs

Репозиторий бенчмарка
https://github.com/intlayer-org/benchmark-i18n

(Считайте это версией v1. Интерпретация результатов частично основана на моих личных предпочтениях и опыте как автора решения. Буду рад обратной связи и предложениям по улучшению.)

Tags:
+1
Comments0

Next.js i18n битва: next-intl vs next-i18next vs Intlayer
Добавление нескольких языков в приложение Next.js может быть сложным: большие JSON-файлы, отсутствующие переводы, запутанная конфигурация.
Вот краткий обзор:
next-intl – лёгкий, простой, отлично подходит для небольших проектов.
next-i18next – функционально богатый, много плагинов, но требует больше настроек и поддержки.
Intlayer – современное решение для Next.js: контент на уровне компонентов, безопасность TypeScript, проверки на этапе сборки, SEO-помощники и опциональный визуальный редактор.
Если вы хотите масштабируемую, модульную и безопасную i18n для ваших Next.js 13+ приложений, Intlayer стоит попробовать.
📖 Полное сравнение здесь: https://intlayer.org/blog/next-i18next-vs-next-intl-vs-intlayer

Tags:
Total votes 1: ↑1 and ↓0+1
Comments0

Заголовок: Я переписал react-query | Легковесный хук для асинхронного получения данных и кэширования в React

Привет всем!

Я разработал легковесный React-хук, аналогичный React Query, с основными функциями: получение данных, кэширование, повторные попытки и др. Он компактнее и проще в настройке. Полный код доступен на GitHub и в npm как api-refetch.

Зачем создавать собственный хук?

  1. Легковесность: React Query и SWR мощные, но крупные. Мой хук идеален, когда важен размер пакета, особенно для зависимостей вроде Intlayer.

  2. Настройка и оптимизация: Возможность хранения данных в локальном хранилище и управления параллельными запросами. Копируя или клонируя код, можно удалить ненужные функции, уменьшив размер бандла и повысив производительность.

  3. Без провайдера: Избегаю использования Context Provider для глобального доступа, предлагая версию на базе Zustand.

  4. Учебное упражнение: Понимание внутренностей кэширования и управления состоянием.

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

Функции

  • Получение данных и управление состоянием: Загрузка, ошибки, успешные данные.

  • Кэширование и хранение: Через React или Zustand, поддержка локального хранилища.

  • Повторные попытки и валидация: Настраиваемые лимиты и интервалы.

  • Активация и инвалидизация: Управление запросами в зависимости от других данных.

  • Параллельные запросы: Предотвращение дублирования запросов при монтировании нескольких компонентов.

Пример использования

Установка

Клонируйте репозиторий или установите через npm:

npm install api-refetch

Быстрый пример

import { AsyncStateProvider, useAsync } from "api-refetch";

function App() {
  return (
    <AsyncStateProvider>
      <UserDetails />
    </AsyncStateProvider>
  );
}

const fetchUserData = async () => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve({ name: "John Doe" });
    }, 1000);
  });
};

const UserDetails = () => {
  const { isLoading, data, error, revalidate } = useAsync(
    "userDetails",
    fetchUserData,
    {
      enable: true,
      cache: true,
      store: true,
      retryLimit: 3,
      retryTime: 10000,
      autoFetch: true,
      revalidation: true,
      revalidateTime: 300000,
      onSuccess: (data) => console.log("Данные получены:", data),
      onError: (error) => console.error("Ошибка:", error),
    }
  );

  if (isLoading) return <div>Загрузка...</div>;
  if (error) return <div>Ошибка: {error}</div>;
  return (
    <div>
      <h1>{data?.name}</h1>
      <button onClick={revalidate}>Обновить</button>
    </div>
  );
};

Попробуйте api-refetch, сообщите об ошибках или внесите вклад. Обратная связь приветствуется!

GitHub: api-refetch

Счастливого кодинга!

Tags:
Total votes 1: ↑1 and ↓0+1
Comments2