اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

أولا CSR (Client-Side Rendering):

هنا الصفحة تعود من الخادم فارغة تقريبا أى ملف HTML بسيط به عنصر div فقط. والمتصفح يقوم بجلب ملفات JavaScript ويبدأ بتنفيذها ويقوم ببناء واجهة المستخدم والمستخدم لا يستطيع رؤية المحتوى إلا بعد تحميل وتنفيذ كود الجافاسكريبت.

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

ثانيا SSR (Server-Side Rendering) :

هنا الخادم بقوم بتوليد كود HTML كامل بالبيانات ويرسله للمتصفح والمستخدم يرى المحتوى مباشرة بدون انتظار.

ومن مميزاته انه سريع في التحميل الأولي وأيضا في ال SEO قوي لأن محركات البحث تجد كود ال HTML جاهز. ولكن من عيوبه أنه يقوم بالضغط على الخادم لأن كل طلب يحتاج لمعالجة كبيرة .

ثالثا SSG (Static Site Generation) :

هنا الصفحات يتم توليدها مرة واحدة وقت البناء build وتتحول إلى كود HTML ثابت و المستخدم يحصل على كود ال HTML جاهز مثل SSR لكن بدون ضغط على الخادم فالملفات جاهزة بالفعل و هو يستخدم للمدونات وللصفحات الثابتة.

ومن مميزاته أنه سريع جدا وفي ال SEO يعمل بشكل أفضل.

رابعا SEO (Search Engine Optimization) :

ال SEO هو عبارة عن تحسين ظهور موقعك في محركات البحث أى كيف ترى محركات البحث موقعك وهو يعتمد على وجود محتوى في HTML  و استخدام ال meta tags وسرعة تحميل الصفحة وأن يكون مناسب للهواتف .

وإخيرا إن ال SSR لا ينفذ في المتصفح مباشرة بل هو عملية تحدث في الخادم ولكن النتيجة أن ال HTML يتم توليده من ال Frontend.

 

  • 0
نشر
بتاريخ 1 دقيقة مضت قال Zen Eddin Allaham:

هل ISR يغني عن SSR SSG

إذا كان موقعك يتغير محتواه بشكل دائم أى أنه شبه ثابت مثلا موقع أخبار يتجدد كل 5 دقائق فهنا ال ISR أفضل من ال SSR لأنه أسرع .

أما إذا كان موقعك يحتاج بيانات لحظية وديناميكية فإن ال SSR أفضل.

أما إذا كان موقعك محتواه ثابت بشكل كامل فإن SSG جيد.

  • 0
نشر

CSR (Client-Side Rendering) - الرندر على جانب العميل

في CSR، يتم إرسال ملفات JavaScript الأساسية (مثل bundle.js) إلى متصفح العميل (الكلاينت). ثم يقوم المتصفح بتنفيذ الكود لإنشاء الـHTML والمحتوى ديناميكياً. هذا يعني أن السيرفر يرسل صفحة فارغة أو هيكل أساسي، والرندر الحقيقي يحدث على جهاز المستخدم.

  • المستخدم يطلب الصفحة.
  • السيرفر يرسل ملف HTML فارغ مع روابط لـJS/CSS.
  • المتصفح يحمّل الـJS ويبدأ في الرندر (مثل جلب بيانات من API).
  • الصفحة تظهر بعد تنفيذ الـJS (قد يكون هناك تأخير إذا كان الإنترنت بطيئاً).

تفاعلية عالية (مثل SPA - Single Page Applications)، تحديثات ديناميكية بدون إعادة تحميل الصفحة، أقل حمل على السيرفر.

وقت تحميل أولي أطول (Time to First Paint)، سيء لـSEO لأن محركات البحث قد لا ترى المحتوى إذا لم يتم تنفيذ الـJS.

// index.js (الرندر على الكلاينت)
import React from 'react';
import ReactDOM from 'react-dom';

function App() {
  // هنا يحدث الرندر على الكلاينت: جلب بيانات ديناميكية
  const [data, setData] = React.useState(null);
  React.useEffect(() => {
    fetch('https://api.example.com/data')  // جلب بيانات من API
      .then(response => response.json())
      .then(json => setData(json));
  }, []);

  return (
    <div>
      <h1>مرحبا، هذا CSR!</h1>
      {data ? <p>البيانات: {data.message}</p> : <p>جاري التحميل...</p>}
    </div>
  );
}

ReactDOM.render(<App />, document.getElementById('root'));  // الرندر يحدث هنا على الكلاينت

SSR (Server-Side Rendering) - الرندر على جانب السيرفر

 

