แบบแผนการตั้งชื่อ Javascript


12

ฉันมาจากพื้นหลัง Java และฉันใหม่กับ JavaScript ฉันสังเกตเห็นวิธีการจาวาสคริปต์หลายวิธีโดยใช้ชื่อพารามิเตอร์อักขระเดียวเช่นในตัวอย่างต่อไปนี้

doSomething(a,b,c)

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

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

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


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

4
ฉันมักจะเห็นนักพัฒนาโต้เถียงเกี่ยวกับข้อดีของชื่อตัวแปรแบบสั้น อย่าฟังพวกเขา นี่เป็นข้อแก้ตัวสำหรับ "ฉันตัวเล็กเกินไปที่จะประดิษฐ์ชื่อที่ดี" หรือ "ฉันขี้เกียจเกินกว่าจะพิมพ์ตัวละครหลายตัว"
Doc Brown

@DocBrown: แม้ฉันไม่ชอบ เนื่องจากฉันไม่ใช่ผู้เชี่ยวชาญใน JavaScript ต้องการทราบวิธีปฏิบัติที่ดีที่สุด
ManuPK

ในตอนท้ายของวันกำลังพูดถึงข้อมูลเพิ่มเติม 50-100KB เพื่อใช้ชื่อเมธอดที่มีความหมาย? หาก 100KB ทำให้เกิดปัญหาความเร็วก็ไม่คุ้มค่าที่จะพยายามแก้ปัญหาเพราะผู้ใช้ไม่มากพอที่จะประสบปัญหานั้น
Ramhound

คำตอบ:


26

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

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

คุณในฐานะนักพัฒนาไม่ควรสนใจเกี่ยวกับกระบวนการ minification / obfuscation เขียนรหัสของคุณเพื่อให้สามารถอ่านได้มีความหมายมีเอกสารที่ดีและมีโครงสร้างที่ดี จากนั้นถ้าคุณใส่ใจเรื่องประสิทธิภาพ (ไม่บังคับอย่าลืม!) แนะนำ minifier / obfuscator ในกระบวนการปล่อยของคุณเพื่อย่อขนาดโค้ด (ลบ white space, บรรทัดใหม่, คอมเม้นท์อื่น ๆ ) และทำให้ยุ่งเหยิง (เช่น shorten ตัวแปร ชื่อ) เป็นบทความที่ดีซึ่งจะอธิบาย obfuscation VS minification สามารถพบได้ที่นี่

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

เพื่อความสมบูรณ์เบราว์เซอร์ (มือถือ) บางตัวมีตัวเลือกในการใช้เซิร์ฟเวอร์มิดเดิลแวร์ซึ่งขัดขวางการตอบสนองของทรัพยากรที่คุณร้องขอและบีบอัดให้คุณ (ซึ่งอาจรวมถึงการย่อขนาดของไฟล์ JavaScript) โปรดทราบว่าการบีบอัดข้อมูลจะทำบนเซิร์ฟเวอร์ (เช่นก่อนที่คุณจะดาวน์โหลดหน้าเว็บ) ดังนั้นประโยชน์ที่เป็นไปได้ของการดาวน์โหลดไฟล์ขนาดเล็กมากกว่าในเบราว์เซอร์เมื่อคุณดาวน์โหลดไฟล์แล้ว (ตามที่แนะนำในคำถาม) เบราว์เซอร์มือถือเช่น Opera Mini และ Google Chrome เวอร์ชันใหม่กว่า (บน iOS อย่างน้อยไม่แน่ใจเกี่ยวกับ Android) สำหรับข้อมูลเพิ่มเติมโปรดดูที่นี่


11

ไม่เบราว์เซอร์บางตัวจะทำให้ JavaScript สั้นลงโดยอัตโนมัติเพื่อช่วยในเรื่องประสิทธิภาพ

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

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

หากคุณต้องการการอ้างอิงถึงการประชุมที่ดี JavaScript เข้ารหัสบางอย่างผมขอแนะนำให้ใช้เหล่านี้


2

ไม่ต้องกังวลกับขนาดไฟล์ก่อนกำหนด แม้ว่าจะเป็นเรื่องที่น่ากังวลอยู่เสมอ แต่การอ่านและการบำรุงรักษานั้นสำคัญกว่า

กับที่กล่าวว่าคุณควรอาจจะ servining minified (เช่นผ่านทางยูอิคอมเพรสเซอร์ ) รุ่นสคริปของคุณอยู่แล้ว

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


1

ฉันทำงานกับ JavaScript เป็นเวลานานมาก

เรามีมาตรฐานการตั้งชื่อที่คุณต้องใช้สัญลักษณ์ฮังการีสำหรับตัวแปรทั้งหมด

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

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


5
สัญลักษณ์ฮังการี นั่นเป็นโรงเรียนเก่า สัญกรณ์ฮังการีเป็น relique การพัฒนาเก่าและในเวลาไม่แนะนำอีกต่อไป
Smokefoot

2
ฉันมักจะใช้มันเล็กน้อย แต่เฉพาะค่าที่ห่อด้วย jquery ที่ฉันจะเริ่มต้นด้วย $ ปัญหาเกี่ยวกับสัญกรณ์ฮังการีคือผู้คนเคยบอกให้คุณพิมพ์ในแง่ของ "int" กับ "String" และไม่ใช่ในแง่ของความหมายของโปรแกรม
Zachary K

