جافا سكريبت: عالمين — لغة واحدة
\n\nكانت جافا سكريبت في يوم من الأيام مجرد لغة لتحريك اللافتات والتحقق من النماذج. اليوم، هي الأداة الأكثر تنوعًا لمطوري الويب. ولكن مع تنوعها يأتي تعقيد الاختيار: هل نكتب منطق الخادم باستخدام Node.js أم نترك JS للواجهة الأمامية، ونجعل الواجهة الخلفية بلغة Python أو Go؟
\n\nفي هذه المقالة، لن نضيع الوقت في المقدمات. سنأخذ سيناريوهات حقيقية، ونكتب كودًا، ونحلل بصدق أين تتألق جافا سكريبت، وأين من الأفضل البحث عن بدائل. إذا كنت تواجه اختيار المجموعة التقنية أو تريد ببساطة فهم ما يحدث "تحت الغطاء" في تطبيقات الويب الحديثة — فأنت في المكان الصحيح.
\n\nجافا سكريبت في الواجهة الأمامية: ملك المتصفح
\n\nكيف يعمل هذا
\nتطوير الواجهة الأمامية باستخدام جافا سكريبت هو العمل مع DOM، والأحداث، والرسوم المتحركة، وواجهات برمجة التطبيقات (API) للمتصفح. اليوم، لم يعد الأمر مجرد "JS خالص": فقد حولت أنظمة React وVue وAngular وSvelte إنشاء الواجهات إلى هندسة حقيقية.
\n\nإليك مثال بسيط يوضح كيف تنبض الصفحة بالحياة باستخدام JS:
\n\n// الحصول على البيانات من الخادم وعرضها على الصفحة\nasync function loadUsers() {\n try {\n const response = await fetch('https://api.example.com/users');\n const users = await response.json();\n \n const list = document.getElementById('user-list');\n users.forEach(user => {\n const item = document.createElement('li');\n item.textContent = `${user.name} — ${user.email}`;\n list.appendChild(item);\n });\n } catch (error) {\n console.error('خطأ في التحميل:', error);\n }\n}\n\nloadUsers();\n\nكل شيء يعمل في متصفح المستخدم. أنت ترسل HTML والبرنامج النصي، والباقي يقوم به العميل. وهذا يعطي استجابة فورية للواجهة: تبديل علامات التبويب، والرسوم المتحركة، وتحميل البيانات دون إعادة تحميل الصفحة.
\n\nإيجابيات تطوير الواجهة الأمامية باستخدام جافا سكريبت
\n- \n
- ردود فعل فورية — يرى المستخدم التغييرات على الفور، دون انتظار استجابة الخادم. \n
- مجتمع ضخم — أي مشكلة قد تم حلها بالفعل، وأي مكتبة قد تمت كتابتها. \n
- لغة واحدة — إذا كنت تعرف JS، يمكنك كتابة كل من العميل والخادم (full-stack). \n
- اختيار غني من الأدوات — من React لتطبيقات الصفحة الواحدة (SPA) إلى Next.js للعرض من جانب الخادم (SSR). \n
سلبيات تطوير الواجهة الأمامية باستخدام جافا سكريبت
\n- \n
- الأمان من جانب العميل — يمكن رؤية أي كود في أدوات المطور. لا يمكن تخزين الأسرار والمفاتيح هنا. \n
- مشاكل في تحسين محركات البحث (SEO) — عرض JS الخالص لا يتم فهرسته جيدًا بواسطة محركات البحث (يتم حله باستخدام SSR). \n
- الأداء على الأجهزة الضعيفة — قد تبطئ تطبيقات SPA الثقيلة على الهواتف القديمة. \n
- الاعتماد على المتصفح — قد تفسر الإصدارات المختلفة الكود بشكل مختلف. \n
جافا سكريبت في الواجهة الخلفية: Node.js ونظامه البيئي
\n\nكيف يعمل هذا
\nعندما نقول "جافا سكريبت في الواجهة الخلفية"، فإننا نعني Node.js — بيئة التشغيل المبنية على محرك V8. يسمح Node.js بتشغيل JS خارج المتصفح: معالجة طلبات HTTP، والعمل مع قواعد البيانات، ونظام الملفات، والمآخذ الشبكية.
\n\nإليك خادم نموذجي باستخدام Express.js:
\n\nconst express = require('express');\nconst app = express();\nconst PORT = 3000;\n\n// Middleware لتحليل JSON\napp.use(express.json());\n\n// مسار للحصول على المستخدمين\napp.get('/api/users', async (req, res) => {\n try {\n const users = await db.query('SELECT * FROM users');\n res.json(users);\n } catch (error) {\n res.status(500).json({ error: 'خطأ في الخادم' });\n }\n});\n\n// مسار لإنشاء مستخدم جديد\napp.post('/api/users', async (req, res) => {\n const { name, email } = req.body;\n const newUser = await db.query(\n 'INSERT INTO users (name, email) VALUES ($1, $2) RETURNING *',\n [name, email]\n );\n res.statu