ค้นหาเว็บไซต์

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 สำหรับการแนะนำอย่างรวดเร็ว

บทความที่เกี่ยวข้อง