"โดยเฉพาะอย่างยิ่งเมื่อคุณมีไฟล์จาวาสคริปต์ขนาดใหญ่ที่คุณต้องการค้นหาข้อมูล" -- ฉันได้ยินคุณ. แต่สัญกรณ์ฮังการีเป็นเพียงปูนปลาสเตอร์เกาะ ... มันจะไม่ช่วยในระยะยาวมันจะสับสนเมื่อคุณต้องการเปลี่ยนประเภทของบางอย่าง แต่ไม่มีเวลาเปลี่ยนคำนำหน้าตัวแปรทั้งหมด อัตโนมัติทุกอย่างที่ GWT เข้ามาสู่ IMO ของตนเอง
funkybro

1
ฉันไม่จำเป็นต้องซื้อโดยใช้สัญลักษณ์เป็น "ทำลาย" ลักษณะที่พิมพ์ออกมาอย่างหลวม ๆ ของภาษา แน่นอนว่าคุณจะต้องเปลี่ยนชื่อเมื่อคุณเปลี่ยนประเภท แต่นั่นจะเป็นสิ่งที่ดีที่จะทำต่อไปเพื่อให้คุณสามารถติดตามสิ่งที่คุณกำลังทำอยู่ ฉันรู้ว่ามีแง่มุมต่าง ๆ ที่น่าเกลียด แต่ถ้าคุณเคยทำงานในโครงการขนาดใหญ่ (ฉันกำลังพูดถึงหลายร้อยหลายพันบรรทัดของรหัส) โครงการในภาษาที่พิมพ์หลวม ๆ มันสามารถช่วยให้คุณหาทางของคุณได้เร็วขึ้นในบางกรณี บอกว่ามันเป็นวันที่ ฯลฯ จริง ๆ แล้วไม่ได้พูดถึงประเด็นหลักที่ OP พยายามจะทำให้แย่ลง
Alan Delimon

1
สัญกรณ์ฮังการีเป็นหนึ่งในสิ่งเหล่านั้นที่ผู้คนเลิกทันทีโดยไม่เข้าใจว่าทำไม มันพบว่ามันเป็นวิธีที่อยู่ในประเภทเดียวกับgotoที่ผู้คนไม่มีเหตุผลซ้ำมนต์'ใช้ Dont ข้ามไป ... ไม่ได้ใช้ข้ามไป ... ความจริงก็คือมันเป็นเพียงเครื่องมือในชุดเครื่องมือของคุณ เช่นเดียวกับเครื่องมือใด ๆ ที่มีสถานการณ์ที่มีประโยชน์และสถานการณ์ที่ไม่มีประโยชน์มาก (หรือเป็นอันตราย) มันเหมือนมีใครบางคนมีประสบการณ์ที่ไม่ดีพยายามที่จะเห็นชิ้นส่วนของไม้ด้วยค้อนแล้วประกาศว่า'อย่าใช้ค้อนเคยเห็นดีขึ้นมาก!' . การกวาดภาพรวมเป็นสิ่งที่ผิดเสมอ
MattDavey

1

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

  • functionNamesLikeThis เช่น getCashbackData () {}
  • variableNamesLikeThis เช่น var alertInterval = 10;
  • ClassNamesLikeThis เช่น var CustomerOrder = {getOrderLines: function () {}}
  • EnumNamesLikeThis เช่น var ColorOfChoice = {White: "#FFFFFF"}
  • methodNamesLikeThis เช่น var CustomerOrder = {getOrderLine: function () {}}
  • SYMBOLIC_CONSTANTS_LIKE_THIS เช่น var EPOCH_UNIX = "01011970"

คุณมีอะไรเพิ่มเติมที่จะเพิ่มจากนั้นเป็นลิงค์จำนวนมาก? ฉันหมายความว่าคุณไม่ได้อธิบายว่าใครคือดักลาสคร็อคฟอร์ด
Ramhound

0

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

  1. ค้นหา IDE ที่ดีที่สุดสำหรับความต้องการในการพัฒนาส่วนบุคคลของคุณที่มีคุณสมบัติการเติมข้อมูลอัตโนมัติและคุณสมบัติที่ดีเช่น Intana, Netbeans, eclipse (ฟรีทั้งหมด) หรือผลิตภัณฑ์เชิงพาณิชย์อื่น ๆ (ถ้าฉันมีเกมฟรี) ดูผลิตภัณฑ์ของ JetBrains)
  2. เขียนโค้ดของคุณในลักษณะที่แสดงความคิดเห็นเกินความจำเป็น นั่นหมายถึงแทนที่จะเขียน

    getXy(e) { return [e.pageX, e.pageY ] }

    ซึ่งอาจหมายถึงอะไรจริงๆ (โดยเฉพาะอย่างยิ่งในภาษาที่พิมพ์อย่างบ้าคลั่งอย่าง js;) คุณสร้างโค้ดขึ้นมาเอง

    getPageCoordinatesFromEvent(event) { 
        return [event.pageX, event.pageY ];
    }
    

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

  3. รับหนังสือ "Clean Code" โดย Robert C.Martin และหรือ "Pragmatic Programmer" โดย Hunt / Thomas และไม่เคยถามคำถามแบบนี้อีกเลย - คุณจะยุ่งมากกับการทำงานบนเซิร์ฟเวอร์รวมอย่างต่อเนื่องเพื่อทำการทดสอบที่น่าเบื่อโดยอัตโนมัติ -, & สร้างส่วนต่าง ๆ ของกระบวนการพัฒนา (รวมถึงการลดขนาด) และมุ่งเน้นไปที่ส่วนที่สนุกสนานเขียนโค้ดที่เข้าใจได้ชัดเจนว่าทำสิ่งที่ยอดเยี่ยม!

ป.ล. หากคุณต้องการเพิ่มความเร็วด้วยการพัฒนาโค้ดจาวาสคริปต์ที่ทันสมัยลองดูที่หนังสือ "Mr. jQuery" ของ Resig ที่ John เกี่ยวกับ "Pro Javascript Techniques" ในทันทีหรือร่วมกับข้างต้น

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