العربية

تعلم كيفية تطبيق التحسين التدريجي في React لإنشاء مواقع إلكترونية يسهل الوصول إليها وعالية الأداء وقوية، حتى مع تعطيل جافا سكريبت أو أثناء التحميل الأولي.

التحسين التدريجي في React: بناء مكونات اختيارية لجافا سكريبت

في مشهد تطوير الويب اليوم، أصبحت أطر عمل جافا سكريبت مثل React منتشرة في كل مكان. وعلى الرغم من أنها توفر أدوات قوية لإنشاء واجهات مستخدم ديناميكية وتفاعلية، إلا أن الاعتماد فقط على جافا سكريبت يمكن أن يؤدي إلى مشاكل في إمكانية الوصول والأداء وتحسين محركات البحث (SEO). وهنا يأتي دور التحسين التدريجي (PE). التحسين التدريجي هو استراتيجية لتطوير الويب تعطي الأولوية للوظائف والمحتوى الأساسي للموقع لتكون متاحة لجميع المستخدمين، بغض النظر عن إمكانيات متصفحهم أو توفر جافا سكريبت. يركز التحسين التدريجي في React على بناء مكونات تعمل حتى بدون جافا سكريبت، مما يوفر تجربة أساسية يتم تحسينها بعد ذلك باستخدام جافا سكريبت لتفاعل أغنى.

ما هو التحسين التدريجي؟

التحسين التدريجي ليس مفهومًا جديدًا. إنها فلسفة تدعو إلى بناء المواقع الإلكترونية على شكل طبقات، بدءًا من أساس متين من HTML و CSS. يضمن هذا الأساس أن يكون المحتوى متاحًا للجميع، بما في ذلك المستخدمون ذوو الإعاقة، وأولئك الذين يستخدمون اتصالات ذات نطاق ترددي منخفض، أو أولئك الذين قاموا بتعطيل جافا سكريبت. ثم تتم إضافة جافا سكريبت كتحسين لتوفير تجربة أغنى وأكثر تفاعلية. فكر في الأمر على أنه بناء منزل: تبدأ بالهيكل الأساسي ثم تضيف الميزات الفاخرة.

المبادئ الأساسية للتحسين التدريجي:

لماذا يهم التحسين التدريجي في React

يعتبر React، افتراضيًا، إطار عمل يعتمد بشكل كبير على جافا سكريبت. عندما يتم تصيير تطبيق React في المتصفح، فإنه يتطلب عادةً تنزيل وتحليل وتنفيذ كمية كبيرة من جافا سكريبت. وهذا يمكن أن يؤدي إلى عدة مشاكل:

تطبيق التحسين التدريجي في React يعالج هذه التحديات من خلال توفير تجربة أساسية تعمل حتى بدون جافا سكريبت. هذا لا يحسن فقط إمكانية الوصول والأداء، بل يعزز أيضًا تحسين محركات البحث من خلال ضمان أن تتمكن محركات البحث من الزحف إلى المحتوى وفهرسته بسهولة.

تقنيات التحسين التدريجي في React

يمكن استخدام عدة تقنيات لتطبيق التحسين التدريجي في React:

1. التصيير من جانب الخادم (SSR)

التصيير من جانب الخادم (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 الناتج إلى المتصفح.

2. توليد المواقع الثابتة (SSG)

توليد المواقع الثابتة (SSG) هو تقنية يتم فيها تصيير مكونات React في وقت البناء وتقديم ملفات HTML الناتجة مباشرة إلى العميل. هذا أسرع حتى من SSR لأن HTML يتم إنشاؤه مسبقًا ولا يتطلب أي معالجة من جانب الخادم عند كل طلب.

تدعم أطر العمل مثل Gatsby و Next.js أيضًا SSG. فهي تسمح لك بإنشاء ملفات HTML ثابتة من مكونات React الخاصة بك في وقت البناء.

مثال باستخدام Next.js:

لاستخدام SSG في Next.js، يمكنك استخدام دالة `getStaticProps` لجلب البيانات وتمريرها إلى المكون الخاص بك كخصائص.


// pages/blog/[id].js

export async function getStaticProps({ params }) {
  const postId = params.id;
  // جلب البيانات للمنشور من واجهة برمجة تطبيقات أو قاعدة بيانات
  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 ثابتة لكل منشور في وقت البناء.

3. التدهور التدريجي باستخدام <noscript>

تسمح لك علامة `


سيتم عرض هذا المحتوى إذا كانت جافا سكريبت مفعلة.

يمكنك استخدام علامة `

4. التصيير الشرطي

يسمح لك التصيير الشرطي بتصيير مكونات أو محتوى مختلف بناءً على ما إذا كانت جافا سكريبت مفعلة أم لا. يمكنك استخدام هذا لتحسين واجهة المستخدم تدريجيًا بميزات جافا سكريبت مع الاستمرار في توفير تجربة أساسية بدون جافا سكريبت.


import { useState, useEffect } from 'react';

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

  useEffect(() => {
    // التحقق مما إذا كانت جافا سكريبت مفعلة. هذا مثال مبسط.
    // في سيناريو واقعي، قد ترغب في استخدام طريقة أكثر قوة.
    setIsJavaScriptEnabled(typeof window !== 'undefined');
  }, []);

  return (
    
{isJavaScriptEnabled ? (

يتم تصيير هذا المحتوى باستخدام جافا سكريبت.

) : (

يتم تصيير هذا المحتوى بدون جافا سكريبت.

)}
); } export default MyComponent;

يستخدم هذا المثال خطافات `useState` و `useEffect` للتحقق مما إذا كانت جافا سكريبت مفعلة في المتصفح. بناءً على ذلك، يقوم بتصيير محتوى مختلف.

5. استخدام HTML الدلالي

استخدام عناصر HTML الدلالية أمر حاسم لكل من إمكانية الوصول والتحسين التدريجي. توفر عناصر HTML الدلالية معنى وبنية للمحتوى، مما يسهل على التقنيات المساعدة وزواحف محركات البحث فهمه. على سبيل المثال، استخدام عناصر `

` و `