في SSR، يقوم السيرفر بإنشاء الـHTML الكامل (مع البيانات) قبل إرسالها إلى العميل. هذا يعني أن الصفحة جاهزة للعرض فوراً عند الوصول.

  • المستخدم يطلب الصفحة.
  • السيرفر ينفذ الكود (مثل جلب بيانات من DB أو API) ويبني الـHTML.
  • يرسل الـHTML الجاهز إلى المتصفح.
  • المتصفح يعرض الصفحة فوراً، ثم يمكن إضافة تفاعلية عبر JS (Hydration).

تحميل أسرع (Time to First Contentful Paint أفضل)، جيد لـSEO لأن المحتوى موجود في الـHTML الخام، مناسب للمحتوى الديناميكي.

حمل أكبر على السيرفر (يجب أن يرندر كل طلب)، قد يكون بطيئاً إذا كان السيرفر مزدحماً.

// pages/index.js (SSR في Next.js)
import React from 'react';

function Home({ data }) {
  return (
    <div>
      <h1>مرحبا، هذا SSR!</h1>
      <p>البيانات من السيرفر: {data.message}</p>
    </div>
  );
}

// هذه الدالة تعمل على السيرفر لكل طلب
export async function getServerSideProps() {
  const res = await fetch('https://api.example.com/data');  // جلب بيانات على السيرفر
  const data = await res.json();
  return { props: { data } };  // إرسال البيانات إلى الكومبوننت
}

export default Home;

SSG (Static Site Generation) - توليد الموقع الثابت

في SSG، يتم بناء الصفحات الثابتة (Static) أثناء عملية البناء (Build Time)، ثم يتم تخزينها كملفات HTML جاهزة على السيرفر أو CDN. لا يحدث رندر ديناميكي لكل طلب.

  • أثناء البناء (npm run build)، يتم جلب البيانات وإنشاء الـHTML.
  • السيرفر يخزن الملفات الثابتة.
  • عند الطلب، يرسل السيرفر الـHTML الجاهز فوراً.

أسرع تحميل ممكن (من CDN)، أقل حمل على السيرفر، أمان عالي (لا كود يعمل على السيرفر)، ممتاز لـSEO.

غير مناسب للمحتوى الديناميكي المتغير كثيراً (يجب إعادة البناء للتحديثات)، لا يدعم تخصيص لكل مستخدم.

// pages/index.js (SSG في Next.js)
import React from 'react';

function Home({ data }) {
  return (
    <div>
      <h1>مرحبا، هذا SSG!</h1>
      <p>البيانات الثابتة: {data.message}</p>
    </div>
  );
}

// هذه الدالة تعمل أثناء البناء فقط
export async function getStaticProps() {
  const res = await fetch('https://api.example.com/data');  // جلب بيانات أثناء البناء
  const data = await res.json();
  return { props: { data } };  // الصفحة تُبنى مرة واحدة
}

export default Home;

SEO (Search Engine Optimization) - تحسين محركات البحث

SEO هو مجموعة من التقنيات لجعل موقعك يظهر أعلى في نتائج البحث (مثل Google). يتعلق بالمحتوى، السرعة، الهيكل، والوصولية.

كيف يرتبط بالآخرين:

CSR: سيء لـSEO لأن محركات البحث قد لا تنفذ الـJS، فترى صفحة فارغة.

SSR/SSG: جيد لـSEO لأن الـHTML يحتوي على المحتوى الكامل، مما يسهل على الـCrawlers قراءته.

استخدم meta tags، alt للصور، هيكل HTML جيد (h1, h2)، وأدوات مثل Google Search Console. في SSR/SSG، أضف getStaticPaths في Next.js للصفحات الديناميكية.

// pages/index.js (مع SEO)
import Head from 'next/head';

function Home() {
  return (
    <>
      <Head>
        <title>عنوان الصفحة لـSEO</title>  // يساعد في نتائج البحث
        <meta name="description" content="وصف الصفحة هنا" />
        <meta name="keywords" content="SSR, SSG, CSR" />
      </Head>
      <h1>مرحبا!</h1>
    </>
  );
}

export default Home;

نعم، يمكن استخدام SSR في تطبيقات الفرونت إند، لكن ليس بشكل مباشر "على الفرونت إند" لأن SSR يحدث على السيرفر. ومع ذلك، في إطارات مثل Next.js (لـReact) أو Nuxt.js (لـVue)، يمكنك دمج SSR مع الفرونت إند الديناميكي. الفرونت إند يتلقى الـHTML الجاهز من السيرفر، ثم يضيف التفاعلية عبر JS (Hydration). هذا يجعل التطبيق هجيناً: سريع مثل الثابت، وتفاعلي مثل CSR. إذا كنت تستخدم Vanilla JS بدون إطار، فSSR يتطلب سيرفر مثل Node.js/Express للرندر.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...