سؤال

أنا لا أحصل تماما على ما node.js. كل شيء عن. ربما هو لأنني أساسا مطور تطبيق الأعمال على الويب. ما هو وما هو استخدامها؟

فهمي حتى الآن:

  1. نموذج البرمجة هو الحدث مدفوع، خاصة الطريقة التي تعالج بها I / O..
  2. ويستخدم ذلك جافا سكريبت والمحلل هو V8..
  3. يمكن استخدامه بسهولة لإنشاء تطبيقات الخادم المتزامنة.

هل تفاهمتي صحيحة؟ إذا كانت الإجابة بنعم، فما هي فوائد I / O الأحداث، هل هي أكثر من مجرد الاشياء التزامن؟ أيضا، هو اتجاه Node.js لتصبح إطارا مثل نموذج برمجة JavaScript القائمة (V8)؟

هل كانت مفيدة؟

المحلول

أعتقد أن المزايا هي:

  1. تطوير الويب في لغة ديناميكية (JavaScript) على VM سريع بشكل لا يصدق (V8). إنه أسرع بكثير من روبي أو بيثون أو بيرل.

  2. القدرة على التعامل مع الآلاف من الاتصالات المتزامنة مع الحد الأدنى من النفقات العامة في عملية واحدة.

  3. JavaScript مثالي لحلقات الحدث مع كائنات وإغلاق الوظائف من الدرجة الأولى. يعرف الناس بالفعل كيفية استخدامه بهذه الطريقة التي استخدمتها في المتصفح للرد على الأحداث التي بدأت المستخدم.

  4. يعرف الكثير من الناس بالفعل جافا سكريبت، وحتى الأشخاص الذين لا يدعون أن يكون مبرمجا. يمكن القول أن لغة البرمجة الأكثر شعبية.

  5. باستخدام JavaScript على خادم ويب بالإضافة إلى تقليل المتصفح عدم تطابق المعاوق بين بيئات البرمجة التي يمكنها توصيل هياكل البيانات عبر JSON التي تعمل نفسها على جانبي المعادلة. يمكن مشاركة رمز التحقق من صحة النموذج المكرر بين الخادم والعميل، إلخ.

نصائح أخرى

يمكنني استخدام node.js في العمل، وتجد أن تكون قوية جدا. أجبر على اختيار كلمة واحدة لوصف node.js، أود أن أقول "مثيرة للاهتمام" (وهي ليست صفة إيجابية بحتة). المجتمع نابض ونمو. جافا سكريبت، على الرغم من شذوذها يمكن أن تكون لغة رائعة في التعليمات البرمجية. وسوف تقوم يوميا بإعادة التفكير في فهمك الخاص "أفضل الممارسات" وأنماط التعليمات البرمجية المنظمة بشكل جيد. هناك طاقة هائلة للأفكار المتدفقة في node.js الآن، والعمل في تعرضك لجميع هذا التفكير - رفع الأثقال العقلي العظيم.

node.js في الإنتاج ممكن بالتأكيد، ولكن بعيدة عن نشر "مفتاح الدوران" الذي وعد به الوثائق. مع node.js v0.6.x، تم دمج "الكتلة" في النظام الأساسي، وتوفير واحدة من كتل البناء الأساسية، ولكن البرنامج النصي الخاص بي "الإنتاج" لا يزال ~ 150 خطوط من المنطق للتعامل مع الأشياء مثل إنشاء السجل دليل، إعادة تدوير العمال الميت، وما إلى ذلك لخدمة إنتاج "خطيرة"، تحتاج أيضا إلى أن تكون مستعدا لخنق الاتصالات الواردة والقيام بكل الأشياء التي يفعلها Apache بي أتش بي. وبعد لنكون عادلين، روبي على القضبان لديه هذا بالضبط مشكلة. تم حلها عبر آليات تكميلية: 1) وضع روبي على القضبان / node.js وراء خادم خادم مخصص (مكتوب في ج واختباره إلى الجحيم والظهر) nginx. (أو اباتشي / lighttd.). يمكن أن يخدم خادم الويب بكفاءة محتوى ثابتا، والوصول إلى التسجيل، وإعادة كتابة عناوين URL، إنهاء SSL., وفرض قواعد الوصول وإدارة الخدمات الفرعية المتعددة. للحصول على طلبات التي ضربت خدمة العقدة الفعلية، يقوم WebServer بوكالة الطلب من خلال. 2) باستخدام إطار مثل وحيد القرن سيؤدي ذلك إلى إدارة عمليات العامل، وإعادة تدويرها بشكل دوري، وما إلى ذلك. قد يكون موجودا، لكنني لم أجد ذلك بعد ولا يزال يستخدم ~ 150 خطيا في "الإنتاج".

