فارسی

یاد بگیرید چگونه بهبود تدریجی React را برای ساخت وب‌سایت‌هایی که در دسترس، پرسرعت و پایدار هستند، حتی با جاوا اسکریپت غیرفعال یا در حین بارگذاری اولیه، پیاده‌سازی کنید.

بهبود تدریجی در React: ساخت کامپوننت‌های بدون نیاز به جاوا اسکریپت

در چشم‌انداز توسعه وب امروز، فریم‌ورک‌های جاوا اسکریپت مانند React همه‌گیر شده‌اند. در حالی که آن‌ها ابزارهای قدرتمندی برای ایجاد رابط‌های کاربری پویا و تعاملی ارائه می‌دهند، اتکای صرف به جاوا اسکریپت می‌تواند به مشکلاتی در زمینه دسترس‌پذیری، عملکرد و سئو منجر شود. اینجاست که بهبود تدریجی (Progressive Enhancement - PE) وارد می‌شود. بهبود تدریجی یک استراتژی برای توسعه وب است که اولویت آن در دسترس بودن عملکرد و محتوای اصلی وب‌سایت برای همه کاربران، صرف‌نظر از قابلیت‌های مرورگر یا در دسترس بودن جاوا اسکریپت است. بهبود تدریجی در React بر ساخت کامپوننت‌هایی تمرکز دارد که حتی بدون جاوا اسکریپت نیز کار می‌کنند و یک تجربه پایه را فراهم می‌کنند که سپس با جاوا اسکریپت برای تعامل غنی‌تر بهبود می‌یابد.

بهبود تدریجی چیست؟

بهبود تدریجی مفهوم جدیدی نیست. این یک فلسفه است که از ساخت وب‌سایت‌ها به صورت لایه‌لایه، با شروع از یک پایه محکم از HTML و CSS، حمایت می‌کند. این پایه تضمین می‌کند که محتوا برای همه، از جمله کاربران دارای معلولیت، کسانی که از اتصالات با پهنای باند کم استفاده می‌کنند، یا کسانی که جاوا اسکریپت را غیرفعال کرده‌اند، در دسترس باشد. سپس جاوا اسکریپت به عنوان یک بهبود برای ارائه تجربه‌ای غنی‌تر و تعاملی‌تر اضافه می‌شود. به آن مانند ساختن یک خانه فکر کنید: شما با ساختار اصلی شروع می‌کنید و سپس ویژگی‌های فانتزی را اضافه می‌کنید.

اصول کلیدی بهبود تدریجی:

چرا بهبود تدریجی در React اهمیت دارد؟

React، به طور پیش‌فرض، یک فریم‌ورک سنگین از نظر جاوا اسکریپت است. هنگامی که یک برنامه React در مرورگر رندر می‌شود، معمولاً به دانلود، تجزیه و اجرای مقدار قابل توجهی جاوا اسکریپت نیاز دارد. این می‌تواند به چندین مشکل منجر شود:

پیاده‌سازی بهبود تدریجی در React با ارائه یک تجربه پایه که حتی بدون جاوا اسکریپت نیز کاربردی است، این چالش‌ها را برطرف می‌کند. این نه تنها دسترس‌پذیری و عملکرد را بهبود می‌بخشد، بلکه با اطمینان از اینکه موتورهای جستجو می‌توانند به راحتی محتوا را بخزند و ایندکس کنند، سئو را نیز تقویت می‌کند.

تکنیک‌های بهبود تدریجی در React

چندین تکنیک برای پیاده‌سازی بهبود تدریجی در React وجود دارد:

۱. رندر سمت سرور (SSR)

رندر سمت سرور (Server-Side Rendering - SSR) تکنیکی است که در آن کامپوننت‌های React روی سرور رندر می‌شوند و HTML حاصل به کلاینت ارسال می‌شود. این به مرورگر اجازه می‌دهد تا محتوا را بلافاصله، حتی قبل از دانلود و اجرای جاوا اسکریپت، نمایش دهد. SSR چندین مزیت دارد:

فریم‌ورک‌هایی مانند Next.js و Remix پیاده‌سازی SSR در React را نسبتاً ساده می‌کنند. آنها پشتیبانی داخلی برای رندر سمت سرور، مسیریابی و واکشی داده‌ها فراهم می‌کنند.

مثال با استفاده از Next.js:

