HTML Academy · درس

التوجيه القائم على Hash في مقابل التوجيه القائم على Path

مقارنة توجيه Hash بتوجيه السجل القائم على pushState

الدرس 3 من 414 خطوة

التوجيه القائم على Hash في مقابل التوجيه القائم على Path درس مجاني في HTML Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في HTML Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة HTML Academy 4 دروس في المجموع.

استراتيجيتان لعناوين URL في SPA

تحتاج تطبيقات SPA إلى عناوين URL لا يجلبها المتصفح. هناك نهجان: يستخدم التوجيه المعتمد على الهاش الجزء اللاحق للرمز #، والذي لا يرسله المتصفح إلى الخادم مطلقًا، بينما يستخدم التوجيه المعتمد على المسار اسم المسار مع بعض حيل History API.

التوجيه المعتمد على الهاش

تبدو عناوين URL مثل https://example.com/#/about. لا يرى الخادم سوى / ويقدّم HTML نفسه لكل عنوان URL. يقرأ JavaScript من جانب العميل location.hash لتحديد العرض الذي يجب عرضه. وهذا حل بسيط لا يتطلب إعدادًا للخادم.

حدث hashchange

يستمع جهاز التوجيه المعتمد على الهاش إلى حدث hashchange الذي يُطلَق كلما تغيّرت location.hash. وبالاقتران مع قراءة window.location.hash، تمثل هذه كل واجهة API اللازمة للتوجيه من جانب العميل — من دون استخدام History API.

window.addEventListener("hashchange", () => {
  const route = location.hash.slice(1) || "/";
  renderPage(route);
});

التوجيه المعتمد على المسار

تبدو عناوين URL مثل https://example.com/about — ولا يمكن تمييزها عن العناوين التي يعرضها الخادم. يغيّر pushState في History API المسار دون إعادة تحميل؛ ويُطلَق popstate عند التنقّل إلى الخلف أو إلى الأمام؛ ويحوّل اعتراض النقرات على عناصر <a> إلى تنقّل في SPA.

إعداد الخادم مطلوب

في التوجيه المعتمد على المسار، يجب أن يعيد الخادم ملف index.html الخاص بتطبيق SPA لأي مسار قد يدخله المستخدم مباشرةً أو يعيد تحميله. وإلا فستؤدي إعادة تحميل /about إلى خطأ 404. الإعداد المطلوب هو: جرّب الملف، ثم استخدم index.html كخيار احتياطي، كما في history fallback في Nginx وvite-plugin-history-api في Vite dev.

# Nginx config
location / {
  try_files $uri $uri/ /index.html;
}

تحسين الظهور في محركات البحث والمشاركة

لا تستطيع محركات البحث وكثير من الأدوات الزحف إلى أجزاء الهاش إطلاقًا — فالمحتوى الموجود في /#/about غير مرئي لبرامج الزحف القديمة، مع أن Google يتعامل معه عبر العرض دون واجهة رسومية وقد لا تفعل الأدوات الأخرى ذلك. أما عناوين URL المعتمدة على المسار فيجري الزحف إليها بشكل طبيعي، مما يجعلها أفضل بكثير لتحسين الظهور في محركات البحث.

انطباع المستخدم

تبدو عناوين URL المعتمدة على الهاش «غريبة» بوضوح — إذ يلاحظ المستخدمون الرمز # وقد لا يثقون بالرابط أو يتذكرون نسخ عنوان URL كاملًا. أما عناوين URL المعتمدة على المسار فتبدو مثل أي عنوان ويب آخر، وهذا ما يتوقعه المستخدمون. ولهذا السبب وحده تقريبًا، تختار تطبيقات SPA الحديثة التوجيه المعتمد على المسار.

تعقيد التنفيذ

التوجيه المعتمد على الهاش: نحو 10 أسطر من JavaScript، تشمل مستمع hashchange والعرض. أما التوجيه المعتمد على المسار فيتطلب استدعاءات pushState ومستمع popstate واعتراض نقرات الروابط وخيارًا احتياطيًا من جهة الخادم. الهاش هو الخيار الأخف ممكنًا؛ بينما يتطلب المسار بنية تحتية أكبر لتوفير تجربة مستخدم أفضل.