أطر القراءة مثل يعبر يجعل الأمر يبدو أن الممارسة المعيارية هي أن تخدم كل شيء من خلال خدمة Node.js Jack-one.js ... "app.use (Express.state (__ dirname + '/ public'))". لخدمات التحميل الأدنى والتطوير، الأمر على الأرجح. ولكن بمجرد محاولة وضع تحميل الوقت الكبير على خدمتكم ولديك تشغيل 24/7، ستكتشف بسرعة الدوافع التي تدفع المواقع الكبيرة التي تحتوي على C-Code C-Code Code nginx. Fronting موقعهم ومعالجة جميع طلبات المحتوى الثابت (... حتى تقوم بإعداد CDN., ، مثل أمازون cloudfront.)). بالنسبة إلى سلبية من روح الدعابة إلى حد ما، ترى ذلك هذا الشخص.

يعد Node.js أيضا المزيد والمزيد من الاستخدامات غير الخدمية. حتى إذا كنت تستخدم شيئا آخر لخدمة محتوى الويب، فقد لا تزال تستخدم node.js كأداة بناء، باستخدام NPM وحدات لتنظيم التعليمات البرمجية الخاصة بك، browserify. لغرزها في أصل واحد، و uglify-JS. لتقليلها للنشر. للتعامل مع الويب، جافا سكريبت مثالية مباراة المعاوقة وفي كثير من الأحيان يجعلها أسهل طريق للهجوم. على سبيل المثال، إذا كنت ترغب في إيجاد من خلال مجموعة من json. حمولات الاستجابة، يجب عليك استخدام بلدي underscore-cli. الوحدة النمطية، حزام المرافق للبيانات المنظمة.

