لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 06/26/22 في كل الموقع
-
في بداية كل تطبيق أو موقع إلكتروني تظهر إشكالية متكررة دومًا بغض النظر عن المشروع وهي نوع التكنولوجيا المناسبة لبناء الموقع (سواء لغة البرمجة أو إطار العمل) لأن الاختيار المناسب سيلعبُ دورًا مهمًا في نجاح المشروع فإذا اتُخذ قرار خاطئ فيمكن أن يفشل كل شيء في بداية المشروع أو في مراحل متقدمة منه، ولذلك يكون اختيار التكنولوجيا مهمة شاقة للشركات الصغيرة والناشئة التي تعمل عادةً بخبرات وموارد مالية محدودة، وكلما كانت الشركة أصغر كان تأثير القرار السيئ أكثر مأساوية لموارد الشركة. يتضمن أي موقع إلكتروني جانبين أساسيين وهما جانب العميل Front-end وهو الجانب المرئي من الموقع ويتضمن شيفرة برمجية من اللغة الهيكلية HTML و CSS لتنسيق الصفحات والعرض ولغة جافاسكربت، وجانب الخادم Back-end وهو غير مرئي للمستخدمين ويتضمن لغة برمجية لبرمجة منطلق الموقع وقاعدة بيانات لاستيراد البيانات وخادم وهو حاسوب لتشغيل الموقع أو التطبيق. تشغّل مواقع الويب عبر الكثير من لغات البرمجة ومن بينها Node.js و PHP وهما من أكثر التقنيات المستخدمة من جانب الخادم، ويمكن لكليهما تشغيل تطبيقات الويب بغض النظر عن تعقيد المشروع، وفي الوقت نفسه فإن الاختلافات بينها كبيرة لأن كل واحدة منها مبنية على مفاهيم وبنيات مختلفة. لنستكشف معًا من الأقوى في هذه المعركة المحتدمة بين لغة PHP مقابل Node.js. سنفترض في هذا المقال بأن لديك معرفة أساسية بتقنيات تطوير الويب وكيفية عمل المواقع. نبذة موجزة عن لغة PHP و Node.js قبل الغوص في التفاصيل وذكر الميزات والعيوب والمقارنة بينها لا بدّ لنا من التوقف قليلًا والتأمل في نقطة مهمة عند المقارنة بين PHP و Node.js إذ أنه لا يخفى على الجميع بأن PHP هي لغة برمجة ولكن ما هي Node.js هل هي لغة؟ أم مكتبة؟ أم إطار عمل؟ أم ماذا؟ في الحقيقة جميع تخميناتنا خاطئة لأن Node.js ما هي إلا بيئة تشغيل تسمح بتشغيل الشيفرة البرمجية للغة جافاسكربت، ومع ذلك بعض المبتدئين يسمونها لغة Node.js، وعمومًا يمكننا النظر إلى هذه المقارنة على أنها مقارنة بين مزايا لغة جافاسكربت ولغة PHP ولكن بطريقة غير مباشرة. ما هي Node.js تعتمد بيئة تشغيل جافاسكربت Node.js بصورة أساسية على محرك Chrome V8، وهو محرك جافاسكربت و WebAssembly عالي الأداء ومفتوح المصدر طورته شركة غوغل (اسمها حاليًا ألفابت)، والشيفرة البرمجية لهذا المحرك مكتوبٌ بلغة C++، ويُستخدم لتشغيل لغة جافاسكربت على متصفح الإنترنت كروم Chrome. توفر بيئة Node.js تطبيقات ذات أداء واستقرار عاليين. كما أنها تتيح إمكانية إنشاء خوادم قابلة للتطوير دون استخدام الخيوط Thread، باستخدام نموذج مبسط من البرمجة القائمة على الأحداث Event-driven Programming، والتي تستخدم عمليات رد النداء callback للإشارة إلى اكتمال المهمة، كما تبسط بيئة Node.js عملية التطوير لآلاف المبرمجين إذ jمكّنهم من إنشاء موقع أو تطبيق ويب من خلال لغة جافاسكربت سواء من جانب الخادم أو العميل. تسمح بيئة Node.js للمطورين بناء تطبيقات بسرعة بفضل مشاركة اللغة بين الواجهات الأمامية والخلفية الأمر الذي يزيد من الكفاءة والإنتاجية للمطورين. كما يساعد هذا المزيج على بناء تطبيق قوي ومكتمل الميزات بأقل استثمار من وقت وجهد، بالإضافة إلى ذلك تنخفض تكاليف الصيانة وتزداد سهولة اكتشاف الأخطاء والقدرة على استخدام لغة TypeScript مع التي تتيح المزيد من القوة وقابلية الاستخدام للشيفرة البرمجية. كما أن لغة جافاسكربت هي الأساس للعديد من أطر العمل للواجهات الأمامية الشائعة مثل React أو Vue وهذه الأطر أساسية لمعظم تطبيقات الويب الحديثة. تتيح أيضًا بيئة Node.js بناء تطبيقات بالزمن الحقيقي Real-time بفضل تجربة تدفق البيانات في الوقت الفعلي باستخدام لغة جافاسكربت المقادة بالأحداث، إذ يمكنك بسهولة إنشاء حلول برمجية عالية الأداء مع ميزات متقدمة مثل الدردشات وخدمات البث الحي للفيديوهات أو الصوت والمعاملات وما إلى ذلك. في الحقيقة هذه المرونة العالية للتغييرات وقابلية التوسع جعلت بيئة Node.js قوية في سوق تطبيقات الويب ذات الطبيعة السريعة والمتقلبة لأن الوجود في الأسواق يفرض على الشركات تظل مرنًة وأن تكون قادرةً على تغيير تطبيقاتها لتلبية متطلبات العملاء المتغيرة وزيادة إمكانية الوصول إلى سقف توقعات المستخدمين. كما أن لغة جافاسكربت تعدّ من اللغات الأساسية في تطوير الويب ولذلك فإن المبرمجين سيتعلمونها حتمًا خلال رحلتهم في تطوير الويب، وسيصبح من الأسهل عليهم اختيار بيئة Node.js للواجهة الخلفية بدلًا من تعلم لغة PHP مما يسرع رحلة التعلم للمبتدئين. ولكن من عيوب بيئة Node.js أيضًا النقص في الأدوات والأطر المعقدة لبناء مشاريع الكبيرة كما أن السرعة الكبيرة في تطوير بنية اللغة جعلها في تغيّر مستمر وهذا الأمر يمكن أن يؤخذ بمنحى إيجابي أو سلبي بحسب كل شركة، بالإضافة إلى ذلك تقدم Node.js أداءً ضعيفًا عند إجراء عمليات حسابية مكثفة أو الاستخدام العالي لوحدة المعالجة المركزية. كما أن بنية Node.js المقادة بالأحداث جعل عليها بعضًا من القيود، ولكن بعد الإصدار 10.5 أضيفت وِحدة برمجية للتعامل مع الخيوط Threads في بيئة Node.js هذه الوحدة مفيدة جدًا في إجراء عمليات جافاسكربت كثيفة الاستخدام لوحدة المعالجة المركزية. لغة PHP لغة PHP وهي اختصار لعبارة Hypertext Preprocessor أنشأها راسموس ليردورف Rasmus Lerdorf في عام 1994. وهي لغة برمجة نصية مفتوحة المصدر من جانب الخادم مصممة خصيصًا لتطوير تطبيقات ومواقع الويب، كما أنها تستخدم أيضًا كلغة برمجة نصية للأغراض العامة، وتكون ملفات PHP لها امتداد .php ويمكن أن تحتوي على شيفرة جافاسكربت و HTML و CSS وحتى نصوص عادية أيضًا. وتعد لغة PHP واحدة من أفضل لغات الخادم في العالم. أظهر استطلاع أجراه موقع W3Tech جاء فيه أن 78.1% من مواقع الويب في العالم تستخدم لغة PHP للواجهات الخلفية بالمقارنة مع 1.8٪ من المواقع التي تستخدم جافاسكربت وبيئة Node.js. تحتوي لغة PHP أيضًا على دعم كبير لأطر العمل مثل Laravel و Symfony و Codeigniter و CakePHP، وجميع هذه الأطر مفتوحة المصدر ويمكن لأي شخص استخدامها أو تعديلها وتطويرها. كما أن لغة PHP بحد ذاتها قابلة جدًا للتخصيص وبمجرد أن يزدهر تطبيق الويب ويتوسع ستجد أن اللغة تلبي جميع احتياجاتك والتغييرات التي تتطلع لها. يعد الحصول على درجة عالية من التخصيص في تحسين وظائف موقع الويب الخاص بك ميزة تنافسية كبيرة وهذه الميزة توفرها لغة PHP لأنها تحتوي على جميع الوظائف اللازمة للعمل مع HTML والخوادم وقواعد البيانات، كما تتميز اللغة بمستوى عال من الأمان والمرونة وخصيصًا في النسخ الحديثة منها ومع مشاهدتنا لشركات تخسر مبالغ كبيرة من المال بسبب هجمات القراصنة، تزداد الحاجة لحلول مستقرة وقوية بل لإجراءات وقائية أيضًا وهذا ما توفره لغة PHP. تعد شيفرتها البرمجية آمنة نسبيًا وذات كما توفر أدوات لحماية البيانات المرسلة إلى قواعد البيانات. بالإضافة إلى ذلك، تشتهر لغة PHP بمرونتها وتوافقها عبر أنظمة التشغيل الأساسية مثل ويندوز ولينكس Linux وماك MacOS وما إلى ذلك. علاوة على ذلك تمنحك لغة PHP توافق مع مجموعة واسعة من الخوادم مثل Apache و iPlanet و Netscape وما إلى ذلك، بالإضافة إلى التكامل مع قواعد البيانات مثل MongoDB و MySQL وغيرها. ولكن كما أن لها مزايا لها عيوب أيضًا فمثلًا تكون عملية كتابة وحدات الاختبار البرمجي Unit Testing طويلة نسبيًا بسبب سوء معالجتها للأخطاء كما أن بعض المبرمجين ينظرون إلى أن نموذج خادم العميل الذي تتبعه لغة PHP عفا عليه الزمن لأن طريقة عمله التي تطلبُ الصفحة أولًا ومن ثم الاتصال بقاعدة البيانات وتعالج البيانات وتعرض النتائج في صفحة HTML. الأمر الذي يؤدي خسائر في السرعة والفعالية، ولكن من الجدير بالذكر أنه يمكن التغلب على عيب PHP بمساعدة Memcached هو نظام ذاكرة تخزين مؤقت موزع للأغراض العامة، ويستخدم لتسريع مواقع الويب الديناميكية التي تعتمد على قواعد البيانات عن طريق تخزين البيانات والكائنات في ذاكرة الوصول العشوائي مؤقتًا لتقليل عدد المرات التي يتطلب فيها الموقع قراءة البيانات من مصادر خارجية مثل قواعد البيانات، وبالرغم من ذلك هذا الأمر سيخلق تبعية إضافية لتطبيق الويب وهذه مشكلة أيضًا. دورة تطوير تطبيقات الويب باستخدام لغة PHP احترف تطوير النظم الخلفية وتطبيقات الويب من الألف إلى الياء دون الحاجة لخبرة برمجية مسبقة اشترك الآن مقارنة بين PHP vs NodeJS والآن بعد أن تعرفنا على كل لغة لنتعمق أكثر في فهم الاختلافات الدقيقة ولنستطيع بعدها تحديد ما هو مناسب لكل مشروع. المجتمع والتطوير تحدد قوة المجتمع وخبرته نوع التحديثات التي تأتي إلى مختلف الأطر والمكتبات والمشاريع التي ستطلق في لغة معينة، كما أن المجتمع الكبير يعني الدعم الكبير لأنه في بداية طريقك لتعلم البرمجة لا يمكنك الاعتماد على معرفتك فقط دون دراسة أي دورات وممارسات حديثة، ولتصبح محترفًا شاملًا ستحتاج حتمًا لطرح أسئلة على منتديات أجنبية مثل StackOverflow أو منتديات عربية مثل الأسئلة والأجوبة في موقع أكاديمية حسوب، كما أنه من مسلمات العمل في وقتنا الحالي أن فريقك لن يكون قادرًا على كتابة الشيفرة البرمجية لكل ميزة من الصفر، ولذلك فإنه سيستخدم حتمًا المكتبات الشعبية والمُختبرة الأمر الذي يقلل من وقت التطوير ويزيد من الإنتاجية، ويزيد من جودة المشروع الفردي أو المكتبة أو إطار العمل. تفهرس معظم مكتبات Node.js في سجل موقع npmjs.com، وبالرغم من أن بيئة Node.js جديدة نسبيًا إلا أن مجتمعها كبير ولديها العديد من المشاريع التي طورها المجتمع والتي تميل نحو الاحتياجات العصرية والحديثة لتطبيقات الويب. في الواقع تركز العديد من المشاريع على إضافة وظائف فريدة إلى بيئة Node.js بدلًا من مجرد استنساخ ونقل ميزات من لغات أخرى. بالرغم من قدم وعراقة لغة PHP إلا أنها ليست مرغوبة مثل لغة جافاسكربت وبالرغم من مجتمعها الكبير ومشاريعها المتنوعة، ولكن إحدى مشكلاتها الرئيسية أن مشاريعها الحديثة التي يطورها المجتمع تبدو قديمة بعض الشيء وغير مثيرة للاهتمام عند مقارنتها مع مشاريع Node.js، ومع أن مجتمع مبرمجي لغة PHP برمجوا بعض المميزات وأضافوها إلى ميزات اللغة الأساسية الموجودة بالفعل في لغات برمجية أخرى لكن يشعر بعض المطورين بالحاجة إلى مشاريع أكثر حداثة تتناسب مع متطلبات المستخدمين في العصر الحالي. أما من ناحية عدد المطورين فوفقًا لاستطلاع أجراه موقع Slashdata في عام 2020 جاء فيه أنه يوجد أكثر 12.4 مليون مطور للغة جافاسكربت (اللغة الأساسية لبيئة Node.js) حول العالم بالمقابل 6 ملايين مطور للغة PHP. مما يظهر تفوق واضح للغة جافاسكربت ويجعلها خيارًا جيدًا للشركات الناشئة لأن هنالك عدد كبير من المرشحين لوظيفة مطور لغة جافاسكربت. الشيفرة البرمجية إذا كانت الشيفرة البرمجية سهلة ومصممة بطريقة جيدة ستتمكن من إنجاز الكثير باستخدام شيفرة برمجية أقل. تتطلب بيئة Node.js المزيد من أسطر الشيفرات البرمجية لتنفيذ نفس وظائف PHP لأن بنية اللغة مختلفة وهذا يظهر أثناء البرمجة والسبب هو كون البيئة تطورت بأكملها باستخدام جافاسكربت. لذلك تتطلب Node.js أحيانًا سطورًا أطول نسبيًا لكن لا ننسَ أيضًا إمكانية العمل بلغة واحدة للواجهات الأمامية والخلفية. بالإضافة إلى ذلك تمكننا بيئة Node.js استيراد كل منطق الشيفرة البرمجية للواجهة الخلفية الأمر الذي يجعل من السهل بعد ذلك الوصول إلى الميزات التي خصصت على كلا الجانبين. كما تنقلُ بيئة Node.js الكثير من عبء العمل إلى جانب العميل. لذلك إذا كان لدى جمهورك المستهدف هواتف ذكية ذات قوة معالجة جيدة فإن Node.js مثالية لهذه الحالة. بالمقابل صممت لغة PHP لبناء ومعالجة صفحات الويب وجعلها ديناميكية كما تعتمد لغة PHP على شيفرة HTML لجعل كل الصفحات ثابتة في طرف المخدم بعد توليدها وتجهيزها ثم إرسالها إلى متصفح المستخدم أي لن يكون هنالك أي عمليات برمجية تُنفذ في طرف العميل (المتصفح غالبًا)، وبناءً على ذلك فإن تحميل صفحات الويب ستكون أخف على أجهزة المستخدمين ولن تحتاج لقوة معالجة أجهزتهم. كما أن اللغة تتطلب سطورًا أقل من التعليمات البرمجية لأداء وظيفة ما وبالتالي فهي أسهل، وعمومًا من السهولة فهم الشيفرة البرمجية سواء للغة PHP أو Node.js ولن يستغرق المطور المبتدئ وقتًا كبيرًا لإتقان أيًا من اللغتين. السرعة والأداء نقصد بالسرعة بأنها سرعة تنفيذ الشيفرة البرمجية بحسب كل لغة والسرعة العالية تؤدي لعملية تطوير أسرع ومشاريع أكثر فعالية من حيث التكلفة. تتنوع اللغات البرمجية في طريقة تنفيذها للشيفرة البرمجية فبعضها تكون متزامنة وأخرى غير متزامنة. تنفذُ اللغات البرمجية المتزامنة التعليمات سطرًا سطرًا ولا يُنفذ السطر التالي من التعليمات البرمجية حتى تنفذُ السطر الحالي. أما اللغات البرمجية غير المتزامنة تنفذُ جميع التعليمات البرمجية في نفس الوقت هذا الاختلاف في طريقة التنفيذ يؤثر تأثيرًا كبيرًا على سرعة كل لغة، ونقصد بالأداء كيفية تنفيذ التعليمات البرمجية بلغة PHP أو Node.js وأدائها على مؤشرات الأداء الرئيسية مثل تحميل الصفحات والسلاسة. واللغة عالية الأداء تؤدي لنتائج أفضل لأداء تطبيق الويب والتي تؤثر تأثيرًا عميقًا على تجربة المستخدم. تعد بيئة Node.js من بيئات التطوير غير المتزامنة، وهذه الميزة الرئيسية لها وكونها غير متزامنة يعني أنها تعمل على تنفيذ الشفرة بأكملها دفعة واحدة ولا تنتظر عودة نتيجة دالة أو تابع معين. تقلل هذه الطريقة التأخر في تنفيذ الشيفرة البرمجية لتطبيق الويب بصورة كبيرة وتوفر تجربة استخدام سلسة (في بعض الأحيان يجب أن تكون قدرة الحوسبة والمعالجة لجهاز المستخدم مقبولة للحصول على تجربة استخدام سلسلة). بالرغم من أن لغة PHP متزامنة ولكن هناك بعض واجهات برمجة التطبيقات API تعمل بصورة غير متزامنة. هذا ما يجعل استجابة الموقع أبطأ وانتظار المستخدم في نهاية المطاف. في الحقيقة هذه المشكلة موجودة في معظم اللغات والتقنيات القديمة. والخوف الدائم في هكذا نوع من اللغات يكمن في تعطل البرنامج في انتظار الرد والذي يسمى "جحيم رد الاتصال Callback Hell" فإذا كانت هناك حاجة إلى ربط الكثير من الدوال ببعضها بعضًا ويتطلب التطبيق نقل البيانات من دالّة إلى أخرى فيجب الحذر عندها من الوقوع في هذه المشكلة. أطر العمل تساعدُ أطر العمل Framework المبرمج على التركيز على التفاصيل الدقيقة للمشروع وتزيح عن كاهله كتابة الشيفرات البرمجية المكررة والأكثر استخدامًا موفرةً الدوال الأساسية والمكتبات وواجهات برمجة التطبيقات من خلال إطار العمل. كلما كان إطار العمل أكثر شمولًا قل مقدار الشيفرة البرمجية الزائدة التي سيحتاجُ المبرمج لكتابتها. شهدت Node.js توسعًا كبيرًا في أطر العمل الخاصة بها في فترة قصيرة نسبيًا ومن بعض أطر العمل المشهورة نذكر Meteor و Total و Express و Sails وغيرها. بالرغم من حداثة هذه الأطر إلا أنها واعدة ومتطورة باستمرار وبالتأكيد تعزز الإنتاجية وتُقلل وقت التطوير واستهلاك الموارد ولكن أطر عمل لغة PHP تفوقها عددًا بهامش ضخم نظرًا لأقدمية لغة PHP وعمرها الذي يزيد عن 27 عامًا فهي تمتلك أطر عمل غنية جدًا وعادة ما تركز شركات تطوير تطبيقات الويب الحديثة على استخدام واعتماد على هذه الأطر في عملها ومشاريعها أي أنها أصبحت من مُسلمات تطوير البرمجيات في الوقت الحالي ومن بعض أطر العمل المشهورة نذكر Laravel و CodeIgniter و CakePHP و Phalcon. بالرغم من الفرق الكمي بين أطر عمل لغة PHP و Node.js إلا أنه يصعب تحديد أي إطار يعمل بطريقة أفضل من الآخر في اللغتين. وتجدر الإشارة إلى العديد من أطر PHP صممت لاستيراد ميزات مثل التنفيذ غير المتزامن المتأصلة في بيئة Node.js. بالإضافة إلى ذلك، فإن العديد من أطر PHP لديها مشكلة واحدة مشتركة محتوى وشيفرة برمجية مختلطة ولكنها بالمقابل أطر عمل شاملة. التعامل مع قواعد البيانات الأمر المهم عند النظر لأي لغة سواء جديدة أو قديمة هي طريقة فحص مدى ملاءمتها مع قواعد البيانات الحديثة أو القديمة والعلائقية منها أو التقليدية. اشتهرت قواعد البيانات العلائقية والتي تُخزن البيانات على شكل جداول؛ الأمر الذي يسهل فهم العلاقات والتبعيات بين نقاط البيانات المختلفة. ولكن في السنوات السابقة ظهرت نوع جديد من قواعد البيانات وهي NoSQL والتي تسمح بتخزين البيانات بتنسيقات مثل المستندات وأزواج المفاتيح والرسوم البيانية وحتى قواعد البيانات غير المهيكلة وشبه المهيكلة والمنظمة، بالإضافة إلى أنها سهلة الاستخدام للمطورين. يمكن لبيئة Node.js العمل بسهولة مع قواعد بيانات المختلفة مثل NoSQL و MongoDB و CouchDB وغيرها كما أن لديها مكتبات كبيرة للوصول إلى قواعد بيانات SQL. نظرًا لقدم لغة PHP فهي مصممة للعمل مع قواعد البيانات العلائقية والتقليدية مثل MySQL و MariaDB بقوة في حين أنه من الممكن استيراد مكتبات للعمل مع قواعد بيانات NoSQL ولكن عملية التكامل مع هذه المكتبات طويلة وتستهلك جزءًا كبيرًا من وقت المعالجة. معالجة الطلبات هذا هو مقياس مدى سرعة معالجة اللغة للطلبات من جانب العميل. لا شك أن تنفيذ الطلب بدقة أمر بالغ الأهمية لتجربة المستخدم، ولكن يجب أيضًا القيام به باستخدام الحد الأدنى من الموارد والوقت. كما يساعدنا التعامل اللغة مع الأخطاء على فهم الصورة الشمولية وذلك لتحسين تجربة المستخدم. بفضل المعالجة غير المتزامنة للطلبات المتعددة، لا تنتظر بيئة Node.js انتهاء إحدى الأحداث قبل أن تبدأ العملية التالية. لا تضيع أوقات وحدة المعالجة المركزية وذاكرة الوصول العشوائي في انتظار مجهول لمعالجة مخرجات دالة معينة، والمشكلة الوحيدة هو أنه إذا لم يُعالج حدث مرتبط بأحد الأحداث التالية في الوقت المناسب، فيمكن يتداخل سير عمل التطبيق ويؤدي ذلك لحدوث خطأ في عموم التطبيق، ولكن لحسن الحظ توفر اللغة آليات معالجة الأخطاء فعالة تمكن المبرمج من حماية النظام من التعثر الناتج عن التنفيذ الخاطئ. تتعامل لغة PHP مع طلب واحد وبالتسلسل وهذا الأمر يزيد من مدة استهلاك الموارد سواء وحدة المعالجة المركزية أو ذاكرة الوصول العشوائي في الواجهات الخلفية، ويخلق تأخرًا في النظام من خلال نهج الطلب الواحد، ولكن نظرًا لأن المعالجة تكون من جانب المخدم لن يتأثر تطبيق الويب بنوعية جاهز المستخدم فيمكن أن يعمل على الأجهزة الضعيفة أو القوية (لأن بعض تطبيقات Node.js تحتاج لمعالجة قوية) كما يمكن استخدام مكتبات خارجية للحصول على الوظائف غير المتزامنة. ولكن لن تكون بقوة الميزات الأصلية في بيئة Node.js. التعامل مع الوحدات Modules تعمل الوِحدات كتطبيقات فرعية داخل تطبيق الويب الأساسي، وهي تعالج مجموعة معينة من الوظائف وغالبًا ما تكون قابلة للتبديل أو التحديث مما يمنح البرنامج مرونة وقوة في العمل. غالبًا ما يشتكي بعض المطورين من أن مشاريع Node.js ليست مستقرة مثل المشاريع المطوّرة بلغة PHP نظرًا لأن اللغة والمجتمع لا يزالان ينموان ويتطوران بسرعة كبيرة فإن أنظمة مراقبة الجودة بالكاد موجودة. مع تقديم بعض الحلول الواعدة مثل مبادرة مراقبة الحزم والوِحدات npm-Audit الأمر الذي ساعد في التحقق من كل حزمة بحثًا عن تعليمات برمجية ضارة. بالمقابل تتمتع لغة PHP بميزة في هذا المجال منذ سنوات حتى الآن. في وقتنا الحالي تحتوي لغة PHP على مكتبة ثرية من الوِحدات النمطية وهي مستقرة نوعًا ما، ومع ذلك لا تزال Node.js تخطو خطوات كبيرة في هذا المجال. النظام البيئي Ecosystem النظام البيئي هو عدد المكتبات مفتوحة المصدر وواجهات برمجة التطبيقات والوحدات النمطية وأطر العمل والمشاريع التي ينشرها المجتمع والمطورون …إلخ. فيحتوي النظام البيئي Node.js على مجموعة واسعة من المكتبات وأطر العمل، لكنها متخلفة عن أرقام PHP. بالرغم من ذلك إلا أنها تعوضها بمشاريعها المتنوعة. نظرًا لأن Node.js تستخدم نفس اللغة للبرمجة من جانب الخادم والخلفية، فإن أنواع المشاريع المتاحة تتناسب بحرية مع عدد أكبر من حالات الاستخدام. بالمقابل يوجد العديد من الأنظمة المعتمدة على لغة PHP وهذه الأنظمة لها سيطرة كبيرة على مواقع الويب حول العالم مثل ووردبريس WordPress وجوملا وماجنتو وغيرها الأمر الذي انعكس على قوة النظام البيئي. وبما أن نسبة كبيرة من إجمالي مواقع الويب على الإنترنت تعمل بهذه اللغة فحتمًا سيكون هنالك مجتمع كبير والكثير من من المواد التدريبية والتكنولوجيا الداعمة على مر السنين لجذب مطورين جدد. أيهما أفضل PHP أم Node.js؟ بمجرد أن تفهم لغة جافاسكربت ستصبح اللغات الأخرى غير فعالة بالمقارنة معها لأنك تعلمت لغة واحدة وركزت كل مجهودك عليها فستكون النتائج أسرع وسيتعمقُ فهمك لكيفية سير العمل. يمكن لمطوري الويب الشاملين full stack web developers كتابة شيفرة مشروع كامل من جانب العميل والخادم بلغة جافاسكربت ولم تعد هنالك حاجة إلى التبديل بين اللغات أو التقنيات. كلما تعلمت لغة جافاسكربت زادت استمتاعك بها، وهذا الأمر لا ينطبق على لغة PHP. من الأفضل اختيار بيئة Node.js عند إنشاء تطبيقات ديناميكية أحادية الصفحة SPA أو Single Page Application باستخدام إطارات جافاسكربت للواجهة الأمامية مثل Angular أو React أو Vue.js. أما من جهة الخادم Node.js. يمكن لبيئة Node.js دعم أجهزة إنترنت الأشياء IoT بمفردها مثل أجهزة تتبع اللياقة البدنية والطائرات بدون طيار وحتى الروبوتات بالإضافة إلى منصات تدفق البيانات الثقيلة كونها قادرة على إدارة العديد من العمليات المتزامنة. بعض التوجهات في المشاريع في السوق تعتمد على مطوري MERN وهي اختصارًا (Node.js و React و Express.js و MongoDB) وبعض المشاريع تستخدم إطار Angular بدلًا من إطار React فتصبح MEAN ويمكن استعمال Vue.js ليصبح الاختصار MEVN. بالمقابل تعدُ لغة PHP اختيارًا جيدًا لمدونة أو مشروع تجارة إلكترونية وخصيصًا عندما يتطلب المشروع العديد من عمليات الدمج. الخاتمة تعرفنا في هذا المقال على الفرق بين لغة PHP وبيئة Node.js لتشغيل شيفرات جافاسكربت في الواجهة الخلفية للمواقع وتطبيقات الويب، وتعرفنا في البداية على نبذة مختصرة لكل منها وتعمقنا لاحقًا في المقارنة وفي إقبال المجتمع التقني عليها وحماسه لتطويرها ومدى تعقيد الشيفرة البرمجية وسرعة وأداء كل لغة كما اطلعنا على أطر العمل الخاصة بكل لغة وطريقة تعامل كل لغة مع قواعد البيانات وكيفية معالجة الطلبات وطريقة التعامل مع الوِحدات وختمنا المقارنة بالاطلاع على النظام البيئي الشامل لكل منها. ولنتذكر دومًا بأن كل من لغة PHP وبيئة Node.js تستمد قيمتها من حالة الاستخدام والمشروع الذي نعمل عليه فإذا كان المشروع موقع ويب ثابت يتطلب عددًا قليلًا من الطلبات من قاعدة البيانات، وكان جمهور التطبيق المستهدف يستخدم أجهزة منخفضة وبطيئة فستكون لغة PHP هي بالضبط ما تبحث عنه. وإذا كانت حالة الاستخدام الخاصة بك تتضمن مواقع ويب ديناميكية ترسل العديد الطلبات إلى خادم ولها واجهة مستخدم ديناميكية فأنت تريد استخدام Node.js. وختامًا تبرز أهمية اختيار اللغة المناسبة لإنشاء موقع أو تطبيق مستقر وموثوق في مشاريع الناشئة، وهذا هو السبب في لجوء بعض الشركات إلى استشارة المختصين في هذه الأمور للتأكد من تلبية جميع احتياجات المشروع المستقبلية ولا ننسَ بأنه مهما اختلفت اللغة تبقى مهارات فريق التطوير الويب هي الحكم في هذه النقطة. يمكنك الإطلاع على توثيق لغة PHP وتوثيق بيئة Node.js على موسوعة حسوب لمزيد من التفصيل حولهما. المصادر مقال Node.js vs PHP: In-depth Comparison With Pros & Cons [2021] لكاتبه Serhii Osadchuk. مقال Node.js vs PHP: Which One is Better for Backend Development لكاتبته Anastasia Kushnir. مقال Node.js vs PHP: A Honest Comparative Study With All The Answers لكاتبه Tejas Kaneriya. مقال PHP vs. Node.js - GeeksforGeeks لكاتبه Parikshit Hooda. اقرأ أيضًا الدليل السريع إلى لغة البرمجة PHP مقدمة إلى Node.js1 نقطة
-
1 نقطة
-
الأمر يتعلق بنوع تلك الاستضافة والخطة التي اشتركت بها والمزايا المتاحة لمساحتك من الاستضافة، من ذاكرة ومعالج وعرض حزمة، نوع الاستضافة يلعب أكبر دور في الأداء، يوجد استضافات مشتركة يتم فيها مشاركة موارد الخادم بين عدة مواقع لذا الضغط على إحداها سيسبب بطئًا في الآخر، وهناك استضافات تمنحك خادم وهمي خاص VPS وهذا سيحجز لك بعض الموارد من خادم حقيقي ولا يسمح لأي موقع آخر على نفس الخادم باستخدام مواردك، الموارد المتاحة لك تكون بحسب الخطة التي اشتريتها وهذه تعد أفضل الاستضافات لكنها تحتاج لخبرة تقنية لإعدادها، قد يكون الأفضل لبعض المواقع الاستضافات المشتركة، وقد يكون لبعضها الأفضل حجز VPS بمواصفات بسيطة، وآخر يحتاج مواصفات عالية، الأمر يعتمد بالدرجة الأولى على طبيعة الموقع أو التطبيق الذي تحاول نشره، يمكنك التعرف على أنواع الاستضافات بشكل أكبر والشركات التي تقدم تلك الخدمات من المقال التالي:1 نقطة
-
لدي حقل uuid وفي ملف التهجير migrationبالشكل التالي: import uuid from django.db import migrations, models class Migration(migrations.Migration): # ... operations = [ # ... migrations.AddField( model_name='product', name='uuid', field=models.UUIDField(default=uuid.uuid4, unique=True), ), ] لكن المشكلة تحدث عندما أقوم بتشغيل أمر التهجير: py manage.py migrate يظهر لي الخطأ التالي: django.db.utils.IntegrityError: could not create unique index "stores_product_uuid_key" DETAIL: Key (uuid)=(003c17e3-0301-4251-bf6e-87b6932d826b) is duplicated. ما سبب الخطأ؟ وكيف أقوم بحل هذه المشكلة؟1 نقطة
-
دالة filter لا تقبل ان تمرر لها دالة كدالة ()is_active فالحالة التي لديك الافضل إنشاء حقل BooleanField في model Foo وقم بإعطائه default True هكذا: class Foo(models.Model): is_active = models.BooleanField(default=True) ومن ثم لإرجاع الكائنات من Foo التي لديهم القيمة is_active = True نستعمل بدالة filter من Bar لفحص الكائنات المُرادة بتحديد قيمتها True هكذا: Bar.objects.filter(foo__is_active=True) هكذا سيرجع لك الكائنات من model ال Foo التي قيمة is_active = True .1 نقطة
-
لا لا لن نقوم بتحويل مشروع الReact.js الى ملفات HTML منفصلين كلياً عن بعضهما ستقوم بإنشاء مجلد فارغ يوجد به مجلدين اسم المجلد الاول frontend وستضع به مشروع ال React.js اسم المجلد الثاني backend وستضع به مشروع ال Django حسناً لا استخدام لملفات الTemplates بالدجانغو نهائياً إنما طريقة التواصل بين الدجانغو والريأكت بإستخدام API أنظر الى الأجوبة التالية لتأخذ فكرة كيف عمل الAPI : اذاً عليك تعلم كيف تنشئ API لل models داخل Django التي لديك من خلال تعلم: Django-Rest-Framework من الناحية الاخرى تفتح مشروع الReact.js وتقوم بتشغيل السيرفر عند عرض الصفحة التي ستتواصل مع الDjango يجب ان تحتوي ميثود لطريقة إتصال فيURL HTTP في السرد التالي , نجلب البيانات من عنوان المحلي local كمثال /http://127.0.0.1:8000/api/teachers باستخدام JavaScript دالة ()fetch بعدها من دالة fetch تستعمل دالة then لتحويل الرد الى json وبعدها نتعامل مع البيانات المستلمة بأي شكل تريده تعرضها بقائمة تعرضها داخل الصفحة أي كان .كالمثال التالي داخل React.Js صفحة التي ستجلب البيانات من دجانغو: // Function to collect data const getApiData = async () => { const response = await fetch( "http://127.0.0.1:8000/api/teachers/" ).then((response) => response.json()); // update the state setUsers(response); }; اذاً فقط سوف تتعلم Django REST framework لتتعلم كيف تنشئ API لتكون طريقة التواصل مع Django with React.js ومن ثم تضمينها داخل مشروع الدجانغو الخاص بك وتشغيل السيرفر ستظهر لك النتيجة كالمثال البصري التالي :1 نقطة
-
المشكلة لديك هي تحديد قيمة صغيرة للغاية للمتغير successRateحيث أن القيمة 0.5 ستكون أصغر من أي قيمة للمتغير random_rate (ماعدا القيمة 0 بالطبع)، لذلك عليك أن تقوم بتغير قيمة المتغير successRate لتكون قيمة أكبر مثل 50 على سبيل المثال: أيضًا عليك أن تقوم بنقل جملة طباعة الجملة Congrats for خارج جملة if لكي يتم طباعة الجملة في كل دورة وليس في آخر دورة فقط، بالشكل التالي: <?php function successfulCompaines($names_array, $rate) { $new_names = []; $index = null; $min = null; foreach ($names_array as $i => $name) { $random_rate = rand(0, 100); if ($min == null) { $index = 0; $min = $random_rate; } if ($random_rate <= $rate) { array_push($new_names, $name); } if ($random_rate < $min) { $index = $i; $min = $random_rate; } } return count($new_names) == 0 ? [$names_array[$index]] : $new_names; } $compaines = array("Lenovo", "Huawei", "Apple", "Amazon", "Microsoft", "Abb", "Netflex", "Siemens", "Samsung", "Adidas", "Uber", "Dell", "Hp", "Walmart", "Tesla", "Google", "Volvo", "Toyota", "Ibm", "Shell"); // نرفع قيمة المتغير التالي $successRate = 50; while (true) { $compaines = successfulCompaines($compaines, $successRate); // ننقل جملة الطباعة إلى هنا echo 'Congrats for ' . $compaines[0]; echo "<br>"; if (count($compaines) == 1) { break; } $successRate /= 2; }1 نقطة
-
نعم يمكنك عمل ذلك من خلال إستعمال SQL التالي: SELECT * FROM `countries` WHERE name != "saudi arabia"; بهذا الشكل سوف يتم تحديد كل الدول ما عدا السعودية. وإذا كنت تريد تحديد كل الدول ما عدا السعودية ومصر على سبيل المثال فيمكنك أن تستخدم المعامل NOT IN: SELECT * FROM `countries` WHERE name NOT IN ("saudi arabia", "egypt"); بالتأكيد يمكنك أن تقوم بإضافة قدر ما تشاء من دول إلى الإستعلام السابق، وسوف يتم تحديد باقي الدول فقط.1 نقطة
-
السلام عليكم، بصفتي متداول ولدي خبرة بسيطة، اود تنبيهك الى اهم الأخطاء التي ترتكب الطمع ومحاولة الربح السريع فنجد المتداولين يدخلون بلوتات كبيرة عدم وضع استراتيجية تداول واضحة عدم درس السوق بشكل كامل وعدم الادراك بالسياسة وبالاخبار الراهنة، اىلتي تؤثر بشكل كبير على نتائج صفقاتك1 نقطة
-
النوع الأول من مخاطر التداول عبر الانترنت: المتسللين (الهاكرز): أول ما يحتاج إليه الهاكرز هو سرقة اسم المستخدم وكلمة المرور الخاصة بحساب المتداول، وللأسف على الرغم من تأمين حسابك بافضل الطرق فإن معظم الهاكرز خطواتهم تسبق خطواتك بخطوة على الأقل، وطرق الهاكر تتطور كل يوم يأتون بجديد، وإذا تم سرقة حسابك فإنك بذلك للأسف عرضة للوصول إلى حسابك كما بإمكانهم شراء وبيع ما يشاءون. وغالبًا ما يقوم ببيع الأسهم الموجودة على الحساب ولكنها محددوه، حيث يقوم المتسلل بشراء أسهم بأموالك ويدفع سعر السهم للحصة، حتى يرتفع السعر يبيع حصته بربح كبير ثم يقوم بتحويل المال إلى حساب شركة في بلد مختلفة أو استخدام سلسلة من شركات وهمية لنقلها إلى حسابهم. النوع الثاني من مخاطر التداول عبر الانترنت: التلاعب بالأسهم: يسمح الانترنت بتوفير أرض خصبة للتلاعب بالأسهم، فبالإمكان الآن رفع السهم أو خفضه لأن الأخبار تلعب دورًا هامًا في الأسهم، وهي تجارة رغم أنها رخيصة إلا أنها خفيفة للغاية، حيث يقوم الوسيط هو بدء مؤشر على السهم المراد ثم الدخول في معظم المنتديات للمناقشة فيقوم نفس الشخص بنشر رسائل لا تعد ولا تحصى تحت أسماء مستعارة مختلفة للحديث على هذا السهم. وللأسف هذه الطريقة لا يمكن كشفها لأنه لا توجد طريقة للتعرف على ذلك وبالتالي يمكنه النشر الإيجابي للسهم مقابل سهم معين حسب ما يهدف إليه. النوع الثالث من مخاطر التداول عبر الانترنت: مخاطر الاستثمار في الأوراق المالية : بغض النظر عن الطريقة المستخدمة تؤثر حركة الانترنت العالية على مدى قدرة المستثمرين عبر وسيلة الانترنت في الوصول إلى حسابهم أو حتى نقل الطلبات الخاصة بهم. ويستوجب على مستثمر الانترنت أن يشكك في نصائح الأسهم وكذا النصائح التي تقدم في غرف الدردشة وعلى لوحات الإعلانات، ويمكنهم الاستعانة بشركات وساطة على الواقع تساعدك في اتخاذ الإجراء المناسب، ويجب أن تتجنب الإغراء بالتجاوز بتداول متكرر أو مندفع دون الالتفات إلى الأهداف الاستثمارية أو تحمل المخاطر. مما يؤثر على أداءك الاستثماري وكذا رفع تكاليف التداول ومن ثم تعقيد الوضع الضريبي.1 نقطة