سيتحدث هذه المقالة الأولى عن بعض تفاصيل البرمجة عن NodeJS.
1. التكرار من خلال الصفيف
لـ (var i = 0 ، l = arr.length ؛ i <l ؛ i ++)
تتمثل إحدى ميزة الكتابة بهذه الطريقة في الحصول على تشغيل طول كائن الصفيف بخطوة أقل في كل حلقة. كلما طالت طول الصفيف ، كلما زادت قيمة القيمة.
2. تحديد صحة المتغيرات
if (a) {...} // a = '' ، a = '0' ، a = [] ، a = {}نتائج ما إذا كان الحكم الشرطي: خطأ ، حقيقي ، حقيقي ، حقيقي. تختلف هذه النتيجة عن نتيجة PHP ، لذلك لا تشوش. من الضروري أيضًا التمييز بين المواقف التي تشبه الأحكام غير الهوية.
3.
1 إذا (0 == '0') {...} // true2 if (0 == []) {...} // true3 if (0 == [0]) {...} // true4 if (0 == {}) {...} // false5 if (0 == null) {...في الواقع ، هناك العديد من هذه الأحكام الغريبة ، وقد أدرجت فقط الأحكام الأكثر شيوعًا. إذا كنت ترغب في فهم القواعد ، فيرجى الرجوع إلى منشور آخر في مدونة: [JavaScript] تحليل متعمق لعمليات JavaScript العلائقية وإذا كانت البيانات.
4. فخ الحاجز
var n = parseint (s) ؛ // s = '010'
بعد تنفيذ البيان ، فإن القيمة n هي 8 ، وليس 10. على الرغم من أن الكثير من الناس يعرفون ذلك ، إلا أنه من المحتم أن تكون هناك أخطاء في البرمجة ، ولدي فهم عميق لها. لذلك ، من الأفضل الكتابة بالطريقة التالية ، لذلك لن تكون هناك أخطاء.
var n = parseint (s ، 10) ؛
5. يجب إعلان المتغيرات قبل الاستخدام
على الرغم من أنه لن يرتكب أي أخطاء مباشرة باستخدام المتغيرات دون إعلانها ، إلا أنه من السهل ارتكاب أي أخطاء عند الكتابة بهذه الطريقة. نظرًا لأن المترجم المترجم يفسرها كمتغير عالمي ، فمن السهل التسبب في أخطاء بتقسيمها مع متغيرات عالمية أخرى. لذلك ، يجب عليك تطوير عادة جيدة لإعلان المتغيرات قبل استخدامها.
6. هناك متزامن في الحلقة
لـ (var i = 0 ، l = arr.length ؛ i <l ؛ i ++) {var sql = "select * from nx_user" ؛ db.query (sql ، function () {sys.log (i + ':' + sql) ؛}) ؛ //db.query هي عملية استعلام الجدول ، وهي عملية غير متزامنة}ستجد أن نتائج الإخراج هي نفسها ، وهي محتوى الإخراج عندما i = arr.length-1. نظرًا لأن JavaScript متاح واحد ، فسيقوم بتنفيذ المحتوى المتزامن للحلقة الكاملة قبل إجراء العمليات غير المتزامنة. وظيفة رد الاتصال المجهول في الكود هي رد اتصال غير متزامن. عند تنفيذ الوظيفة ، تم تنفيذ حلقة For وبعض عمليات التزامن اللاحقة. نظرًا لمبدأ الإغلاق ، ستحتفظ هذه الوظيفة بمحتويات متغير SQL ومتغير I من آخر حلقة من الحلقة For ، والتي ستؤدي إلى نتيجة غير صحيحة.
إذن ماذا علي أن أفعل؟ هناك حلان ، أحدهما هو استخدام الوظيفة الفورية ، على النحو التالي:
لـ (var i = 0 ، l = arr.length ؛ i <l ؛ i ++) {var sql = "select * from nx_user" ؛ (الدالة (sql ، i) {db.query (sql ، function () {sys.log (i + ':' + sql) ؛}) ؛ //db.query هي عملية استعلام الجدول ، وهي عملية غير متزامنة}) (sql ، i) ؛}هناك طريقة أخرى تتمثل في استخراج جزء التشغيل غير المتزامن وكتابة وظيفة واحدة ، على النحو التالي:
var outputsql = function (sql ، i) {db.query (sql ، function () {sys.log (i + ':' + sql) ؛}) ؛ . المخرجات (sql ، i) ؛ }7. عند معالجة كميات كبيرة من البيانات ، حاول تجنب تعشيش الحلقة.
نظرًا لأن وقت معالجة حلقة التعشيش سيزداد بشكل كبير مع زيادة كمية البيانات ، فيجب تجنبها قدر الإمكان. في هذه الحالة ، إذا لم تكن هناك طريقة أفضل ، فإن الاستراتيجية العامة هي تبادل مساحة الوقت ، أي إنشاء جدول تعيين تجزئة للبيانات الدورية الثانوية. بالطبع ، يلزم تحليل الوضع المحدد أيضًا. شيء آخر يمكن قوله هو أن بعض الطرق هي أجسام حلقة نفسها ، مثل Array.sort () (يجب تنفيذ هذه الطريقة بطبقتين من الحلقات) ، لذلك تحتاج إلى الانتباه عند استخدامها.
8. حاول تجنب المكالمات العودية.
ميزة المكالمات العودية هي أن الكود موجز والتنفيذ بسيط ، في حين أن عيوبه مهمة للغاية. الوصف التالي كما يلي:
(1) سوف ينمو حجم مكدس الوظيفة خطيًا مع المستوى المتكرر ، ومكدس الوظيفة له قيمة الحد الأعلى. عندما تصل العودية إلى عدد معين من الطبقات ، فإن مكدس الوظائف سوف يفيض ، مما يؤدي إلى أخطاء البرنامج ؛
(2) ستضيف كل طبقة متكررة عمليات الضغط على المكدس وإصدار المكدس ، أي موقع التوفير وموقع الاسترداد أثناء استدعاء الوظيفة.
لذلك ، يجب تجنب المكالمات العودية قدر الإمكان.
9. فيما يتعلق بعزل ملفات الوحدة النمطية.
عندما تقوم العقدة بتجميع ملفات وحدة JavaScript ، فقد تم لف محتوىها في البداية والنهاية ، على النحو التالي:
(الوظيفة (الصادرات ، المتطلبات ، الوحدة النمطية ، __filename ، __dirname) {رمز ملف javaScript الخاص بك}) ؛هذا يسمح بعزل النطاق بين كل ملف وحدة. لذلك ، عند كتابة ملفات وحدة NodeJS ، لا تحتاج إلى إضافة طبقة أخرى من تغليف عزل النطاق. على سبيل المثال ، سيضيف تنسيق الكود التالي فقط طبقة إضافية من مكالمات الوظائف ، والتي لا ينصح بها:
(وظيفة(){ ... …})()؛10. لا تخلط المصفوفات والأشياء
فيما يلي مثال على رمز الخطأ:
var o = [] ؛ o ['name'] = 'liming' ؛
قد تؤدي المصفوفات والأشياء المختلطة إلى أخطاء لا يمكن التنبؤ بها. واجه زميل لي مشكلة غريبة للغاية. دعونا نلقي نظرة على الكود أولاً:
var o = [] ؛ o ['name'] = 'liming' ؛ var s = json.stringify (o) ؛
لقد اعتقد أن سمة اسم الكائن O ستكون في سلسلة JSON ، لكن النتيجة لم تكن شيئًا. كنت أيضًا غريبًا جدًا في ذلك الوقت ، لكن كان لديّ premonition بأنه كان مشكلة في خلط المصفوفات والأشياء. لقد جربتها وكانت بالفعل مشكلتها. في وقت لاحق وجدت في مواصفات ECMA أن المصفوفات تسلسل وفقًا لقواعد JA. لذلك ، يجب عليك تطوير عادة برمجة جيدة ، واستخدام المصفوفات والكائنات بشكل صحيح ، ولا تخلطها.
11. وعد البرمجة الأنيقة
أعتقد أن الأشخاص الذين تعرضوا لـ Nodejs لديهم هذه التجربة. عندما يكون رد الاتصال غير المتزامن متداخلًا في رد الاتصال غير المتزامن ، يبدو الرمز مربكًا للغاية ويفتقر إلى سهولة القراءة. يمكن التغلب على معضلة NodeJs مع الوعود. الوعد يشبه أداة النحت التي تجعل الكود أنيقًا وجميلًا. هناك مواصفات A+ للوعود ، وهناك العديد من أساليب التنفيذ عبر الإنترنت ، يمكنك الرجوع إليها.