الايجابيات / السلب

  • PRO: بالنسبة لرجل الخادم، كان كتابة جافا سكريبت على الخلفية كان "عقار بوابة" لتعلم أنماط واجهة المستخدم الحديثة. لم أعد رمز العميل للكتابة.
  • PRO: يميل إلى تشجيع التحقق من الخطأ الصحيح (يتم إرجاع خطأ من قبل جميع عمليات الاسجذافات تقريبا، مزعج للمبرمج للتعامل معها؛ أيضا، تعامل ASYNC.JS والمكتبات الأخرى مع "فشل إذا فشلت أي من هذه المجموعة الفرعية" نموذج أفضل بكثير من التعليمات البرمجية المتزامنة في
  • Pro: بعض المهام المثيرة للاهتمام وعادة ما تصبح المهام الصلبة تافهة - مثل الحصول على حالة حول المهام في الرحلة أو التواصل بين العمال أو تقاسم ولاية ذاكرة التخزين المؤقت
  • برو: مجتمع ضخم وأطنان من المكتبات العظيمة بناء على مدير الحزمة الصلبة (NPM)
  • يخدع: لا يوجد لدى جافا سكريبت مكتبة قياسية. يمكنك استخدامها لاستيراد الوظائف التي تشعر بأنها غرابة عند استخدام JSON.PLEPSE أو بعض المبنى الآخر في الأسلوب الذي لا يتطلب إضافة وحدة نمطية NPM. هذا يعني أن هناك خمس نسخ من كل شيء. حتى الوحدات النمطية المدرجة في Node.js "Core" لديها خمسة من المتغيرات يجب أن تكون غير راض عن التنفيذ الافتراضي. هذا يؤدي إلى تطور سريع، ولكن أيضا مستوى من الارتباك أيضا.

مقابل نموذج بسيط في عملية واحدة لكل طلب (مصباح):

  • برو: قابلة للتطوير إلى الآلاف من الاتصالات النشطة. سريع جدا وكفاءة للغاية. بالنسبة لأسطول ويب، قد يعني ذلك انخفاض 10x في عدد المربعات المطلوبة مقابل PHP أو Ruby
  • برو: كتابة أنماط متوازية أمر سهل. تخيل أنك بحاجة إلى جلب ثلاثة (أو ن) النقط من memcached.. وبعد هل هذا في PHP ... هل كتبت فقط رمز الجلب الأول النقط، ثم الثاني، ثم الثالث؟ واو، هذا بطيء. هناك خاص خفي الوحدة النمطية لإصلاح هذه المشكلة المحددة ل memcached، ولكن ماذا لو كنت ترغب في جلب بعض البيانات memcached بالتوازي مع استعلام قاعدة البيانات الخاصة بك؟ في node.js، لأن النموذج غير متزامن، وجود طلب ويب يفعل أشياء متعددة بالتوازي طبيعي للغاية.
  • يخدع: رمز غير متزامن هو أكثر تعقيدا بشكل أساسي من الرمز المتزامن، ويمكن أن يكون منحنى التعلم الأمريكي صعبا للمطورين دون فهم قوي لما يعنيه التنفيذ المتزامن في الواقع. ومع ذلك، فإن الأمر أقل صعوبة بكثير من كتابة أي نوع من التعليمات البرمجية متعددة المراحل مع قفل.
  • يخدع: في حالة تشغيل طلب مكثف لحساب، على سبيل المثال، 100 مللي ثانية، سيتوقف معالجة الطلبات الأخرى التي يتم التعامل معها في نفس عملية Node.js ... AKA، التعاونية تعدد المهام. وبعد يمكن تخفيف ذلك بنمط عمال الويب (الغزل عن جزء فرعي للتعامل مع المهمة باهظة الثمن). بدلا من ذلك، يمكنك استخدام عدد كبير من العمال Node.js ودع كل واحد يتعامل مع طلب واحد بشكل واحد (لا يزال فعالا إلى حد ما لأنه لا توجد إعادة تدوير العملية).
  • يخدع: تشغيل نظام الإنتاج أكثر تعقيدا من CGI. نموذج مثل Apache + PHP، بات, روبي, ، إلخ. استثناءات غير معلقة ستسقط العملية بأكملها، مما يستلزم المنطق لإعادة تشغيل العمال الفاشون (انظر العنقودية). يمكن أن تعطل الوحدات النمطية مع رمز عربات التي تجرها الدواب. عندما يموت العامل، يتم إسقاط أي طلبات يتم التعامل معها، لذلك يمكن ل API عربات التي تجرها الدواب بسهولة تتحلل الخدمة من أجل واجهات برمجة التطبيقات الأخرى الأخرى.

مقابل كتابة خدمة "حقيقية" في Java / C # / C (C؟ حقا؟)

  • PRO: القيام غير متزامن في node.js أسهل من القيام بأمان الخيوط في أي مكان آخر، ويمكن القول أن مزايا أكبر. node.js هو بعيد النموذج الأكثر إيلاما غير مؤلمة لقد عملت في أي وقت مضى. مع مكتبات جيدة، فهي أصعب قليلا فقط من كتابة التعليمات البرمجية المتزامنة.
  • برو: لا مؤادلات متعددة / قفل الأخطاء. صحيح، أنت تستثمر مقدما في كتابة عدد أكبر من التعليمات البرمجية التي تعبر عن سير العمل غير المتزامن السليم مع عدم وجود عمليات حظر. وتحتاج إلى كتابة بعض الاختبارات والحصول على شيء للعمل (إنها لغة برمجة نصية وأسماء متغيرة بالإصبع الدهون قد تم اكتشافها فقط في وقت اختبار الوحدة). ولكن، بمجرد أن تحصل عليه للعمل، مساحة السطح ل Heisenbugs. - مشاكل غريبة التي تظهر فقط مرة واحدة في مليون عمارة - تلك المنطقة السطحية أقل بكثير. تكتب الضرائب كتابة رمز Node.js محملة بشدة في مرحلة الترميز. ثم تميل إلى نهاية المطاف مع رمز مستقرة.
  • Pro: JavaScript مزيد من الوزن أكثر خفيفةا للتعبير عن وظائفها. من الصعب إثبات هذا بكلمات، ولكن json., ، الكتابة الديناميكية، تدوين Lambda، الميراث النموذجي، وحدات خفيفة الوزن، مهما كان ... فقط يميل إلى اتخاذ رمز أقل للتعبير عن نفس الأفكار.
  • يخدع: ربما أنت حقا، تحب حقا خدمات الترميز في جاوة؟

منظور آخر على جافا سكريبت و node.js، تحقق من من جافا إلى node.js, ، وظيفة بلوق على انطباعات وتجارب مطور Java تعلم Node.js.


وحداتعند النظر في العقدة، ضع في اعتبارك أن اختيارك لمكتبات JavaScript سوف حدد خبرتك. معظم الناس يستخدمون اثنين على الأقل، مساعد نمط غير متزامن (الخطوة، العقود الآجلة، ASYNC)، وحدة السكر JavaScript (underscore.js.).

المساعد / جافا سكريبت السكر:

  • underscore.js. - استخدم هذا. افعل ذلك. يجعل الكود الخاص بك لطيفة وقابلة للقراءة مع الأشياء مثل _.isstring ()، و _.sarray (). أنا لست متأكدا حقا كيف يمكنك كتابة رمز آمن على خلاف ذلك. أيضا، لتعزيز سطر الأوامر، تحقق من بلدي underscore-cli..

الوحدات النمطية غير المتزامنة:

  • خطوة - طريقة أنيقة جدا للتعبير عن مجموعات من الإجراءات التسلسلية والتوازي. رسالتي الشخصية. يرى منشوري في أي رمز الخطوة يشبه.
  • العقود الآجلة - أكثر مرونة بكثير (هل هذا حقا شيء جيد؟) طريقة للتعبير عن الطلب من خلال المتطلبات. يمكن التعبير عن الأشياء مثل "بدء A، B، C بالتوازي. عند انتهاء A، و B، ابدأ تشغيل AB. عند الانتهاء من A، و C، بدء AC." هذه المرونة تتطلب المزيد من الرعاية لتجنب الأخطاء في سير العمل الخاص بك (مثل عدم استدعاء الاتصال أبدا، أو استدعاءها عدة مرات). يرى راينوس بوست عند استخدام العقود المستقبلية (هذا هو المنشور الذي جعلني "احصل على" العقود المستقبلية).
  • async. - المزيد من المكتبة التقليدية مع طريقة واحدة لكل نمط. لقد بدأت مع هذا قبل تحويلي الديني إلى الخطوة والإدراك اللاحق أن جميع الأنماط في ASYNC يمكن التعبير عنها في خطوة مع نموذج واحد قابل للقراءة.
  • tamejs. - كتبها OKCUPID، إنه مسبق يضيف لغة جديدة "تنتظر" للكتابة بأناقة سير العمل التسلسلي والتوازي. يبدو النمط مذهلا، لكنه يتطلب تجميع مسبقا. ما زلت أعوض عقلي على هذا واحد.
  • تبسيط - منافس tamejs. أنا أتميل نحو ترويض، ولكن يمكنك تعويض عقلك.

أو لقراءة كل شيء عن المكتبات غير المتزامنة، انظر هذه المقابلة مع المؤلفين.

إطار الويب:

  • يعبر Ruby Great Ruby على إطار القضبان ESK لتنظيم مواقع الويب. ويستخدم ذلك يشم كمحرك قالب XML / HTML، مما يجعل بناء HTML أقل مؤلمة للغاية، وأنيقة تقريبا حتى.
  • jQuery. على الرغم من عدم وجود وحدة عقدة من الناحية تقنيا، أصبح JQuery بسرعة معيار De-Facto لواجهة المستخدم جانب العميل. يوفر JQUERY محددات تشبه CSS إلى "الاستعلام" للحصول على مجموعات من عناصر DOM التي يمكن تشغيلها بعد ذلك على (تعيين المعالجات والخصائص والأنماط وغيرها). على طول الوريد نفسه، تويتر bootstrap. إطار CSS، backbone.js. ل MVC. نمط، و browserify.js. على غرزة جميع ملفات JavaScript الخاصة بك في ملف واحد. هذه الوحدات كلها أصبحت معايير إلغاء الفعل حتى يجب عليك التحقق منها على الأقل إذا لم تسمع بها.

اختبارات:

  • jshint. - يجب استخدامها؛ لم أستخدم هذا في البداية والتي تبدو الآن غير مفهومة. يضيف JSLINT مجموعة من عمليات التحقق الأساسية التي تحصل عليها مع لغة مجمعة مثل Java. الأقواس غير متطابقة، والمتغيرات غير المعلن، والاستحمام من العديد من الأشكال والأحجام. يمكنك أيضا تشغيل أشكال مختلفة من ما أسميه "وضع الشرج" حيث تحقق من نمط Whitespace و Whatnot، وهذا ما يرابط، إذا كان هذا كوب من الشاي الخاص بك - ولكن القيمة الحقيقية تأتي من الحصول على ملاحظات فورية على رقم الخط الدقيق حيث نسيت إغلاق ")" ... دون الحاجة إلى تشغيل التعليمات البرمجية وضرب الخط المخالف. "Jshint" هو متغير أكثر قابلية للتكوين دوغلاس كروكفوردjslint..
  • موكا منافس للوفاء الذي بدأت في تفضيله. تعالج كلا الأطر الأساسية بشكل جيد بما فيه الكفاية، ولكن أنماط معقدة تميل إلى أن تكون أسهل للتعبير عن MOCHA.
  • عهود الوعود هي حقا أنيقة جدا. ويطبع تقريرا جميلا (- PSPEC) تبين لك حالات الاختبار التي مرت / فشلت. اقض 30 دقيقة تعلم ذلك، ويمكنك إنشاء اختبارات أساسية لوحداتك بأقل جهد.
  • الاموات الاحياء - اختبار بلا رأس ل HTML و JavaScript باستخدام jsdom. ك "متصفح" الظاهري. أشياء قوية جدا. الجمع بينها مع اعادته للحصول على الاختبارات السريعة الحتمية بسرعة من رمز المتصفح.
  • تعليق حول كيفية "التفكير في" الاختبار:
    • الاختبار غير اختياري. مع لغة ديناميكية مثل JavaScript، هناك جداً بعض الشيكات الثابتة. على سبيل المثال، تمرير معلمين لطريقة تتوقع 4 لن ينكسر حتى يتم تنفيذ الرمز. شريط منخفض جدا لإنشاء الأخطاء في جافا سكريبت. الاختبارات الأساسية ضرورية لتعويض فجوة التحقق مع لغات مجمعة.
    • ننسى التحقق من الصحة، فقط قم بتنفيذ التعليمات البرمجية الخاصة بك. لكل طريقة، حالتي الأولى التحقق من الصحة هي "لا شيء يكسر"، وهذا هو الحال الذي ينطلق في أغلب الأحيان. إثبات أن الكود الخاص بك يعمل دون رمي يمسك 80٪ من الأخطاء وسوف يفعل الكثير لتحسين ثقة التعليمات البرمجية الخاصة بك أنك ستجد نفسك تعود وإضافة حالات التحقق من الصحة الدقيق التي تخطيتها.
    • بدء صغير وكسر حاجز القص الكريم. نحن جميعا كسول، وضغطوا الوقت، ومن السهل أن نرى اختبار ك "عمل إضافي". لذلك ابدأ صغيرة. اكتب حالة الاختبار 0 - قم بتحميل الوحدة النمطية الخاصة بك والإبلاغ عن النجاح. إذا قمت بإجبار نفسك على القيام بذلك كثيرا، فسيتم كسر حاجز القصور الذاتي في الاختبار. هذا <30 دقيقة للقيام بذلك المرة الأولى، بما في ذلك قراءة الوثائق. الآن اكتب حالة الاختبار 1 - اتصل بأحد أساليبك والتحقق من "لا شيء يكسر"، أي أنه لا تحصل على خطأ. حالة الاختبار 1 يجب أن يأخذك أقل من دقيقة واحدة. مع التقدم الجمود، يصبح من السهل توسيع تغطية الاختبار تدريجيا.
    • الآن تتطور الاختبارات الخاصة بك مع الكود الخاص بك. لا تشعر بالترهيب من خلال ما يمكن أن يبدو الاختبار "الصحيح" نهاية إلى النهاية مع خوادم وهمية وكل ذلك. يبدأ التعليمات البرمجية بسيطة وتطوير للتعامل مع الحالات الجديدة؛ الاختبارات يجب أيضا. عند إضافة حالات جديدة وتعقيد جديد إلى التعليمات البرمجية الخاصة بك، أضف حالات اختبار لممارسة التعليمات البرمجية الجديدة. أثناء العثور على الأخطاء، أضف التحقق و / أو حالات جديدة لتغطية التعليمات البرمجية المعيبة. عندما تقوم بتصحيح الأخطاء وفقدان الثقة في جزء من التعليمات البرمجية، تعود وإضافة اختبارات لإثبات أنها تفعل ما تعتقد أنه هو. التقاط سلاسل من البيانات المثال (من الخدمات الأخرى التي تتصل بها، ومواقع الويب التي تكتسبها، أيا كان) وإطعامها إلى رمز تحليلك. بعض الحالات هنا، وتحسين التحقق من الصحة هناك، وسوف ينتهي بك الأمر مع رمز موثوق للغاية.

أيضا، تحقق من القائمة الرسمية من وحدات node.js الموصى بها. لكن، جيثب وحدات العقدة Wiki. هو أكثر اكتمالا ومورد جيد.


لفهم العقدة، فمن المفيد النظر في عدد قليل من خيارات التصميم الرئيسية:

node.js هو الحدث مقره و غير متزامن / عدم الحظر. وبعد سيؤدي الأحداث، مثل اتصال HTTP الوارد إلى إيقاف وظيفة JavaScript التي تعمل قليلا من العمل وتعرقل المهام غير المتزامنة الأخرى مثل الاتصال بقاعدة بيانات أو سحب محتوى من خادم آخر. بمجرد طرده هذه المهام، تنتهي وظيفة الحدث ويعود node.js إلى النوم. بمجرد حدوث شيء آخر، مثل اتصال قاعدة البيانات التي يتم تأسيسها أو أن الخادم الخارجي يستجيب مع المحتوى، ينفذ وظائف رد الاتصال، ومزيد من رمز Javascript، يحتمل أن ينطلق أكثر المهام غير المتزامنة (مثل استعلام قاعدة البيانات). وبهذه الطريقة، فإن Node.js ستعمل بسعادة تشير إلى أنشطة سير عمل متوازية متعددة، تشغيل أي أنشطة غير محظورة في أي وقت في الوقت المناسب. هذا هو السبب في أن Node.js يقوم بمثل هذه الوظيفة الرائعة التي تدير الآلاف من الاتصالات المتزامنة.

لماذا لا تستخدم عملية / موضوع واحد لكل اتصال مثل أي شخص آخر؟ في node.js، اتصال جديد هو مجرد تخصيص كومة صغيرة جدا. الغزل حتى عملية جديدة تأخذ ذاكرة أكثر بكثير، ميغابايت على بعض المنصات. لكن التكلفة الحقيقية هي النفقات المرتبطة بتبديل السياق. عندما يكون لديك 10 ^ 6 خيوط نواة، يجب أن تفعل النواة الكثير من العمل الذي يجب أن ينفذ بعد ذلك. لقد ذهبت مجموعة من العمل في بناء جدولة O (1) لنظام التشغيل Linux، ولكن في النهاية، إنها طريقة أكثر بكلمة أكثر كفاءة للحصول على عملية واحدة مدفوعة بحدث من 10 ^ 6 عمليات تتنافس لفترة CPU. أيضا، في ظل ظروف الحمل الزائد، يتصرف النموذج المتعدد العمليات بشكل سيء للغاية، خدمات الإدارة والإدارة الحرجة التي يتضور جوعا، وخاصة SSHD (وهذا يعني أنه لا يمكنك حتى تسجيل الدخول إلى المربع لمعرفة كيفية ثمل هو حقا).

node.js هو خيوط واحدة و قفل مجاني. وبعد node.js، كاختيار تصميم متعمد للغاية لديه فقط موضوع واحد لكل عملية. لهذا السبب، من المستحيل بشكل أساسي على مؤشرات ترابط متعددة للوصول إلى البيانات في وقت واحد. وبالتالي، هناك حاجة إلى أقفال. المواضيع صعبة. حقا صعب حقا. إذا كنت لا تصدق ذلك، فأنت لم تقم ببرمجة ما يكفي من الخيوط. الحصول على قفل الحق هو صعب ونتائج الأخطاء التي يصعب تتبعها حقا. القضاء على الأقفال ومتعدد الخيوط يجعل واحدة من فئات الأخطاء الأكثر شاغرة فقط تختفي. قد يكون هذا أكبر ميزة واحدة من العقدة.

ولكن كيف يمكنني الاستفادة من مربعي 16 الأساسية؟

بطريقتين:

  1. بالنسبة للمهام الجديدة للحساب الثقيلة مثل ترميز الصورة، يمكن Node.js إطلاق عمليات الأطفال أو إرسال رسائل إلى عمليات عامل إضافية. في هذا التصميم، سيكون لديك موضوع واحد يدير تدفق الأحداث وعمليات N القيام بمهام حسابية ثقيلة ومضغ وحدة المعالجة المركزية 15 الأخرى.
  2. لتوسيع نطاق الإنتاجية على موقع WebService، يجب تشغيل خوادم Node.js متعددة على مربع واحد، واحد لكل كور، باستخدام العنقودية (مع Node.js v0.6.x، تحل وحدة "الكتلة" الرسمية المرتبطة هنا محل إصدار LearnBoost الذي يحتوي على API مختلفة). يمكن أن تنافس خوادم Node.js المحلية هذه بعد ذلك على مأخذ توصيل لقبول اتصالات جديدة، وتحميل التوازن عبرها. بمجرد قبول الاتصال، يصبح ملزمة بإحكام واحدة واحدة من هذه العمليات المشتركة. من الناحية النظرية، هذا يبدو سيئا، ولكن في الممارسة العملية، يعمل بشكل جيد للغاية ويسمح لك بتجنب صداع كتابة التعليمات البرمجية الآمنة للخيط. هذا يعني أيضا أن node.js يحصل على تقارب ذاكرة التخزين المؤقت CPU ممتازة، باستخدام عرض النطاق الترددي في الذاكرة بشكل أكثر فعالية.

node.js يتيح لك القيام ببعض الأشياء القوية حقا دون كسر العرق. افترض أن لديك برنامج Node.js الذي يقوم بمجموعة متنوعة من المهام، ويستمع إلى TCP. ميناء لأوامر، ترميز بعض الصور، أيا كان. مع خمس خطوط من التعليمات البرمجية، يمكنك إضافة بوابة إدارة ويب استنادا إلى HTTP يعرض الحالة الحالية للمهام النشطة. هذا من السهل القيام به:

var http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end(myJavascriptObject.getSomeStatusInfo());
}).listen(1337, "127.0.0.1");

