ชื่อตัวแปรมีผลกระทบต่อประสิทธิภาพของเว็บไซต์หรือไม่


10

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


2
โปรดอธิบายคำถามของคุณ - ตัวแปรนี้อยู่ที่ไหนและมีการเขียนภาษาใด
ลุคเกรแฮม

16
คุณไม่ควรเคยเลือกชื่อตัวแปรแบบสั้นและไร้เหตุผลหากการใช้เหตุผลของคุณคือประสิทธิภาพ (น่าสงสัย) ซอร์สโค้ดมีไว้สำหรับคนอื่น ๆ ที่จะอ่านไม่ใช่เพื่อความพึงพอใจของคอมพิวเตอร์และการเพิ่มประสิทธิภาพของกล้องจุลทรรศน์
Michael JV

ฉันใช้ PHP ..
Avinash

2
... และคุณเป็นเจ้าของ xpertdeveloper.com หรือไม่
จิมจี

3
สวัสดี Avinash คุณสามารถอธิบายในคำถามของคุณเหตุผลที่คิดว่านี่อาจเป็นกรณีหรือไม่

คำตอบ:


17

ผู้ใดสามารถให้เหตุผลที่ไม่เลือกชื่อตัวแปรแบบยาวในด้านของประสิทธิภาพได้

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

โดยทั่วไปแล้วคุณต้องการใช้ชื่อตัวแปรสั้น ๆ ที่สื่อความหมายเพราะอ่านง่ายขึ้น ลองนึกภาพถ้าคุณไม่ต้องสนใจรหัสของคุณเป็นเวลา 10 ปีแล้วเข้าใจทุกอย่างอีกครั้ง คุณต้องการอ่าน "getInput" หรือ "getInputFromUserWhoInputsStringOrElseInformReaderOfError" หรือไม่? (แน่นอนเกินไป: P)

อย่างไรก็ตามมีหลายครั้งที่การใช้ชื่อที่ยาวกว่าเล็กน้อยจะเป็นประโยชน์ ตัวอย่างเช่น getBirthdayInput () จะมีความหมายมากกว่า getInput () คุณต้องการทำให้จุดง่ายขึ้น แต่การขยายใหญ่เกินไปอาจเป็นปัญหาได้เช่นกัน


6
สำหรับการอ่านชื่อยาวจะดีกว่าถ้าคุณพบ "getInputFromUserWhoInputsStringOrElseInformReaderOfError" คุณไม่จำเป็นต้องอ่านเอกสารว่าฟังก์ชั่นนี้คืออะไรถ้าคุณเจอ "getInput" ที่คุณต้องการ และหลังจากนั้น 10 ปีเอกสารจะผิดหรือไม่สมบูรณ์หรือหายไป getInputFromUserWhoInputsStringOrElseInformReaderOfError นั้นคงอยู่ได้นาน แต่การที่จะเข้าใจเกี่ยวกับความยาวนั้นจะดีกว่า (และฉันไม่สนใจว่าผู้หญิงพูดขนาดนั้นไม่สำคัญ)
Dainius

ฉันไม่เห็นด้วยในกรณีนี้ ฉันคิดว่าเพียงแค่อ่านโค้ดมันจะค่อนข้างง่ายที่จะเข้าใจว่า getInput () ทำอะไรโดยเฉพาะถ้าพิมพ์ "อินพุตไม่ถูกต้อง" หรือบางอย่างในภายหลัง มีบางครั้งที่ชื่ออีกต่อไปจะดีกว่าแม้ว่า - ฉันจะแก้ไขใน!
BlackJack

ofc มันขึ้นอยู่กับบริบท แต่ในประสบการณ์ของฉันชื่ออีกต่อไปจะดีกว่า (แต่ไม่นานเท่าที่ getInputFromUserWhoInputsStringOrElseInformReaderOfError) และบริบทมีความสำคัญอย่างยิ่งเนื่องจาก file.read () เร็วกว่า file.readAllFileAsByteArray () แต่อย่างที่ฉันบอกว่าโดยปกติแล้วชื่อ IMHO อีกต่อไปจะให้ข้อมูลเพิ่มเติม
Dainius