اعتبارات الاستضافة الثابتة

لا تستطيع الاستضافات الثابتة البحتة، مثل الإعداد الافتراضي لـ GitHub Pages، تنفيذ الخيار الاحتياطي من جهة الخادم، لذلك يتعطل التوجيه المعتمد على المسار عند إعادة التحميل. تشمل الحلول الالتفافية حيل إعادة التوجيه عبر 404.html، أو الاستضافة على Netlify أو Vercel اللذين يفهمان الخيار الاحتياطي لتطبيقات SPA، أو قبول التوجيه المعتمد على الهاش في المشاريع المخصصة للاستضافة الثابتة فقط.

الأساليب الهجينة

تجمع بعض التطبيقات بين النهجين: التوجيه المعتمد على المسار للمسار الأساسي، والهاش للأقسام داخل الصفحة، مثل النوافذ المشروطة ومراسي الألسنة. ويظل حدث hashchange يُطلَق لهذه الحالات، ليكمّل جهاز التوجيه المعتمد على History في حالة الصفحة الفرعية دون إفساد عنوان URL الرئيسي.

الترحيل بين النهجين

للترحيل من الهاش إلى المسار: أعد كتابة جميع الروابط الداخلية، وأضف خيارًا احتياطيًا للخادم، واستبدل منطق hashchange بـ popstate، وأعد توجيه عناوين URL القديمة التي تستخدم الهاش إلى نظيراتها المعتمدة على المسار باستخدام نص تمهيدي صغير يُشغّل مرة واحدة ويستدعي history.replaceState.

معايير الاختيار

اختر التوجيه المعتمد على الهاش في الحالات التالية: الاستضافات الثابتة التي لا تدعم إعادة الكتابة، وأدوات الإدارة الداخلية التي لا تهمها محركات البحث، والعناصر المضمّنة. واختر التوجيه المعتمد على المسار في الحالات التالية: كل ما يواجه المستخدمين، وكل ما ينبغي فهرسته في محركات البحث، وكل ما ستتم مشاركته على الشبكات الاجتماعية — وهذا يشمل معظم التطبيقات.

اختبار المعرفة

لماذا يتطلب التوجيه المعتمد على المسار في تطبيقات SPA إعدادًا للخادم لا يتطلبه التوجيه المعتمد على الهاش؟

ملخص

لا يحتاج التوجيه المعتمد على الهاش، بعناوين URL مثل /#/about، إلى إعداد للخادم، لكنه يعاني من ضعف الظهور في محركات البحث ويستخدم عناوين URL غير أنيقة. أما التوجيه المعتمد على المسار، بعناوين URL مثل /about، فيحتاج إلى خيار احتياطي من الخادم يعيد index.html، لكنه ينتج عناوين URL نظيفة وملائمة لمحركات البحث وسهلة المشاركة. تستخدم تطبيقات SPA الحديثة الموجهة للجمهور التوجيه المعتمد على المسار؛ بينما قد تختار المشاريع المستضافة استاتيكيًا أو الداخلية الهاش لبساطته.

البدء مجانًا

تعلم HTML مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
40
الدروس
159

الأسئلة الشائعة

هل درس «التوجيه القائم على Hash في مقابل التوجيه القائم على Path» مجاني؟

نعم — نص درس «التوجيه القائم على Hash في مقابل التوجيه القائم على Path» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة HTML Academy، انتقل إلى CoddyKit PRO. تتضمن دورة HTML Academy 4 دروس في المجموع.

ماذا ستتعلم في «التوجيه القائم على Hash في مقابل التوجيه القائم على Path»؟

مقارنة توجيه Hash بتوجيه السجل القائم على pushState تتمرن على HTML Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ HTML Academy؟

لا تُشترط خبرة سابقة. HTML Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «التوجيه القائم على Hash في مقابل التوجيه القائم على Path»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس HTML Academy هذا؟

نعم. كل درس في HTML Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. pushState وreplaceState
  2. حدث popstate
  3. التوجيه القائم على Hash في مقابل التوجيه القائم على Path
  4. Navigation API في المتصفحات الحديثة
← العودة إلى HTML Academy