الآن يمكنك الوصول إلى عنوان URL وتحقق من حالة عملية التشغيل الخاصة بك. أضف بعض الأزرار، ولديك "بوابة إدارة". إذا كان لديك برنامج نصي بيرل / بيثون / روبي، فقط "رمي بوابة الإدارة" ليس بسيطة تماما.

ولكن ليس جافا سكريبت بطيء / سيئ / شر / تفرخ من الشيطان؟ يحتوي JavaScript على بعض الشذوذ الغريب، ولكن مع "الأجزاء الجيدة" هناك لغة قوية للغاية هناك، وفي أي حال، فإن JavaScript هي اللغة الموجودة على العميل (المتصفح). جافا سكريبت هنا للبقاء؛ هناك لغات أخرى تستهدفها كموهبة IL، وتنافس موهبة الطبقة العالمية على إنتاج محركات جافا سكريبت الأكثر تقدما. بسبب دور JavaScript في المتصفح، يتم إلقاء كمية هائلة من الجهود الهندسية في صنع JavaScript Blazing بسرعة. V8. هو أحدث وأكبر محرك جافا سكريبت، على الأقل لهذا الشهر. إنه ضربات لغات البرمجة النصية الأخرى في كل من الكفاءة والاستقرار (بالنظر إليك، روبي). وسوف تتحسن فقط مع فرق ضخمة تعمل على المشكلة في Microsoft و Google و Mozilla، المتنافسة لبناء أفضل محرك JavaScript (لم يعد جافا سكريبت "مترجم" كجميع المحركات الحديثة جيت تجميعها تحت غطاء محرك السيارة مع الترجمة الفورية فقط كعطاسية لتنفيذ التعليمات البرمجية). نعم، نتمنى جميعا أن نتمكن من إصلاح عدد قليل من خيارات لغة الجافاسيبت Odder، لكنها ليست سيئة حقا. واللغة مرنة جدا لدرجة أنك حقا لا ترميز جافا سكريبت، فأنت ترميز خطوة أو مسج - أكثر من أي لغة أخرى، في جافا سكريبت، تحدد المكتبات التجربة. لبناء تطبيقات الويب، عليك أن تعرف إلى حد كبير JavaScript على أي حال، لذا فإن الترميز معها على الخادم لديه نوع من تآزر مجموعة المهارات. لقد جعلني لا رائحة عميل الكتابة بالخوف.