1
หากเอกสารไม่ถูกต้องไม่สมบูรณ์หรือขาดหายไป codebase ก็ถึงวาระแล้ว
Christopher Mahan

2
นี่คือการตอบคำถามที่ไม่ได้ถาม

16

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

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

ที่กล่าวว่าคุณอาจได้รับ miniscule (และฉันกำลังพูดด้วยกล้องจุลทรรศน์) ในการรวบรวมเวลาและการตีความ JIT ครั้งแรก แต่นั่นเป็นเพียงเพราะ parser ใช้เวลาน้อยลงในการอ่านชื่อตัวแปร นี่เป็นค่าใช้จ่ายครั้งเดียวและไม่มีนัยสำคัญทางสถิติเมื่อกังวลเกี่ยวกับประสิทธิภาพ


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

1
@ กาวินมันถูกต้องสำหรับภาษาที่ตีความเช่นกัน - "การตีความครั้งแรกของ JIT" ภาษาที่ตีความส่วนใหญ่รวบรวมในขณะที่พวกเขาดำเนินการมากกว่าบรรทัดโดยการดำเนินการสาย AFAIK
Michael K

1
ไมเคิล - ในการรวบรวมไฟล์จะต้องอ่านในหน่วยความจำก่อน กระบวนการนี้จะใช้เวลานานขึ้นอยู่กับความยาวของไฟล์ ชื่อตัวแปรอีกต่อไป = ไฟล์ที่ยาวขึ้น
Gavin Coates

คำถามถูกแท็กเป็น PHP PHP ยังไม่มี JIT ซึ่งจะเป็นฟีเจอร์ใหม่ของ 8.0 รีลีสที่วางแผนไว้สำหรับปลายปีนี้ มันจะรวบรวมรหัสไบต์ก่อนที่จะดำเนินการและ bytecode เป็นแคชบน webservers ที่จะใช้ในการร้องขอหลาย ๆ
bdsl

8

นอกจากว่าคุณกำลังใช้งานแคชรหัส (เรียกอีกอย่างว่า "ตัวเร่ง PHP") ก็มีผลกระทบแน่นอน แต่ผลกระทบนั้นอยู่ในระดับต่ำจนสามารถละเลยได้ หากคุณใช้แคชรหัสออปชั่นจะไม่มีผลกระทบใด ๆ


1
และถ้าคุณสนใจเกี่ยวกับประสิทธิภาพมากจนคุณพิจารณาว่าการย่อชื่อตัวแปรให้สั้นลงไม่กี่รอบการไม่ใช้แคชโค้ด op-code จะเป็นความผิดทางอาญา ... และควรเปลี่ยนเป็นภาษาที่คอมไพล์เช่น C
เอสเอฟ

แต่ผลกระทบที่เห็นได้ชัดคือการสะสมดังนั้นการใช้งานที่ใหญ่ขึ้น
n00dles

Zend Opcache มาพร้อมกับ PHP มาหลายปีแล้วดังนั้นทุกคนควรใช้มัน ฉันคิดว่ามันเปิดใช้งานโดยทั่วไปตามค่าเริ่มต้น
bdsl

3

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

ประสิทธิภาพที่ได้รับจากการทำเช่นนั้นจะไม่มีนัยสำคัญและอาจอยู่ในขอบเขตของเสี้ยววินาทีสำหรับสคริปต์ทั้งหมด คุณสามารถลองใช้สคริปต์ตัวอย่างได้ตลอดเวลาและใช้วิธีการกำหนดเวลาเช่นรายละเอียดที่http://www.developerfusion.com/code/2058/determine-execution-time-in-php/แต่นี่อาจจะไม่ เวลาเริ่มต้นจนกระทั่งหลังจากอ่านไฟล์นอกจากนี้เวลาดำเนินการระหว่างการลองซ้ำจะแตกต่างกันมากไปกว่าความแตกต่างระหว่างความยาวชื่อตัวแปรดังนั้นคุณจะต้องทำการลองใหม่จำนวนมากและใช้ค่าเฉลี่ยของแต่ละครั้งก่อนจึงจะสามารถ รับค่าเฉลี่ยจากระยะไกลที่มีความหมาย

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

