How to steps to super speedy JavaScript

เมื่อมองแวบแรกการประมวลผลแบบขนานดูเหมือนจะเป็นคำเชิญรับประทานอาหารกลางวันฟรี ความสามารถในการใช้ซีพียูแบบมัลติคอร์ได้อย่างมีประสิทธิภาพควรเร่งความเร็วโค้ดของคุณอย่างมาก

ประสบการณ์จริงชี้ให้เห็นว่าไม่ได้เป็นเช่นนั้นเสมอไปปัญหาบางอย่างอาจไม่ขนานกัน การทำงานแบบขนานทำให้เกิดปัญหาใหม่ที่ไม่พบในเครื่องแกนเดียว

โดยหลักการแล้วรหัสคู่ขนานสามารถแบ่งออกเป็นสองกลุ่มของฟังก์ชัน

กลุ่มแรกคือการเร่งความเร็วแบบคลาสสิก – หากโปรแกรมของคุณต้องการคัดกรองภาพได้มากถึง 3,000 ภาพการแยกภาพหมายความว่าสามารถประมวลผลภาพได้มากขึ้นในคราวเดียว อย่างไรก็ตามมันเป็นประโยชน์อย่างแน่นอน แต่งานดังกล่าวแทบจะไม่พบในการพัฒนาเว็บทุกวัน

รูปแบบของงานคู่ขนานที่พบบ่อยที่สุดคือการทำงานที่ใช้เวลานานซึ่งไม่ต้องใช้เวลา CPU มากนัก

ตัวอย่างที่ดีสำหรับสิ่งนี้คือการรอการดาวน์โหลดหรือการป้อนข้อมูลอุปกรณ์บางประเภท: หากทำแบบขนาน GUI ที่เหลือจะไม่ถูกบล็อก

เนื่องจากผู้ใช้มักมีปัญหาในการทำความเข้าใจว่าเหตุใด “ไม่คลิกปุ่ม” จึงทำให้ผู้ใช้พึงพอใจมากขึ้นแม้ว่าความเร็วจริงจะไม่เพิ่มขึ้นก็ตาม

หากคุณต้องการแหล่งข้อมูลใหม่เพื่อช่วยให้คุณเขียนได้อย่างชาญฉลาดยิ่งขึ้นโปรดอ่านคำแนะนำเกี่ยวกับเครื่องมือออกแบบเว็บไซต์ที่ดีที่สุดประจำปี 2019

01. ปฏิบัติการที่ใช้งานอยู่

ให้เราเริ่มต้นด้วยตัวอย่างเล็ก ๆ จากรายการโปรด: ฟังก์ชัน setInterval ใช้การอ้างอิงฟังก์ชันและค่าตัวเลขที่กำหนดเป็นมิลลิวินาที หลังจากนั้นฟังก์ชันจะเริ่มทำงานเป็นระยะ ๆ เมื่อหมดเวลาหน่วงเวลา

02. เตรียมพร้อมสำหรับฤดูใบไม้ร่วง

การใช้ฟังก์ชัน sleep () ทำให้เราต้องโหลดโมดูลสลีปลงในโปรเจ็กต์ npm ภายในซึ่งทำหน้าที่เป็นส่วนต่อประสานกับไลบรารีสลีปของระบบปฏิบัติการ – ไม่ต้องสงสัยเลยว่าแพ็คเกจคอมไพเลอร์ของคุณระหว่างการปรับใช้ เวิร์กสเตชันจะทำงานหรือไม่?

03. อันตรายจากการทำงานหลายอย่างพร้อมกัน

ในขณะที่รันโปรแกรมนี้คุณจะพบว่าตัวเองต้องเผชิญกับผลลัพธ์เดียวกันกับรูปที่แสดงในกระบวนการนี้ เห็นได้ชัดว่าไม่เคยมีการเรียกคนงานของเรา – มีบางอย่างผิดปกติกับฟังก์ชันช่วงเวลาที่กำหนด

04. ความเสี่ยงของการทำงานหลายอย่างพร้อมกันตอนที่ 2

เบราว์เซอร์สมัยใหม่ให้แต่ละแท็บด้วยเธรด JavaScript การดูห่วงของเราอย่างรอบคอบแสดงให้เห็นว่ามันไม่มีจุดสิ้นสุด

