b523db2bbea7098aeccea0f78f41f223
     
     
    
    
    
    
    
    
    

(javascript server-side (node.js - هل تستعملها؟ ولما؟

   محمد جمال الذياب        23-05-2019  
   mohamed - محمد   
السلام عليكم.
كما لا يخفى على متابعي توجهات الويب أن javascript بدأت تنتشر بشكل كبير لكل من جهة المستخدم (client-side) ومن جهة الخادم أيضا (server-side). في هذه المساهمة دعونا نعرج على js المستخدمة من جهة الخادم، هل سبق و أن جربتها سواء في أمور عابرة (تجارب و ما شابه) أو في مشاريع حقيقية؟ هل حققت لك مرادك؟ وما هي أبرز الأسباب التي جعلتك تستعملها؟
شخصيا، استعملتها في تجارب عابرة فقط (بغرض استكشاف قدراتها) وكانت أغلب إن لم تكن كل التجارب ناجحة (التجارب كانت تعمل تحت http://nodejs.org/ و http://phantomjs.org/). ومما دفعني و قد يدفعني مستقبلا لاستعمالها (أتكلم عن node.js خصوصا):
اللغة نفسها: نعم فكل من client-side و server-side سواء ولا يوجد أي اختلاف في syntax.
مساق حدثيا (event-driven) : وهو باختصار أن يكون مجرى (flow) برنامجك مساقا بالأحداث وليس فقط بتتابع الخطوات. للاستزادة (http://en.wikipedia.org/wiki/Event-driven_programming) و لمعرفة الفرق (http://en.wikipedia.org/wiki/Comparison_of_programming_paradigms).
واجهة برمجية (API) ذات مستوى منخفض (low-level) : هذا يعني إمكانيات عديدة وتحكم أكبر (هناك 35 وحدة (module) مختلفة منها الخاص بالتعامل مع الملفات و منها الخاص بالتعامل مع HTTP و أكثر ...)
أطر العمل (frameworks) : هناك العديد من أطر العمل التي تساعدك في تطوير تطبيقك و تنظيمه بشكل رائع. أذكر منها http://expressjs.com/
السرعة، قوة التحمل وقابلية التوسيع (scalable): السرعة. أحد أهم العوامل في أي تطبيق ويب اليوم، وهذا ما وجدته في node.js فاختبارات الأداء تبين مدى تفوقه على أقرانه. من جهة أخرى قوة التحمل كبير حقا وتصل إلى الآلاف من الطلبات المتوازية (parallel) في الثانية! ويمكنك دفع هذه القدرة لمدى أبعد بزيادة العتاد (أو كما يسمونهم cluster).
الوقت الفعلي (real-time) : معظمنا جرب تطبيقات ويب تمتع بخاصية الوقت الفعلي كـ Gmail و ما شابه. شخصيا عند توفر هذه الخاصية في أي تطبيق ويب يجعلني هذا مرتاحا و معجبا بالتطبيق! يمكنك أن تضيف هذه الخاصية إلى تطبيقك باستعمال http://socket.io/
مجتمع كبير : تماما مثل المجتمعات الأخرى ستجد العديد من الإضافات، المواضيع و الحيل التي تساعدك في مشوارك.
شاركنا برأيك و أسبابك!
التعليقات
   aalagha - عبدالمهيمن الآغا   
node.js و لغة Scala و Go أيضاً من أكثر الأمور التي أثارت اهتمامي بالفترة الأخيرة ولقد اطلعت عليهم وجربت كتابة بعض الأكواد فيهم وبدأت التفكير جدياً باستخدام احداهم في أحد المشاريع القادمة. على الأرجح اختياري سيقع على node.js للأسباب التالية:
لن أحتاج لتعلم لغة برمجة جديدة كلياً وأظن أي شخص برمج باستخدام جافاسركبت سابقاً يستطيع برمجة تطبيق ويب باستخدام node.js خلال بضعة ساعات فقط وهذا أمر رائع حقاً فأنا لن أضيع الكثير من الوقت بتعلم لغة برمجة جديدة وسأحافظ على نفس سرعة الانتاجية تقريباً.
مجتمع node.js كبير جداً.. أجده أكبر من مجتمع لغة Go و Scala ويتطور بشكل أسرع أيضاً وهذا شيء طبيعي لأن معظم مطوري الويب يجيدون JavaScript بالفعل ولا يحتاجون لتعلم لغة برمجة جديدة وهذه برأيي ميزة node.js الأساسية.
المكتبات التي يوفرها node.js لتطوير الويب تحديداً كثيرة ومقارنة بعمره تفاجأت من عددها خصوصاً مع وجود نظام ادارة حزم متطور مثل npm.. تقريباً كل شيء أحتاجه موجود.
السرعة والأداء كونه event-driven كما ذكرت أنت.. أنا أؤمن أن السرعة في الأداء تتعلق أكثر بطريقة البرمجة عوضاً عن اللغة بحد ذاتها لكني أجد أن node.js هو موازنة جيدة بين السرعة بالانتاجية والأداء (http://www.techempower.com/benchmarks).
هذا طبعاً لا يعني أن node.js يتفوق بكل شيء على لغة مثل Scala فهي الأخرى ممتازة وتستفيد بشكل كبير من JVM ومكتبات لغة جافا القوية لكن لتطوير تطبيقات الويب تحديداً أرى أن node.js يتفوق على Scala بسهولته وخيار جيد جداً وسأطلق مشروع باستخدامه قريباً ان شاء الله.
   mohamed - محمد   
تماما، فعند تحولي من front-end إلى back-end والعكس لا أشعر بتغير الجو البرمجي خاصة اذا استعملت نفس المكتبات كـ underscore وما شابهها...
node.js ليس الأفضل بكل تأكيد لكنه يوفر بيئة تساعدك على الإنتاجية، السرعة والأداء صحيح متعلق جزء منها بطريقة البرمجة لكن توفر API بمستوى منخفض كما ذكرت سابقا سيساعدك على دفع الأداء لأقصى الحدود.
شكرا لتعقيبك. بعد أن تطلق مشروعك الجديد شاركنا من فضلك بخبرتك!
   isstaif - الأمجد توفيق اصطيف   
نعم نستخدمها في مشروع منصة اجتماعية عمومية هي MicroCommunity.
https://github.com/wikitechie/microcommunity
https://github.com/wikitechie/microcommunity/wiki/API
أهم خاصية ثورية متعلقة بـ Node هي الإدخال والإخراج غير المتزامن. وإمكانية التعامل مع الطلبات من خلال نيسب واحد Single Threaded، بدل حوض النياسب Threads pool. وهذا هو سبب الأداء القوي والمرتفع الذي أشرت له.
الصعوبة الأساسية في Node هي كتابة القسم الخاص بـ Business Logic في المخدم، حيث تجد نفسك مضطراً لكتابته بشكل غير متزامن.
السبب الأساسي الذي دفعنا لكتابة المشروع باستخدام Node هو أننا شعرنا بقوة المنصة، ولأن طبيعة المشروع الخاص بنا هو عبارة عن منصة قد يكون لها أهمية مستقبلية، فوجدنا أن تطويرها على منصة متقدمة هو الخيار الأفضل.
السبب الأخير هو أن Node تتكامل بسهولة أكثر مع طرق التطوير المتسارعة لاسيما على صعيد الواجهات الأمامية Front-end. وربما أهم مثال على هذا الكلام Yoeman وGrunt.
http://yeoman.io/
http://gruntjs.com/
   mohamed - محمد   
أوافقك الرأي، node.js منصة قوية وستزداد قوة بفضل مجتمعها ووتيرة تطويرها المتسارعة.
مشروع جميل بالمناسبة :)
   isstaif - الأمجد توفيق اصطيف   
نعم... ولكن التحدي هو الصعوبة. يعني رغم أنني راض جداً عن كل ما قدمته Node لتصبح المنصة قوية ومناسبة لبناء منصات اجتماعية (وهو هدف المشروع)... ولكني قلق أن موضوع الصعوبة قد يحد من المطورين الذين يستخدمون هذه المنصة. هل عندك فكرة عن حجم المستخدمين العرب؟
   mohamed - محمد   
ليست صعبة بدرجة كبيرة، صحيح أنها تحتاج مبرمج JS متمرن لكن يستطيع مبرمج متوسط الخبرة أن يتنفس قليلا :)
حقيقة لا أملك أي فكرة حول حجم المستخدمين العرب لهذه المنصة!
   abuobaeda - أبوعبيدة عبدي   
أخي هل لديك مرجع جيد للقراءة للتوسع بفهمها والقراءة عنها بشكل افضل بصراحة node.js تدور في راسي منذوا اكثر من ثلاثة ايام وخاصة بعدما تكلمت مع احد زملاءك في وكي لوجيا وذكرها امامي.
   isstaif - الأمجد توفيق اصطيف   
قمنا بتصوير مجموعة من الفيديوهات باللغة العربية في ويكيتيكي، أتمنى أن تجد فيها الفائدة
http://www.youtube.com/playlist?list=PLP7lkACO1c4RQY6XIXmgswCn4I01F0Vl8
   isstaif - الأمجد توفيق اصطيف   
لكن بشكل أساسي من الصعب جداً أن تتعلم وتتعمق بـ Node إلا إذا كنت تعرف ما هو المشروع الذي ترغب بالاستمرار به، لأنه يوجد عدة اتجاهات للتطوير التي ممكن أن تدخل بها حسب مشروعك
هذا الرابط مفيد أيضاً: دليل تقنيات جافاسكربت المعاصرة - ويكيتيكي
http://wikitechie.wikilogians.org/wiki/%D8%AF%D9%84%D9%8A%D9%84_%D8%AA%D9%82%D9%86%D9%8A%D8%A7%D8%AA_%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA_%D8%A7%D9%84%D9%85%D8%B9%D8%A7%D8%B5%D8%B1%D8%A9
   mohamed - محمد   
مرجعها الأصلي : http://nodejs.org/api/
أو من netuts (كخيار ثانوي) http://net.tutsplus.com/tutorials/javascript-ajax/this-time-youll-learn-node-js/
   aalagha - عبدالمهيمن الآغا   
قرأت الكتب التالية:
Professional Node.js: Building Javascript Based Scalable Software
Hands-on Node.js
The Node Beginner Book
الأول والثاني لنفس المؤلف. اذا اشتريت الأول فلا حاجة لتشتري غيره فهو أفضلهم.
   محمد هاني صباغ   
لا ناقة لي ولا جمل بالقصة، ولكن رأيت هذا الموضوع عن node.js فأردت وضعه لعله يفيد :)
http://is.gd/iCBHy1
   aalagha - عبدالمهيمن الآغا   
لغة جافاسكريبت لم تنشئ للتعامل مع الـ bytes فهي أساساً للويب ويمكنها التعامل بشكل جيد مع النصوص (Strings). لكن رغم ذلك node.js يضيف على جافاسكريبت الكثير من الأمور واحداها Buffer class التي تسمح بالتعامل مع المعلومات على مستوى البايت بشكل ممتاز وباستخدامه يمكن برمجة أي تطبيق.
بخصوص استخدام Ruby أو Python لبرمجة تطبيقات تعتمد على مبدء event-driven فهو أمر ممكن باستخدام مكتبات خاصة ولقد اطلعت سابقاً على Event Machine في روبي قبل node.js لكن المشكلة هنا أن أغلب مكتبات هذه اللغات الأخرى لم تبرمج لتتعامل باسلوب event-driven عكس نود الذي بني كل شيء فيه على هذا الأساس. هذا يعني في روبي وبايثون أنت تحتاج لمكتبة برمجت خصيصاً لتتوافق مع المكتبة التي تستخدمها لتوفير event-driven وهذا قد يسبب مشاكل غير متوقعة.
أنا أؤمن باستخدام أفضل وسيلة لأداء المهمة. لغة جافاسكريبت بها عيوب وليس الخيار الأمثل لانجاز كل شيء، كذلك لغة بايثون وروبي وسي وحتى جافا. أنا لن أبرمج تطبيق ويب باستخدام C ولن أستخدم جافاسكريبت للتلاعب بالـ bytes.
   shel3over - hamza   
nodjs مهمة لكل مبرمج javascript محترف
يمكن الاعتماد عليها في الكثير من الامور لا املك الكثير من المسطلحات التقنية العربية و لكنك ستجد ما احاول ان اعبر عنه في هذا الموقع
http://yeoman.io/
   samerm88 - samer melhem   
مقال جميل اخي الكريم.
انا بدأت من فترة التعلم على node.js وكتبت بعض الامثلة من يحب ان يستفيد و يتعرف على المزيد فالرابط هنا : http://www.stirring-interactive.com/blog/node-js-in-a-nutshell/
   Ahmed Elsayed - احمد الشهاوي   
اعتقد من الجميل/الممتع ان اكتب كود Client-Side بنفس لغة الكود المكتوب علي ال Server-Side هذا يجعل المبرمج يركز اكثر علي المشكلة وحلها وليس اللغة نفسها :) .
وايضا بNode.js يمكنك تطوير اضافات لها بال C/C++ بالتالي اداء اسرع واسرع :) .
شكراً علي المشاركة :) .
   tarekAli   
