با عرض سلام خدمت کاربران سایت پی وی لرن . در آخرین مباحثی که در فصل آموزش API ، مرور کردیم ، به مباحث آموزشی و کاربردی موقعیت جغرافیایی در HTML و درگ کردن در HTML ، نیز آشنا شدید. همچنین در مطالب اخیر ، به موضوع مهم و جذاب ذخیره سازی وب در html ، نیز پرداختیم . و کدهای جاوااسکریپت برای ذخیره سازی وب را نیز ارائه کردیم. در ادامه مبحث API ، در این بخش از آموزش ما قصد داریم. به موضوع آشنایی با Web Workers در html5 و استفاده از Web Worker در HTML5 ، بپردازیم.
کارگر وب (Web Workers) ، در واقع یک JavaScript در حال اجرا در پس زمینه است، بدون اینکه تاثیر منفی بر عملکرد صفحه وب داشته باشد.
مرورگرهایی که از web storage پشتیبانی می کنند:
API | Chrome | Internet Explorer / Edge | Firefox | Safari | Opera |
---|---|---|---|---|---|
Web Storage | ۴٫۰ | ۱۰٫۰ | ۳٫۵ | ۴٫۰ | ۱۱٫۵ |
هنگام اجرای اسکریپت ها در یک صفحه HTML، صفحه تا زمانیکه اسکریپت به اتمام برسد، پاسخگو نخواهد بود. اما Web Workers ، یک جاوا اسکریپت است که در پس زمینه بصورت مستقل از سایر اسکریپت ها، اجرا می شود. بدون اینکه تاثیر منفی بر عملکرد صفحه داشته باشد.
شما نیز ، می توانید، هر کاری که می خواهید انجام دهید: کلیک کردن، انتخاب چیزها و … در حالی که کارگر وب در پس زمینه اجرا می شود.
مثالی از web worker :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <!DOCTYPE html> <html> <body> <p>Count numbers: <output id="result"></output></p> <button onclick="startWorker()">Start Worker</button> <button onclick="stopWorker()">Stop Worker</button> <p><strong>Note:</strong> Internet Explorer 9 and earlier versions do not support Web Workers.</p> <script> var w; function startWorker() { if(typeof(Worker) !== "undefined") { if(typeof(w) == "undefined") { w = new Worker("demo_workers.js"); } w.onmessage = function(event) { document.getElementById("result").innerHTML = event.data; }; } else { document.getElementById("result").innerHTML = "Sorry, your browser does not support Web Workers..."; } } function stopWorker() { w.terminate(); w = undefined; } </script> </body> </html> |
قبل از اینکه یک web worker را ایجاد کنید ، ابتدا بررسی کنید که آیا مرورگر شما از web worker پشتیبانی می کند:
1 2 3 4 5 6 | if (typeof(Worker) !== "undefined") { // Yes! Web worker support! // Some code..... } else { // Sorry! No Web Worker support.. } |
اکنون کد جاوااسکریپت web worker خود را ایجاد کنید.
د این مثال یک web worker ایجاد کردیم ،که از زمان اجرا شروع به شمارش می کند:
1 2 3 4 5 6 7 8 9 | var i = 0; function timedCount() { i = i + 1; postMessage(i); setTimeout("timedCount()",500); } timedCount(); |
مهمترین قسمت کد بالا ، تابع () postMessage، است. که برای ارسال یک پیام به صفحه HTML استفاده می شود.
معمولا از web worker ، برای پنین کارهای ساده ای استفاده نمی شود. اما در کارهای فشرده تر که CPU را زیاد درگیر می کند ، کاربرد دارد.
حالا که ما فایل web worker را داریم، باید آن را از یک صفحه HTML فراخوانی کنیم.
خطوط زیر بررسی می کند که آیا web worker ، در حال حاضر وجود دارد یا نه -سپس یک شی جدید web worker ، ایجاد می کند. و کد جاوااسکریپت را در “demo_workers.js” اجرا می کند:
1 2 3 | if (typeof(w) == "undefined") { w = new Worker("demo_workers.js"); } |
سپس ما می توانیم پیام ها را از طریق web worker ، ارسال و دریافت کنیم.
رویداد “onmessage” ر انیز به web worker ، اضافه می کنیم:
1 2 3 | w.onmessage = function(event){ document.getElementById("result").innerHTML = event.data; }; |
وقتی web worker ، یک پیام ارسال می کند، کد در رویداد listener ، اجرا می شود. داده های web worker نیز در event.data ذخیره می شود.
زمانیکه یک web worker ، را ایجاد می کنید. و اجرا می شود. تا زمیانیکه یک پایان برای web worker ، تعریف نکرده باشید. همچنان اجرا می شود.
برای پایان دادن به یک web worker ، از تابع ()terminate استفاده کنید:
1 | w.terminate(); |
پس از پایان web worker ، شما مجددا می توانید از کد web worker ، استفاده کنید:
1 | w = undefined; |
اکنون به یک مثال کاملتر از web worker ، می پردازیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <!DOCTYPE html> <html> <body> <p>Count numbers: <output id="result"></output></p> <button onclick="startWorker()">Start Worker</button> <button onclick="stopWorker()">Stop Worker</button> <script> var w; function startWorker() { if(typeof(Worker) !== "undefined") { if(typeof(w) == "undefined") { w = new Worker("demo_workers.js"); } w.onmessage = function(event) { document.getElementById("result").innerHTML = event.data; }; } else { document.getElementById("result").innerHTML = "Sorry! No Web Worker support."; } } function stopWorker() { w.terminate(); w = undefined; } </script> </body> </html> |
از آنجا که web worker در فایل های خارجی هستند، آنها دسترسی به اشیاء جاوا اسکریپت زیر را ندارند:
در بخش های قبلی با ویژگی ها و قابلیت های جالب و کاربردی در HTML5 با استفاده از کدهای جاوا اسکریپت آشنا شدیم. در این بخش نیز به مباحث آشنایی با Web Workers در html5 پرداختیم که امکان اجرای پردازشی در پس زمینه را بدون اینکه کاربران متوجه شوند را فراهم می سازد.
asra
سلام
کدهای بالا بخاطر فایل جاوای demo_workers کار نمیکنه؟
کاش کدهای داخل این فایل رو هم میگذاشتین که کاملا متوجه این درس بشیم.
پی وی لرن
سلام
ظاهرا همینطور است این قسمت بررسی و به زودی اصلاح می گردد