Next.js به طور خودکار SSR را برای صفحات در دایرکتوری `pages` مدیریت می‌کند. در اینجا یک مثال ساده آورده شده است:


// pages/index.js
function HomePage() {
  return 

به وب‌سایت من خوش آمدید!

; } export default HomePage;

هنگامی که یک کاربر از صفحه اصلی بازدید می‌کند، Next.js کامپوننت `HomePage` را روی سرور رندر کرده و HTML حاصل را به مرورگر ارسال می‌کند.

۲. تولید سایت استاتیک (SSG)

تولید سایت استاتیک (Static Site Generation - SSG) تکنیکی است که در آن کامپوننت‌های React در زمان ساخت (build time) رندر می‌شوند و فایل‌های HTML حاصل مستقیماً به کلاینت ارائه می‌شوند. این حتی سریع‌تر از SSR است زیرا HTML از پیش تولید شده و به هیچ پردازش سمت سروری در هر درخواست نیاز ندارد.

فریم‌ورک‌هایی مانند Gatsby و Next.js نیز از SSG پشتیبانی می‌کنند. آنها به شما امکان می‌دهند فایل‌های HTML استاتیک را از کامپوننت‌های React خود در زمان ساخت تولید کنید.

مثال با استفاده از Next.js:

برای استفاده از SSG در Next.js، می‌توانید از تابع `getStaticProps` برای واکشی داده‌ها و ارسال آن به کامپوننت خود به عنوان props استفاده کنید.


// pages/blog/[id].js

export async function getStaticProps({ params }) {
  const postId = params.id;
  // واکشی داده‌ها برای پست از یک API یا پایگاه داده
  const post = { id: postId, title: `پست ${postId}`, content: `محتوای پست ${postId}` };

  return {
    props: {
      post,
    },
  };
}

export async function getStaticPaths() {
  // مقادیر ممکن برای پارامتر `id` را تعریف کنید
  const paths = [
    { params: { id: '1' } },
    { params: { id: '2' } },
    { params: { id: '3' } },
  ];

  return {
    paths,
    fallback: false, // اگر می‌خواهید صفحات را در لحظه تولید کنید، آن را true قرار دهید
  };
}

function BlogPost({ post }) {
  return (
    

{post.title}

{post.content}

); } export default BlogPost;

Next.js فایل‌های HTML استاتیک را برای هر پست در زمان ساخت تولید خواهد کرد.

۳. تنزل زیبا با `

تگ `


این محتوا در صورت فعال بودن جاوا اسکریپت نمایش داده می‌شود.

شما می‌توانید از تگ `

۴. رندر شرطی

رندر شرطی به شما امکان می‌دهد کامپوننت‌ها یا محتوای متفاوتی را بر اساس فعال بودن یا نبودن جاوا اسکریپت رندر کنید. می‌توانید از این برای بهبود تدریجی رابط کاربری با ویژگی‌های جاوا اسکریپت استفاده کنید در حالی که هنوز یک تجربه پایه بدون جاوا اسکریپت ارائه می‌دهید.


import { useState, useEffect } from 'react';

function MyComponent() {
  const [isJavaScriptEnabled, setIsJavaScriptEnabled] = useState(true);

  useEffect(() => {
    // بررسی کنید که آیا جاوا اسکریپت فعال است. این یک مثال ساده شده است.
    // در یک سناریوی واقعی، ممکن است بخواهید از یک روش قوی‌تر استفاده کنید.
    setIsJavaScriptEnabled(typeof window !== 'undefined');
  }, []);

  return (
    
{isJavaScriptEnabled ? (

این محتوا با جاوا اسکریپت رندر می‌شود.

) : (

این محتوا بدون جاوا اسکریپت رندر می‌شود.

)}
); } export default MyComponent;

این مثال از هوک‌های `useState` و `useEffect` برای بررسی فعال بودن جاوا اسکریپت در مرورگر استفاده می‌کند. بر این اساس، محتوای متفاوتی را رندر می‌کند.

۵. استفاده از HTML معنایی

استفاده از عناصر HTML معنایی هم برای دسترس‌پذیری و هم برای بهبود تدریجی حیاتی است. عناصر HTML معنایی به محتوا معنا و ساختار می‌بخشند و درک آن را برای فناوری‌های کمکی و خزنده‌های موتورهای جستجو آسان‌تر می‌کنند. به عنوان مثال، استفاده از عناصر `

`، `