مقال مميز فيه كل ما تريد معرفته عن بيئة node.js وكيف تعمل على السيرفر وما يميزها عن غيرها من منصات برمجة الويب
https://torok-web.blogspot.com/2017/09/nodejs.html
  الموضوع و التعليقات و باقي البيانات في هذه الصفحة منقولة و معدلة من المصدر على الرابط التالي : https://io.hsoub.com/webdev/91
  هذا الموضوع مرخص تحت : رخصة المشاع الإبداعي BY-SA
المشاركة :
تويتر
فيسبوك
الإيميل
لينكد إن
واتساب
الرابط

أحمد فرج علي -- باحث بعلم الكونيات و الجاذبية الكمية وفيزياء الطاقة العالية -- اسألني ما تشاء
طور نفسك قبل أن تصبح ديناصور
"العميل دوما على حق؟" لا!
هل الوظيفة سيئة الى هذا الحد ؟
خطأين أحدهما يقتل مشروعك و الآخر يقتله أيضاً
العمال الأجانب ليسوا حمقى!
ماهو الشيء الذي تمنيت أنك عرفته عن الحياة عندما كنت في العشرينيات من العمر؟

الروابط المختصرة    سياسة الخصوصية    من أنا    من نحن    الأسئلة الشائعة    موضوع عشوائي    اتصل بنا   
                           
Developed by : MJ7.org