الى جانب ذلك، إذا كنت حقا تكره جافا سكريبت، فيمكنك استخدام السكر النحوي مثل coffeescript. وبعد أو أي شيء آخر يخلق رمز جافا سكريبت، مثل مجموعة أدوات جوجل ويب (GWT).

تحدث عن جافا سكريبت، ما هو "إغلاق"؟ - إلى حد كبير طريقة خيالية للقول أنك تحتفظ بمتغيرات مشجعة مدرجة في سلاسل المكالمات. ؛) مثله:

var myData = "foo";
database.connect( 'user:pass', function myCallback( result ) {
    database.query("SELECT * from Foo where id = " + myData);
} );
// Note that doSomethingElse() executes _BEFORE_ "database.query" which is inside a callback
doSomethingElse();

انظر كيف يمكنك فقط استخدام "MyData" دون القيام بأي شيء محرج مثل تقسيمه في كائن؟ وعلى عكس Java، لا يجب أن يكون متغير "MyData" للقراءة فقط. هذه ميزة اللغات القوية تجعل البرمجة غير المتزامنة أقل سرعة أقل وأقل مؤلمة.

سيكون كتابة التعليمات البرمجية غير المتزامنة دائما أكثر تعقيدا من كتابة برنامج نصي بسيط متجول بسيط، ولكن مع node.js، ليس الأمر أكثر صعوبة وأحصل على الكثير من الفوائد بالإضافة إلى الكفاءة والتوسع إلى الآلاف من الاتصالات المتزامنة. ..

