بادئ ذي بدء ، هذا مقال مترجم من TJ's Warewell Node.js. لقد عانت بالفعل من بعض التأثير بعد قراءة هذا المقال ، لكنني لا أتفق مع بعض آراء المؤلف. على سبيل المثال ، أعتقد أن سجل حزمة Node.js هو أحد مزاياها العديدة ، لكن GO غير موجود قليلاً في هذا الصدد. بسبب المستوى الشخصي ، لا أفهم أشياء كثيرة عند الترجمة. ذهبت أيضًا إلى مدونة المؤلف و Stackoverflow لطرح بعض الأسئلة للحصول على إجابات. لا تزال هناك أشياء كثيرة ليست موجودة في الترجمة ، وآمل أن أحصل على وجهة نظر.
ملاحظة. كمبتدئين Node.js ، بفضل TJ على جهوده والذهاب إلى الطريق.
نص:
قل وداعا إلى Node.js
ترك عالم node.js
لقد قاتلت Node.js في الإنتاج لفترة طويلة بما فيه الكفاية وللأسف منذ أن لم أعد أستمتع بالعمل في هذه الوظيفة ، على الأقل في هذه اللحظة ، إنه وداعي الرسمي. الأهم من ذلك ، أنا بحاجة إلى مشرف.
العقدة رائعة حقًا في بعض النواحي ، لكنها ليست أداة مناسبة بعد كل شيء لنوع البرامج التي كنت مهتمًا بها مؤخرًا. ما زلت أخطط لاستخدام العقدة كموقع ويب ، ولكن إذا كنت مهتمًا بالحفاظ على أي مشروع ، فما عليك سوى ترك رسالة لكتابة اسم مستخدم Github الخاص بك ، اسم مستخدم NPM ، واسم المشروع لإخبارنا بذلك. عادة ما أطلبه هو أنك لا تغير API الحالي تمامًا. إذا كنت ترغب حقًا في القيام بذلك ، فمن الأفضل أن تبدأ مشروعًا جديدًا.
KOA هو مشروع سأستمر في الحفاظ عليه. (مع CO والأصدقاء)
قصة الكأس المقدسة
لطالما أحببت C ، لكن كل من يعمل في تطوير C يعلم أنه قيمة ولكن عرضة للأخطاء. من الصعب إثبات اختيار اللغة في العمل اليومي ، لأنها ليست الأسرع في الأسرع. البساطة هي أيضًا السبب الذي يجعلها دائمًا ما تم الإشادة بها ، لكنك لن تذهب بعيدًا جدًا بدون الكثير من القوالب.
مع مشاركة المزيد من الناس في تطوير الأنظمة الموزعة ، فإن اتجاه تطوير أداء العقدة على قابلية الاستخدام والمتانة جعلني أكثر إحباطًا. على مدار الأسبوع الماضي ، قمت بإعادة كتابة نظام موزع كبير نسبيًا في GO ، وهو أمر قوي ، وأداء أفضل ، ويسهل الحفاظ عليه ، ولديه تغطية أفضل للاختبار بسبب الجمال العام وأسهل تطوير التعليمات البرمجية المتزامنة.
أنا لا أقول أن GO هو الكأس المقدسة ، إنها ليست مثالية ، ولكن Go هي إجابة ممتازة لي للعديد من اللغات الموجودة اليوم. نظرًا لأن المزيد والمزيد من لغات "الجيل التالي" مثل Rust و Julia تجد مكانهما الخاص ونضجها ، فأنا متأكد من أنه لدينا المزيد من الحلول الرائعة.
أنا شخصياً أنا متحمس جدًا للذهاب بسبب سرعة التكرار ، فأنا متحمس للغاية لرؤية أنهم حريصون على الوصول إلى الإصدار 2.0 ، ووفقًا للأخبار التي سمعتها ، فإنهم لا يخافون من كسر الأشياء العظيمة الأصلية. إذا كان هذا صحيحًا ، فأنا سعيد ، وأكثر من ذلك لأنني أعتقد أنه إذا كان ذلك مفيدًا حقًا لهذه اللغة ، فيجب أن أقوم بتفكيك ما هو موجود بالفعل. لكنني لست عملاق برامج تدير الكثير من الأنظمة أيضًا. : د
تم تحريره بواسطة: يجب أن أساء تفسير بعض القوائم البريدية للتقديم ، ولا يتوقون إلى إجراء بعض التغييرات المدمرة في أي وقت. enneff
لماذا تذهب؟
إذا كانت العقدة تعمل من أجلك ولم يكن لديك ما يدعو للقلق ، فستظل أداة رائعة. ولكن إذا كان هناك شيء يزعجك ، فلا تنس أن تقفز من صندوقك وشاهد ما هو خارج الصندوق - لقد انجذبت إليه في غضون ساعات قليلة من استخدام GO في البداية لبناء المنتج.
مرة أخرى ، أنا لست هناك لأقول إن Go بالتأكيد أفضل لغة وعليك أن تذهب معها. ولكن بالنسبة لعمرها ، فهي ناضجة للغاية وقوية. (في نفس عمر العقدة تقريبًا). يعد إعادة بناء النوع ممتعًا وبسيطًا ، والأدوات المنزلية وتصحيح الأخطاء التي توفرها GO رائعة ، والمجتمع لديه لوائح قوية للغاية بشأن الوثائق والتنسيقات والمعايير وتصميم واجهة برمجة التطبيقات.
على الرغم من أن معتادًا جدًا على العقدة المعيارية للغاية ووجود مكتبة قياسية متعفن روبي ، عندما سمعت لأول مرة عن GO ، اعتقدت أن مكتبتها القياسية كانت مروعة. بعد أن غطت في هذه اللغة ، أدركت أن معظم المكتبات القياسية ضرورية في هذه المرحلة ، مثل الضغط و JSON و IO و IO المخزنة وعمليات السلسلة ، وما إلى ذلك. معظم واجهات برمجة التطبيقات هذه محددة جيدًا وقوية. من السهل كتابة البرنامج بأكمله فقط باستخدام هذه المكتبات القياسية.
الطرف الثالث GO حزم
تبدو معظم مكتبات Go متشابهة ، معظم رمز الطرف الثالث الذي استخدمته حتى الآن من جودة عالية ، ومن الصعب العثور على هذه في العقدة لأن JavaScript يجذب المطورين في مستويات مهارات مختلفة.
لا يوجد سجل لحزم GO ، لذلك سترى عادة 5 أو 6 حزم في نفس الوقت. في مرحلة ما ، يمكن أن يسبب هذا بعض الالتباس ، ولكن له تأثير جانبي مثير للاهتمام ، وعليك أن تقرر أي واحد هو الخيار الأفضل من خلال مراجعة كل حزمة بعناية. من خلال العقدة ، عادة ما تكون هناك حزم مواصفات مثل "redis" أو "Mongodb-Native" أو "Zeromq" ، لذلك ستتوقف عند هذا الحد.
إذا كنت تقوم ببعض الأعمال الموزعة ، فستجد أن أنواع البيانات الأساسية المثيرة للإعجاب من GO مفيدة للغاية. يمكننا الحصول على شيء مماثل من قبل المولدات في العقدة ، ولكن في رأيي لم يتم إنجاز المولدات إلا. بدون معالجة الأخطاء المستقلة ، لا يزال وضع الإبلاغ عاديًا حتى لو كان أفضل. عندما تعمل هذه الحلول بشكل جيد ، لا أريد انتظار إعادة تنظيم المجتمع لمدة ثلاث سنوات.
في رأيي ، تعتبر معالجة أخطاء Go رائعة. العقدة رائعة من حيث ما عليك التفكير في كل خطأ وتحديد كيفية القيام بذلك. ومع ذلك ، تفشل العقدة في:
قد تكرر رد الاتصال
لا يجوز لك إجراء رد اتصال على الإطلاق وتضيع في حالة غير مستقرة (على سبيل المثال ، تنسى تمرير خطأ للتعامل مع رد الاتصال. عند حدوث خطأ ، ستبتلع العقدة الخطأ دون أي ملاحظات)
قد تحصل على خطأ الوجبات السريعة
قد تحصل البوابات على أحداث خاطئة متعددة
نسيت الحدث الخاطئ للتعامل معه سوف يدمر كل شيء
في كثير من الأحيان ، لست متأكدًا مما هو مطلوب للتعامل مع الأخطاء
معالجة الأخطاء لا لزوم لها
رد الاتصال فظيع
في GO ، عندما ينتهي الكود الخاص بي ، فإنه ينتهي ولا يمكنك إعادة تنفيذه في بيان. هذا غير مؤكد في العقدة. ستعتقد أنه يتم تنفيذ البرنامج بالكامل حتى تتصل المكتبة بشكل غير متوقع رد اتصال عدة مرات ، أو لا تقوم بمسح معالجات بشكل صحيح ، ثم يتسبب في تنفيذ الكود مرة أخرى. من الصعب للغاية العثور على هذه الأسباب في رمز الإنتاج الفعلي ، لماذا تهتم بهذه؟ لن تسمح لك اللغات الأخرى بتجربة هذه الآلام.
عقدة المستقبل
ما زلت آمل أن تقوم Node بعمل جيد ، والكثير من الناس يستثمرون بشكل كبير فيه ، ولديها هذه الإمكانات. أعتقد أن Joyent والفريق بحاجة إلى التركيز على قابلية الاستخدام - إذا كان تطبيقك هشًا ويصعب تصحيحه وإحياءه وتطويره ، فإن الأداء لا معنى له.
في غضون 4-5 سنوات ، لا يزال لدينا هذا الخطأ الغامض "خطأ: getaddrinfo eaddrinfo" ، وهذه الحقيقة تخبرنا أين هي أولويات تطوير العقدة. من المفهوم ، عندما تركز على بناء جوهر النظام ، من السهل تفويت هذه الأشياء. أعتقد أن المستخدمين عبروا عن آرائهم بشأن مثل هذه الأشياء مرارًا وتكرارًا ، لكنهم لم يروا أي نتائج. عادة ما نحصل على بعض الردود للادعاء أن ما لدينا هو بالفعل مثالي. في الممارسة العملية ، هذا ليس هو الحال.
تتم مقاطعة التدفقات ، وعمليات الاسترجاعات ليست سهلة الاستخدام ، والأخطاء غير واضحة ، والأدوات ليست سهلة الاستخدام ، واللوائح المجتمعية ، ولكن يبدو أنها تفتقر إلى GO. على الرغم من ذلك ، قد أستمر في استخدام العقدة لبعض المهام المحددة ، مثل إنشاء صفحات الويب أو بعض واجهات برمجة التطبيقات أو النماذج الأولية المجزأة. إذا تمكنت العقدة من إصلاح بعض مشكلاتها الأساسية ، فستكون لديها فرصة للبقاء ذي صلة ، ولكن عندما يكون هناك حل آخر يؤدي إلى أعلى من التوفر عندما لا تذهب وسائط التوفر العليا إلى أعلى.
إذا قرر مجتمع العقدة احتضان المولدات وتنفيذها في عقدة أساسية للغاية وتمرير الأخطاء بشكل مناسب ، فهناك فرصة لجعل هذه المرجعية قابلة للإحالة. سيؤدي ذلك إلى تحسين قابلية الاستخدام وقوة العقدة.
والخبر السار هو أنني تحدثت إلى رجل عظيم وموهوب ساهم في الكود الأساسي في Strongloop منذ وقت ليس ببعيد. إنهم يتبنون بشكل صريح الطريقة الصحيحة لإصلاح هذه المشكلات لجعل العقد المستقبلية أسهل في العمل من خلال الاستماع إلى استجابات المطورين للمنصة والتخطيط لإيجاد الطريقة الصحيحة لإصلاح هذه المشكلات. لست متأكدًا من أن الصراع بين العديد من الشركات حول التطوير المتزامن للجزء الأساسي سينتهي ، لكنني آمل أن يفوز سائق المطور.
هذا لا يعني أنه هجوم على الأفراد ، والكثير من الأشخاص الموهوبين حقًا يعملون معهم أو على العقدة ، لكن هذا لم يعد شيئًا مهتمًا به. لقد قضيت وقتًا رائعًا في مجتمع العقدة والتقى ببعض الأشخاص المثيرين للاهتمام.
معنى القصة هو أنه لا ينبغي تقييد دائرتك! تعرف على أي مكان آخر وقد تستمتع بالبرمجة مرة أخرى. هناك العديد من الحلول المذهلة خارج هذا ، والخطأ الذي ارتكبته هو أنني انتظرت وقتًا طويلاً للعب معهم!