Skip to content

[คำแนะนำ] ความเร็วของการคำนวณดิบ (โหนด, Golang)

ฉันมีแอปอีเลคตรอนที่กำลังคำนวณค่าแรงสวย ๆ อยู่ที่ส่วนหน้าเพื่อแสดงกราฟและแผนภูมิ

การแคชไม่ได้เป็นตัวเลือกที่ดีในเรื่องนี้เนื่องจากข้อมูลจะแตกต่างกันในแต่ละครั้ง

ฉันต้องย้ำหลายครั้งผ่านชุดข้อมูลที่อยู่ระหว่างพันและนับล้านระเบียนและได้รับช้าหน่อย เรากำลังพูดถึง 5-10 วินาทีเพื่อให้การคำนวณเสร็จสิ้น

แต่น่าเสียดายที่ฉันไม่ได้เลือก stack สำหรับนี้ ข่าวดีก็คือมีโปรแกรม Go ที่กำลังทำงานอยู่ถัดจาก Electron ซึ่งพูดถึง Sqlite สำหรับการจัดเก็บข้อมูลหรือดิบข้อมูลที่ยังไม่ได้

โหนด / อิเลคตรอนใช้การเรียกไปยังเซิร์ฟเวอร์ Go และเรียกข้อมูลจาก SQLite และส่งกลับค่าเหล่านี้จากนั้น JS จะทำในขั้นตอนการแยกวิเคราะห์และการวนซ้ำจากนั้นจะแสดงผลบนหน้าเว็บ

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

ตัวเลือกอื่น ๆ ก็คือการทำเช่นนี้ใน Golang นี้จะกระจายภาระงานดังนั้นโหนด / อิเลคตรอนเป็นเพียงความรับผิดชอบสำหรับตรรกะการแสดงผล ไปยังมีการจัดการที่ดีขึ้นของ concurrency ที่ฉันอาจต้องแตะลงเพื่อให้การคำนวณเหล่านี้ใช้> 2 วินาที

ใครมีข้อเสนอแนะหรืออะไรที่ฉันอาจจะหายไป?

Published inUncategorized

4 Comments

  1. anty-web anty-web

    ขึ้นอยู่กับข้อมูลเฉพาะของวิธีจัดเก็บข้อมูลสิ่งที่รูปแบบการสืบค้นคือเท่าใดขยะถูกสร้างขึ้นคำแนะนำที่สร้างขึ้น (ใน Go / โหนด) ว่าการคำนวณสามารถ parallelized
    เป็นไปได้มากที่จะคาดเดาได้โดยไม่ต้องใช้กรณีเป็นตัวแทนในทั้งสองภาษาและการเปรียบเทียบ
    แก้ไข: ฉันจะเพิ่มว่าจริงๆขึ้นอยู่กับข้อมูลเฉพาะรหัสที่คุณเขียนถ้ารหัสเป็นตัวเลขคำนวณ. ความแตกต่างเล็กน้อยในการเลือกคำแนะนำสามารถสร้างโลกแห่งความแตกต่างได้ (Go thrash Node และ vice versa) ฉันมักคิดว่าโหนดเป็นขยะสำหรับทุกอย่างยกเว้น front-end แต่ V8 สามารถสร้างโค้ดที่มีประสิทธิภาพและรวดเร็วเหลือเชื่อ

  2. anty-web anty-web

    ฉันจะใส่ codepen ของสิ่งที่ 99% ของฟังก์ชั่นอยู่
    ส่วนใหญ่ของมันสำหรับลูปบนอาร์เรย์ขนาดใหญ่ที่มีเงื่อนไขและการเปรียบเทียบภายในพวกเขา เช่น
    https://codepen.io/anon/pen/rYwRaR?editors=0010
    ดังนั้นคำถามของฉันคือว่าจะห่วงและการเรียงลำดับจะทำเร็วขึ้นใน Go หรือ Node?
    (ฉันรู้ว่าฉันสามารถเขียนโค้ดเฉพาะที่เป็น performant มากขึ้นเป็นเพียงตัวอย่างง่ายๆ)

  3. anty-web anty-web

    ในฐานะที่เป็นผู้โพสต์คนอื่น ๆ กล่าวว่าวิธีเดียวที่จะหาคอขวดของคุณอย่างแท้จริงคือการวัดเกณฑ์มาตรฐาน
    for (var i = 0; i < arr.length; i++){จะคำนวณ arr.Length ทุกครั้งที่มัน loops forผ่าน หากคุณกำหนดมันนอกวงที่เป็นvar arrayLength = arr.lengthแล้วfor (var i = 0; i < arrayLength; i++){จะเร็ว การใช้push()อาจเร็วกว่า Electron แต่การมอบหมายโดยตรงgreaterThan500[i] = arr[i]อาจเร็วกว่านี้หากคุณทดสอบ เหล่านี้อาจมีการปรับปรุงเล็ก ๆ น้อย ๆ ที่ไม่มีอะไรเทียบกับการปรับปรุงมาโครเช่นเดียวกับการเปลี่ยนเครื่องยนต์ แต่ในหลายล้านครั้งต่อวินาทีสามารถบันทึกข้อมูลนับสิบล้านเร็กคอร์ดที่จริงแล้วคุณอาจเห็นวินาทีโกน

  4. anty-web anty-web

    คุณกำลังใช้โหนดและอิเล็กตรอนสำหรับนี้คุณกังวลเกี่ยวกับความเร็วดิบ แต่คุณใช้โหนดและอีเลคตรอนและ JavaScript และคุณต้องการให้เราทำเป็นว่าคุณร้ายแรงเกี่ยวกับความเร็ว?
    ไม่ได้คุณไม่ร้ายแรงและพูดคุยกับมือสมัครเล่นเช่นตัวคุณเองเสียเวลา

Leave a Reply

Your email address will not be published.