ดังนั้นในระยะสั้นไม่ต้องกังวลเกี่ยวกับชื่อความยาวของตัวแปร แต่ให้จดจ่อกับการเขียนโค้ดที่สะอาดและมีความหมายแทน


1

อาจจะ :

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

นอกเหนือจากการลดขนาดไฟล์ JavaScript ความพยายามเพิ่มประสิทธิภาพใด ๆ สำหรับเว็บแอปพลิเคชัน / เว็บไซต์จะใช้เวลาในด้านอื่น ๆ ได้ดีขึ้น


1

ใช่มันจะ แต่ไม่ใช่ในแง่ที่คุณกำลังคิด

ด้วยชื่อตัวแปรที่ไม่ดีนักพัฒนาจะสับสนได้ง่ายในซอร์สโค้ด มันยากที่จะอ่านและเข้าใจยาก

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

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

อ่านสิ่งเหล่านี้เพื่อทราบเกี่ยวกับชื่อตัวแปรที่ดี: http://tottinge.blogsome.com/meaningfulnames

โปรดทราบว่าหากคุณรู้สึกว่าต้องการชื่อตัวแปรที่ยาวมากนั่นหมายความว่าโค้ดของคุณมีโครงสร้างที่ไม่ดี ชื่อตัวแปรจะแสดงในบริบทเสมอ: เนมสเปซ, ชื่อคลาส, ชื่อไฟล์, โฟลเดอร์, ชื่อฟังก์ชั่น ฯลฯ ดังนั้นหากชื่อต้องยาวอย่างชัดเจนนั่นหมายความว่าสิ่งที่คุณพยายามตั้งชื่อDOESN ' T อยู่ที่นี่ ในกรณีนี้ลองนึกถึงการวางรหัสนี้ในสถานที่ที่เหมาะสมหรือสร้างสถานที่นั้นถ้ายังไม่มี


0

เห็นได้ชัดว่าคำตอบคือใช่เกี่ยวกับ php

คำตอบที่บอกว่ามันจะไม่สร้างความแตกต่างไม่จำเป็นต้องถูกต้อง ตัวอย่างเช่นฉันมีสคริปต์ php ขนาดเล็กเพียงไม่กี่บรรทัด แต่จะต้องวนซ้ำประมาณ 1,950,000 ครั้งก่อนที่จะเสร็จสิ้นการทำงานดังนั้นแม้ว่าการทำงานของสคริปต์ครั้งเดียวอาจไม่ถูกสังเกตเห็นเศษส่วนของวินาทีเพิ่มขึ้นอย่างมากเมื่อ วนซ้ำหลายครั้ง


1
แต่คุณคิดผิด ล่าม php ที่ดีจะแยกรหัสเพียงครั้งเดียว พวกที่เขียนล่าม php ไม่ใช่คนโง่
gnasher729

@ gnasher729 คุณกำลังตั้งสมมติฐานว่าล่ามหรือเซิร์ฟเวอร์ทำงานอย่างไรและคุณไม่ควรทำเช่นนั้น แม้ว่ามันจะแจงเพียงครั้งเดียวต่อการรันแต่ละครั้งมันอาจแยกวิเคราะห์อีกครั้งในการรันทุกครั้งและไม่แคชการแทนคำที่แยกวิเคราะห์ (ระบบอื่นจะทำเช่นนั้น แต่คุณไม่ทราบล่วงหน้า) และโดยทั่วไปยิ่งสคริปต์มีขนาดไบต์มากเท่าใดก็ยิ่งใช้เวลาในการวิเคราะห์นานขึ้นเท่านั้น ดังนั้นโดยทั่วไปแล้ว Diorthotis ไม่ได้ผิดปกติเขา / เธออาจผิดเกี่ยวกับระบบเฉพาะเท่านั้น
Mecki

0

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

ดังนั้นเพื่อตอบคำถามของคุณ ("มีผลกับประสิทธิภาพ"): ใช่ แต่ไม่ใช่ในแบบที่คุณชอบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.