V8. هو تنفيذ جافا سكريبت. يتيح لك تشغيل تطبيقات جافا سكريبت مستقلة (من بين أشياء أخرى).

node.js هي ببساطة مكتبة مكتوبة ل V8 والتي حدثت I / O. هذا المفهوم صعب بعض الشيء لشرح، وأنا متأكد من أن شخصا ما سوف يجيب على تفسير أفضل مما كنت ... الفجوس هو ذلك بدلا من القيام ببعض المدخلات أو الإخراج والانتظار حتى يحدث ذلك، أنت فقط لا انتظر حتى النهاية. لذلك على سبيل المثال، اسأل عن آخر وقت تحرير الملف:

// Pseudo code
stat( 'somefile' )

قد يستغرق ذلك بضع مللي ثانية، أو قد يستغرق الأمر ثواني. مع أحداث I / O. يمكنك ببساطة إطلاق الطلب وبدلا من الانتظار حولك إرفاق رد اتصال يتم تشغيله عند انتهاء الطلب:

// Pseudo code
stat( 'somefile', function( result ) {
  // Use the result here
} );
// ...more code here

هذا يجعله كثيرا مثل رمز JavaScript في المتصفح (على سبيل المثال، مع ajax وظيفة نمط).

لمزيد من المعلومات، يجب عليك التحقق من المقالة node.js مثيرة حقا التي كانت مقدمة في المكتبة / منصة ... لقد وجدت أنها جيدة جدا.

