javascript - ประสิทธิภาพของ TypeScript (asm.js, ตัวคอมไพเลอร์ closure) และภาระเพิ่มเติม
ฉันกำลังพิจารณาที่จะใช้ TypeScript ร่วมกับ MVC ฝั่งไคลเอนต์ (มีแนวโน้มมากที่สุดคือ Backbone.js + Marionette.js หรือ Ember.js) สำหรับโปรเจกต์ในอนาคต และด้วยเหตุนี้จึงมีคำถามบางข้อที่เกี่ยวข้องกับประสิทธิภาพและการปรับแต่ง:
ผลลัพธ์ของ
TypeScriptเมื่อเปรียบเทียบกับ JavaScript พื้นฐานในด้านประสิทธิภาพเป็นอย่างไร?เนื่องจาก
asm.jsเป็นชุดย่อยของ JavaScript ดังนั้นจะเป็นไปได้ไหมที่จะเปลี่ยนโค้ดTypeScriptให้เป็นโค้ดasm.js? ถ้าเป็นไปได้ สามารถทำได้แล้วหรือยัง?เป็นไปได้และยังมีประโยชน์ในการสร้างบิลด์ของโปรเจกต์ AMD ที่ใช้
TypeScriptกับGoogle Closure compilerหรือไม่?โดยเฉลี่ย
TypeScriptเพิ่มขนาดไฟล์มากเท่าไหร่?เมื่อใช้ไลบรารีน้ำหนักเบาอย่าง
Backbone.jsในโปรเจกต์ขนาดเล็กเป็นตัวอย่าง การใช้TypeScriptมีเหตุผลในด้านขนาดไฟล์หรือไม่?
ฉันชอบประโยชน์เพิ่มเติมของ TypeScript แต่ฉันไม่อยากเสียประสิทธิภาพเพื่อสไตล์การเขียนโค้ดและการพิมพ์ชนิดข้อมูล
บทความ/หนังสือเกี่ยวกับการใช้ TypeScript ในโครงการขนาดใหญ่ โดยเฉพาะเกี่ยวกับประสิทธิภาพ การปรับแต่ง และการสร้าง จะได้รับการต้อนรับอย่างมาก !
ขอขอบคุณล่วงหน้า!
คำตอบ #1
เราประเมินและทดสอบ TypeScript อย่างละเอียดในทีมของเราและทีมอื่นก็ใช้งานมันอยู่แล้ว ดังนั้นนี่คือประสบการณ์ของฉัน:
- TypeScript เป็นซูเปอร์เซ็ตของ JavaScript และโดยส่วนใหญ่จะแปลงตรงไปยัง JavaScript แบบ 1:1 โดยไม่ทำให้ประสิทธิภาพลดลงอย่างมีนัยสำคัญ ดังนั้นถ้าคุณรู้วิธีเขียน JavaScript อย่างมีประสิทธิภาพ คุณก็รู้วิธีเขียน TypeScript อย่างมีประสิทธิภาพ หนึ่งในฟีเจอร์ที่ไม่ค่อยมีประสิทธิภาพคือการสืบทอด (inheritance) ซึ่งถูก "เลียนแบบ" โดยใช้ JavaScript prototypes และสร้างโค้ดมากกว่าที่ปกติจะเขียนใน JavaScript ดังนั้นควรใช้การสืบทอดด้วยความระมัดระวัง คุณสามารถดู JavaScript ที่สร้างขึ้นเพื่อดูว่าการสร้างของคุณถูกคอมไพล์อย่างมีประสิทธิภาพเพียงพอสำหรับกรณีของคุณหรือไม่
- การคอมไพล์ไทป์สคริปต์ไปเป็น asm.js เป็นปัญหาเดียวกับการคอมไพล์จาวาสคริปต์ไปเป็น asm.js - คุณจะต้องจำลองคุณสมบัติที่ asm.js ขาดเมื่อเทียบกับจาวาสคริปต์เต็ม... หากคุณต้องการบางส่วนใน asm.js คุณอาจต้องเขียนมันเองหรือคอมไพล์จากภาษาที่เหมาะสมกว่าที่มีความยืดหยุ่นน้อยกว่า โดยใช้ emscripten และอื่น ๆ
- TypeScript มีการสนับสนุน AMD บ้าง แต่ฉันไม่สามารถพูดถึงการสนับสนุนของ Google Closure ได้... เนื่องจากมันพยายามทำสิ่งที่คล้ายกันแต่ต่างกันมาก (ประเภทและข้อมูลเมตาในคอมเมนต์แทนที่จะเป็นไวยากรณ์ใหม่) ฉันไม่คิดว่าพวกมันเข้ากันได้ดีพอที่จะใช้ประโยชน์สูงสุดจากทั้งสองอย่าง...
- ขนาดไฟล์ไม่ใช่ปัญหาจริง ๆ มันคล้ายกับขนาดไฟล์ของ JavaScript ที่อ่านได้ เว้นแต่คุณจะใช้การสืบทอดบ่อย ๆ
- การใช้ TypeScript กับ Backbone และไลบรารีอื่น ๆ มีข้อดีข้อหนึ่งเมื่อเทียบกับ JavaScript; ไลบรารีที่เป็นที่นิยมส่วนใหญ่มีไฟล์นิยามประเภทสำหรับ TypeScript อยู่แล้ว ดังนั้นคุณจะได้การเติมข้อความอัตโนมัติและการตรวจสอบประเภทเกือบจะฟรี ขนาดไฟล์ที่ต่างกันไม่ใช่ปัญหาจริงเมื่อเทียบกับ JavaScript ที่เขียนได้ดี
TypeScript ยังค่อนข้างใหม่และมีหลายสิ่งที่เราต้องการ (JSLint, การครอบคลุมโค้ด, TDD, เครื่องมือ BDD, ฯลฯ) ยังขาดอยู่ในเวลานั้น นอกจากนี้ ยังมีข้อบกพร่องหลายอย่างในคอมไพเลอร์ (ที่ได้รับการแก้ไขแล้วภายหลัง) ดังนั้นเราจึงไม่ได้เลือกใช้มัน แต่ไม่มีเหตุผลใดจากรายการของคุณที่ทำให้เราตัดสินใจไม่ใช้จริง ๆ...
อัปเดต: เพื่อดูศักยภาพของ TypeScript คุณสามารถดูที่ Visual Studio Online "Monaco". สิ่งที่พวกเขาทำที่นั่นนั้นค่อนข้างน่าประทับใจ ดู Getting started with TypeScript สำหรับการแนะนำอย่างรวดเร็ว