Skip to content

zimend69/Node.js-Design-Patterns-Third-Edition

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Node.js Design Patterns - Third-Edition

Node.js Design Patterns Third Edition (published by Packt), A book by Mario Casciaro and Luciano Mammino

توضیحات فارسی مثال ها و تمرینات کتاب دیزاین پترن نودجی اس

Blocking VS. Non-Blocking

Synchronously == Blocking == همزمان

Asynchronously == Non-Blocking == ناهمزمان

کارهای مثل تعامل با دیسک سخت و شبکه عملیات I/O می گویند

زمانی که اجرای کدهای جاوااسکریپت به عملیات I/O می رسد باید منتظر بماند تا عملیات تمام شود. دلیل این امر:‌چون حلقه رویداد قادر به اجرای جاوااسکریپت در حین وقوع عملیات Blocking رو ندارد

در NodeJS، جاوااسکریپت عملکرد ضعیفی نشان می دهد وقتی منتظر کدهای غیر جاوااسکریپتی هستیم چون عملیات I/O سی پی یو زیادی مصرف میکنند

در کتابخانه استاندارد نوجی اس متدهای همزمان یا Synchronously به نام libuv وجود دارد که متداول ترین عملیات Blocking نودجی اس هستند

ماژول های بومی نیز ممکن است متدهای Blocking داشته باشند

همه متدهای I/O در کتابخانه استاندارد نودجی اس نسخه ناهمزمان )Asynchronously) نیز دارند که Non-Blocking هستند و توابع Callback را می پذیرند. برخی متدها دارای معادل Blocking نیز هستند که نام تابع به Sync ختم می شود

در کد پایین در خط دوم عملیات بلاک می شود تا خواندن فایل کامل شود اگر این خط به خطا بخورد کل برنامه کرش می کند مگر اینکه خطا را هندل کرده باشین

const fs = require('fs')
const data = fs.readFileSync('/file.md')

در کد پایین کدهای بعد readFile اجرا می شوند و پس از اتمام عملیات I/O کدهای کال بک اجرا خواهد شد

const fs = require('fs')
fs.readFile('/file.md', (err, data)=> {
  if(err) throw err;
});

در کد دوم که نسخه ناهمزمان کد اول می باشد گرفتن خطا اختیاری است چون خطا دادن در کد ناهمزمان بروی عملکرد دیگر کدها تاثیری ندارد ولی در کد اول چون در موقع خواندن فایل کل عملیات JS قفل می شود در صورت خطا کرش کل برنامه رو داریم

Blocking

در برنامه نویسی سنتی blocking I/O اجرای نخ تا اتمام عملیات ورودی و خروجی مسدود می شود

// blocks the thread until the data is available
data = socket.read()
// data is available
print(data)

راه حل در برنامه نویسی سنتی استفاده از چندین نخ یا پراسس است که مسدود شدن یک نخ بروی انجام دیگر نخ ها تاثیر منفی نخواهد داشت

نخ ها در برنامه نویسی سنتی

زبان نودجی اس از روش non-blocking I/O استفاده می کند )ناهمزمان)

resources = [socketA, socketB, fileA]
while (!resources.isEmpty()) {
  for (resource of resources) {
    // try to read
    data = resource.read()
    if (data === NO_DATA_AVAILABLE) {
      // there is no data to read at the moment
      continue
    }
    if (data === RESOURCE_CLOSED) {
      // the resource was closed, remove it from the list
      resources.remove(i)
    } else {
      //some data was received, process it
      consumeData(data)
    }
  }
}

در کد بالا سی پی یو زیادی مصرف می شود چون مجبور است بارها بررسی کند تا زمانی که یک منبع اماده شود کد بالا برای مدیریت غیرمسدود شده مناسب نیست یکی از روش های خوب برای غیرمسدود کننده استفاده از رویدادهای همزمان (synchronous event) که رابط اطلاع رسانی رویداد نیز نامیده می شود می باشد

image

ماژول یک برنامه کوچک قابل توسعه و تست می باشد. در نودجی است دو سیستم ماژول وجود دارد: یک: CommonJS دو: ECMAScript می‌توانیم با هر کدام که بخواهیم ماژول بنویسیم.

About

Persian description for the Node.js Design Patterns Third Edition book!

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 98.2%
  • HTML 1.8%