node.js. هي أداة سطر الأوامر مفتوحة المصدر التي تم بناؤها للحصول على رمز JavaScript جانب الخادم. يمكنك تنزيل tarball., ، ترجمة وتثبيت المصدر. يتيح لك تشغيل برامج JavaScript.

يتم تنفيذ جافا سكريبت من قبل V8., ، محرك جافا سكريبت طورته Google المستخدمة في كروم متصفح. يستخدم API جافا سكريبت للوصول إلى الشبكة ونظام الملفات.

إنها تحظى بشعبية لأداءها والقدرة على أداء عمليات متوازية.

فهم node.js. هو أفضل شرح لل node.js. لقد وجدت حتى الآن.

فيما يلي بعض المقالات الجيدة حول هذا الموضوع.

الإغلاق هي وسيلة لتنفيذ التعليمات البرمجية في السياق تم إنشاؤها فيها.

ما هذا يعني التوفيق هو أنه يمكنك تحديد المتغيرات، ثم بدء عدم حدوث I / O. وظيفة، وإرسالها وظيفة مجهولة لاستعدادها.

عند اكتمال المهمة، ستنفذ وظيفة رد الاتصال في السياق مع المتغيرات، هذا هو الإغلاق.

السبب هو الإغلاق جيد جدا لكتابة التطبيقات مع عدم حدوث I / O هو أنه من السهل جدا إدارة سياق الوظائف التي تنفذ بشكل غير متزامن.

