Frontend по-флотски 👨‍💻
4.51K subscribers
277 photos
61 videos
1 file
534 links
Новости, идеи и знания из мира разработки интерфейсов

Контакт: @qmzik

Про жизнь: @nikita_alena_travel
Download Telegram
Ну что, Holy.js стартанул, в этот раз дают таких стильных уточек 🤓

Через пару часов скину задачки, порешаем вместе 👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥28👍4👏1
Знаю, что ты скучаешь на работе, думаю тебе стоит сделать паузу и решить кроссворд😏
Please open Telegram to view this post
VIEW IN TELEGRAM
13🔥7👍1
This media is not supported in your browser
VIEW IN TELEGRAM
В каждой шутке есть доля неправды 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
😁17🤡11👍3👎3💊21👏1
This media is not supported in your browser
VIEW IN TELEGRAM
Теперь можно тротлить или блочить отдельный запрос через девтулзы хрома, мега удобно 🔥

https://developer.chrome.com/blog/throttle-individual-network-requests

P.S. извини что пропал, возвращаюсь в строй, всех с прошедшим НГ 🫡
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥53👍11❤‍🔥6
Cache Components в Next.js 16 — новая модель кэширования 👨‍💻

В Next.js 16 появился Cache Components — новый подход к кэшированию, построенный вокруг директивы 'use cache'. Главное изменение: кэширование теперь полностью opt-in. Никакого неявного кэширования — весь динамический код выполняется в момент запроса по умолчанию

Как включить?
// next.config.ts
const nextConfig = {
cacheComponents: true,
};

export default nextConfig;


Как работает?
Директива 'use cache' применяется к страницам, компонентам или функциям. Компилятор автоматически генерирует ключи кэша — не нужно вручную прописывать зависимости
Cache Components дополняет Partial Pre-Rendering (PPR), который появился ещё в 2023. PPR позволял рендерить части страницы статически, а части — динамически через Suspense. Теперь эта концепция получила полноценный API

Есть 3 варианта где будет храниться кэш в зависимости от директивы
'use cache' — in-memory на сервере
'use cache: remote' — внешнее хранилище (Redis)
'use cache: private' — память браузера


Пример 1: Кэширование функции получения данных
import { cacheLife, cacheTag } from 'next/cache';

async function getProducts() {
'use cache';
cacheLife('hours'); // кэш на несколько часов
cacheTag('products'); // тег для инвалидации

const res = await fetch('https://api.store.com/products');
return res.json();
}


Теперь getProducts() вернёт закэшированный результат. Компилятор автоматически сгенерирует ключ кэша на основе аргументов функции

Пример 2: Кэширование целого компонента

async function ProductCard({ id }: { id: string }) {
'use cache';
cacheLife('days');
cacheTag(`product-${id}`);

const product = await getProduct(id);

return (
<div className="card">
<h2>{product.name}</h2>
<p>{product.price} ₽</p>
</div>
);
}


Каждый ProductCard с уникальным id получит свой кэш. При изменении товара инвалидируем только его: revalidateTag('product-123', 'max')

Пример 3: Partial Pre-Rendering (PPR)
Cache Components отлично работает с PPR — можно комбинировать статику и динамику на одной странице:

import { Suspense } from 'react';

export default async function ProductPage({ params }) {
const { id } = await params;

return (
<div>
{/* Статическая часть — закэширована */}
<ProductDetails id={id} />

{/* Динамическая часть — рендерится на лету */}
<Suspense fallback={<div>Загрузка...</div>}>
<PersonalizedRecommendations productId={id} />
</Suspense>
</div>
);
}

async function ProductDetails({ id }: { id: string }) {
'use cache';
cacheLife('max');

const product = await fetchProduct(id);
return <div>{product.description}</div>;
}

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

Документация и анонс 👇
https://nextjs.org/docs/app/api-reference/config/next-config-js/cacheComponents
https://nextjs.org/blog/next-16#cache-components
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9🤣5❤‍🔥2👍2👎2😁2🗿21
А помнишь как мы с тобой использовали transform: rotate(90deg), чтобы покрутить элемент на 90 градусов, но забывали, что где-то выше было transform: translate(-50%) и всё ломалось :(

Во были времена... сейчас как-то всё слишком легко...
😁22👍5🫡43💯2