ฉันมักจะเห็นคำพูดนี้ใช้ในการพิสูจน์รหัสที่ไม่ดีอย่างเห็นได้ชัดว่าในขณะที่ประสิทธิภาพของมันไม่ได้ถูกวัดก็อาจจะทำได้เร็วขึ้นค่อนข้างง่ายโดยไม่ต้องเพิ่มขนาดรหัสหรือทำให้การอ่านง่ายขึ้น
โดยทั่วไปฉันคิดว่าการเพิ่มประสิทธิภาพขนาดเล็ก แต่เนิ่นๆอาจเป็นความคิดที่ไม่ดี อย่างไรก็ตามการปรับให้เหมาะสมที่สุดของแมโคร (สิ่งต่าง ๆ เช่นการเลือก O (log N) อัลกอริธึมแทน O (N ^ 2)) มักจะคุ้มค่าและควรทำตั้งแต่เนิ่น ๆ เนื่องจากมันอาจสิ้นเปลืองในการเขียนอัลกอริธึม O (N ^ 2) และ จากนั้นทิ้งมันลงไปอย่างสมบูรณ์ในแนวทาง O (log N)
หมายเหตุคำที่อาจเป็น : หากอัลกอริทึม O (N ^ 2) นั้นง่ายและสะดวกในการเขียนคุณสามารถโยนมันทิ้งในภายหลังโดยไม่รู้สึกผิดมากถ้ามันช้าเกินไป แต่หากอัลกอริทึมทั้งสองมีความซับซ้อนคล้ายกันหรือหากปริมาณงานที่คาดหวังมีขนาดใหญ่จนคุณรู้ว่าคุณต้องการความเร็วที่เร็วกว่าการปรับให้เหมาะสมก่อนหน้านั้นเป็นการตัดสินใจทางวิศวกรรมเสียงที่จะลดปริมาณงานทั้งหมดของคุณในระยะยาว
โดยทั่วไปแล้วฉันคิดว่าแนวทางที่ถูกต้องคือการค้นหาว่าตัวเลือกของคุณคืออะไรก่อนที่คุณจะเริ่มเขียนโค้ดและเลือกอัลกอริทึมที่ดีที่สุดสำหรับสถานการณ์ของคุณ ที่สำคัญที่สุดวลี "การเพิ่มประสิทธิภาพก่อนวัยอันควรเป็นรากฐานของความชั่วร้ายทั้งหมด" ไม่มีข้อแก้ตัวสำหรับความไม่รู้ ผู้พัฒนาอาชีพควรมีแนวคิดทั่วไปเกี่ยวกับค่าใช้จ่ายในการดำเนินการทั่วไป พวกเขาควรรู้เช่น
- สตริงนั้นมีราคาสูงกว่าตัวเลข
- ภาษาแบบไดนามิกนั้นช้ากว่าภาษาที่พิมพ์แบบคงที่
- ข้อดีของรายการ array / vector บนรายการที่เชื่อมโยงและในทางกลับกัน
- เมื่อใดควรใช้ hashtable เมื่อใดควรใช้แผนที่ที่เรียงลำดับและเมื่อใดควรใช้ heap
- (ถ้าทำงานร่วมกับอุปกรณ์พกพา) "double" และ "int" มีประสิทธิภาพการทำงานที่คล้ายคลึงกันบนเดสก์ท็อป (FP อาจเร็วกว่า) แต่ "double" อาจช้ากว่าร้อยเท่าบนอุปกรณ์พกพาระดับต่ำที่ไม่มี FPU
- การถ่ายโอนข้อมูลผ่านอินเทอร์เน็ตนั้นช้ากว่าการเข้าถึง HDD, HDD นั้นช้ากว่า RAM อย่างมากมาย RAM ช้ากว่าแคชและรีจิสเตอร์ L1 มากและการดำเนินการทางอินเทอร์เน็ตอาจบล็อกอย่างไม่มีกำหนด (และล้มเหลวได้ตลอดเวลา)
และนักพัฒนาควรคุ้นเคยกับกล่องเครื่องมือของโครงสร้างข้อมูลและอัลกอริธึมเพื่อให้พวกเขาสามารถใช้เครื่องมือที่เหมาะสมสำหรับงานได้อย่างง่ายดาย
การมีความรู้มากมายและกล่องเครื่องมือส่วนตัวช่วยให้คุณสามารถปรับได้อย่างง่ายดาย การใช้ความพยายามอย่างมากในการเพิ่มประสิทธิภาพที่อาจไม่จำเป็นนั้นเป็นความชั่วร้าย (และฉันยอมรับที่จะตกหลุมพรางนั้นมากกว่าหนึ่งครั้ง) แต่เมื่อการปรับให้เหมาะสมนั้นง่ายเหมือนการเลือกชุด / hashtable แทนที่จะเป็นอาร์เรย์หรือเก็บรายการตัวเลขใน double [] แทน string [] แล้วทำไมล่ะ ฉันอาจจะไม่เห็นด้วยกับ Knuth ที่นี่ฉันไม่แน่ใจ แต่ฉันคิดว่าเขากำลังพูดถึงการเพิ่มประสิทธิภาพระดับต่ำในขณะที่ฉันกำลังพูดถึงการเพิ่มประสิทธิภาพระดับสูง
โปรดจำไว้ว่าคำพูดนั้นมีต้นกำเนิดมาจากปี 1974 ในปี 1974 คอมพิวเตอร์ช้าและพลังงานในการคำนวณมีราคาแพง ฉันคิดว่านั่นเป็นสิ่งที่ Knuth กำลังผลักดัน เขาไม่ได้พูดว่า "ไม่ต้องกังวลกับการแสดงเลย" เพราะในปี 2517 นั้นจะเป็นการพูดคุยที่บ้าคลั่ง Knuth อธิบายวิธีเพิ่มประสิทธิภาพ; กล่าวโดยย่อควรมุ่งเน้นที่คอขวดและก่อนที่คุณจะทำเช่นนั้นคุณจะต้องทำการวัดเพื่อค้นหาคอขวด
โปรดทราบว่าคุณไม่สามารถหาคอขวดได้จนกว่าคุณจะเขียนโปรแกรมเพื่อวัดซึ่งหมายความว่าต้องทำการตัดสินใจเกี่ยวกับประสิทธิภาพบางอย่างก่อนที่จะมีสิ่งใดมาวัด บางครั้งการตัดสินใจเหล่านี้อาจเปลี่ยนแปลงได้ยากหากคุณเข้าใจผิด ด้วยเหตุนี้จึงเป็นเรื่องดีที่มีความคิดโดยทั่วไปเกี่ยวกับสิ่งที่มีค่าใช้จ่ายเพื่อให้คุณสามารถตัดสินใจได้อย่างสมเหตุสมผลเมื่อไม่มีข้อมูลที่ยาก
จะเพิ่มประสิทธิภาพได้เร็วแค่ไหนและต้องกังวลเกี่ยวกับประสิทธิภาพมากน้อยเพียงใดขึ้นอยู่กับงาน เมื่อเขียนสคริปต์ที่คุณจะเรียกใช้เพียงไม่กี่ครั้งการกังวลเกี่ยวกับประสิทธิภาพโดยทั่วไปจะเป็นการเสียเวลาโดยสิ้นเชิง แต่ถ้าคุณทำงานให้กับ Microsoft หรือ Oracle และคุณกำลังทำงานในห้องสมุดที่นักพัฒนาอื่น ๆ หลายพันคนกำลังจะใช้ในหลาย ๆ วิธีมันอาจจ่ายเพื่อเพิ่มประสิทธิภาพให้กับนรกเพื่อให้คุณสามารถครอบคลุมความหลากหลายทั้งหมด ใช้กรณีได้อย่างมีประสิทธิภาพ ถึงแม้ว่าความต้องการประสิทธิภาพจะต้องมีความสมดุลกับความต้องการในการอ่านการบำรุงรักษาความสง่างามความสามารถในการขยายและอื่น ๆ