بعض الأمثلة الجيدة فيما يتعلق بكيفية إدارة قوالب واستخدام التحسينات التقدمية معها. تحتاج فقط إلى بعض القطع الخفيفة من رمز JavaScript لجعلها تعمل تماما.

أوصي بشدة أن تشاهد وقراءة هذه المقالات:

التقط أي لغة ومحاولة تذكر كيف يمكنك إدارة قوالب ملفات HTML وماذا عليك القيام به لتحديث واحد CSS. اسم الفصل في الخاص بك دوم هيكل (على سبيل المثال، تم النقر فوق المستخدم على عنصر قائمة وتريد أن يتم وضع علامة "محددة" وتحديث محتوى الصفحة).

مع node.js هو بسيطة كما تفعل ذلك في رمز جافا سكريبت من جانب العميل. احصل على عقدة DOM وتطبيق فئة CSS الخاصة بك على ذلك. احصل على عقدة DOM و Innerhtml المحتوى الخاص بك (ستحتاج إلى بعض رمز JavaScript إضافي للقيام بذلك. اقرأ المقالة لمعرفة المزيد).

مثال جيد آخر، هو أنه يمكنك جعل صفحة الويب المتوافقة مع جافا سكريبت قيد التشغيل أو إيقاف تشغيلها بنفس القطعة من التعليمات البرمجية. تخيل أن لديك اختيار تاريخ صنع في JavaScript من شأنه أن يسمح للمستخدمين باستلام أي تاريخ باستخدام تقويم. يمكنك الكتابة (أو الاستخدام) نفس جزء من رمز JavaScript لجعله يعمل مع تشغيل جافا سكريبت أو إيقاف تشغيله.

هناك تشبيه جيد للغاية للوجبات السريعة للغاية يشرح على أفضل حالات الطراز الذي يحركه الحدث Node.js، راجع المقال الكامل، node.js، مكاتب الطبيب ومطاعم الوجبات السريعة - فهم البرمجة التي يحركها الحدث

هنا ملخص:

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

node.js هو مدفوعة بالحدث، ولكن معظم خوادم الويب المستندة إلى الموضوع. يشرح Yorkork كيفية عمل Node.js:

  • يمكنك استخدام متصفح الويب الخاص بك لتقديم طلب "/about.html" على خادم الويب Node.js.

  • يقبل خادم Node.js طلبك ويسد وظيفة لاسترداد هذا الملف من القرص.

  • في حين أن خادم Node.js ينتظر استرداد الملف، فإنها تقوم بخدمات طلب الويب التالي.

  • عند استرداد الملف، هناك وظيفة رد الاتصال المدرجة في قائمة انتظار خوادم Node.js.

  • يقوم خادم Node.js بتنفيذ هذه الوظيفة التي في هذه الحالة تقوم بتقديم صفحة "/about.html" وإرسالها مرة أخرى إلى متصفح الويب الخاص بك. "

نحن سوف، انا افهم ذلك

  • هدف العقدة هو توفير طريقة سهلة لبناء برامج شبكة قابلة للتطوير.
  • تشبه العقدة في التصميم وتأثرت بأنظمة مثل آلة حدث روبي أو ملتوية بيثون.
  • أحذف I / O ل V8 JavaScript.

بالنسبة لي وهذا يعني أنك صحيحة في الافتراضات الثلاثة. المكتبة بالتأكيد تبدو واعدة!

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

س: نموذج البرمجة هو الحدث مدفوع، وخاصة الطريقة التي تعالج بها I / O..

صيح. يستخدم استدعاء الدعم، لذلك فإن أي طلب للوصول إلى نظام الملفات سيؤدي إلى إرسال طلب إلى نظام الملفات، ثم سيبدأ Node.js في معالجة طلبه التالي. سوف تقلق فقط بشأن طلب الإدخال / الإخراج بمجرد الاستجابة من نظام الملفات، وفي الوقت قد قيد تشغيل رمز رد الاتصال. ومع ذلك، من الممكن تقديم طلبات الإدخال / الإخراج متزامنة (أي طلبات منع الطلبات). الأمر متروك للمطور للاختيار بين غير متزامن (ردود الاستدعاء) أو متزامن (الانتظار).

س: يستخدم جافا سكريبت والتحلل هو V8.

نعم

س: يمكن استخدامه بسهولة لإنشاء تطبيقات الخادم المتزامنة.

نعم، على الرغم من أنك تحتاج إلى يدوي كود الكثير من JavaScript. قد يكون من الأفضل أن ننظر إلى إطار، مثل http://www.easynodejs.com/ - والتي تأتي مع الوثائق الكاملة عبر الإنترنت وتطبيق عينة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top