ซึ่งหมายความว่าจะคงอยู่ตลอดไปและจะไม่มีวันที่ควบคุมเนื่องจาก setInterval () ทำงานร่วมกับข้อความส่วนข้อมูลจะไม่ถูกเรียกเนื่องจากตัวจัดการข้อความถูกบล็อกไม่ให้ทำงาน

05. มุ่งเน้นไปที่ผู้ก่อกวน

บล็อก Flavio Copes มีรหัสที่น่าสนใจมากโดยสรุปปัญหา เมื่อรันจะสร้างผลลัพธ์ที่แสดงในรูปภาพเนื่องจากคิวข้อความถูกบล็อกจนกว่า fu () จะให้การควบคุมเธรดหลัก

06. การแพร่กระจายมากที่สุด

เนื่องจากระบบปฏิบัติการพื้นฐานสามารถทำงานหลายอย่างล่วงหน้าได้ให้เราใช้ประโยชน์จากความสามารถของมันโดยการขยายเธรดผ่าน API เฉพาะที่เรียกว่า WebWorkers ซึ่งได้รับการสนับสนุนอย่างกว้างขวาง รูปภาพประกอบขั้นตอนนี้แสดงรายการคุณสมบัติปัจจุบัน

07. สร้างไฟล์พิเศษ

WebWorkers ไม่สามารถเริ่มต้นด้วยเพย์โหลดของฟังก์ชัน แต่ไฟล์ใหม่ที่มีโค้ดที่ต้องรันในเธรด ในกรณีของตัวอย่าง example7thread.js ของเราคือเนื้อหาที่แสดงด้วยขั้นตอนนี้

08. คนงาน

พนักงานของเราพร้อมสำหรับช่วงเวลาสำคัญ ความเป็นเอกลักษณ์ของรันไทม์ Node.JS บังคับให้เรารวมโมดูลเธรดที่ยุ่งยากและส่งต่อในเส้นทางสัมพัทธ์ – ปัญหาที่ไม่พบในเบราว์เซอร์ นอกจากนี้อย่าสงสัยว่าจะมีการโทร start () ที่หายไปเนื่องจากผู้ปฏิบัติงานบนเว็บจะถูกปิดเมื่ออินสแตนซ์ออนไลน์

09. … และเข้าใจผลของมัน

การส่งข้อความมักจะต้องมีการโต้ตอบระหว่างรันไทม์และส่วนที่เหลือของระบบปฏิบัติการ น่าเศร้าที่การวนซ้ำที่ไม่สิ้นสุดของเราปิดกั้นกระบวนการนี้ซึ่งหมายความว่าจะมีเพียงข้อความเดียวเท่านั้นที่ปรากฏก่อน “แผงลอยใหญ่”

10. ทามาส์ก

การทดลองอื่นเกี่ยวข้องกับการวางลูปว่างหลังจากการเรียกตัวสร้างทั้งสอง ในกรณีนี้เธรดจะไม่เริ่มทำงาน – ข้อความการรันจะไม่ไปถึงระบบปฏิบัติการ

11. การสื่อสารระหว่างกระบวนการ

ในขณะที่คนงานวนซ้ำไม่รู้จบจะมีปัญหาดังที่แสดงไว้ข้างต้น แต่กิจวัตรสามารถสื่อสารกันได้ สิ่งนี้ทำได้ผ่านอินเทอร์เฟซการส่งข้อความ – คิดว่าเป็นคุณสมบัติที่ช่วยให้คุณส่งผ่านวัตถุข้อความจากผู้ส่งไปยังผู้รับข้ามขอบเขตเธรด

12. ส่งข้อความทำไม

นอกเหนือจากประโยชน์ของความสามารถในการซิงโครไนซ์เธรดแบบเธรด (และลดความเสี่ยงของ ‘การชนกัน’ หรือที่เรียกว่าเงื่อนไขการแข่งขัน) เธรดหลักยังเป็นเธรดเดียวที่จะโต้ตอบเนื่องจากข้อความ DOM วิธีนี้ยุ่งยากในการสร้าง สแต็ก GUI ที่ปลอดภัยต่อเธรด

Leave a Comment