แอป HTML5 และ JS หยุดทำงานได้ดีเท่าแอพทั่วไปอย่างไร


9

จากสิ่งที่ฉันเข้าใจ

  • HTML เป็นภาษามาร์กอัปดังนั้นเนื้อหาของ XAML, XIB และสิ่งที่ Android ใช้และกรอบการพัฒนา UI ดั้งเดิมอื่น ๆ
  • JavaScript เป็นภาษาการเขียนโปรแกรมที่ใช้พร้อมกับมันเพื่อจัดการสคริปต์ฝั่งไคลเอ็นต์ซึ่งจะรวมถึงสิ่งต่าง ๆ เช่นการจัดการเหตุการณ์การตรวจสอบด้านไคลเอนต์และสิ่งอื่นใด C #, Java, Objective-C หรือ C ++ ทำในกรอบดังกล่าว
  • มีรูปแบบ MVC / MVVM ในกรอบรูปแบบเช่น Sencha's, Angular และอื่น ๆ
  • เรามี localStorage ในรูปแบบของ sqlite และ key-value store ตามกรอบอื่น ๆ และคุณมีข้อกำหนด API สำหรับเกือบทุกอย่างที่มันหายไป
  • เมื่อใดก็ตามที่เฟรมเวิร์กของ UI นั้นต้องแสดงผล UI ก็จะต้องทำการแยกวิเคราะห์มาร์กอัพและแสดงผล UI ที่คล้ายกัน

คำถามแบบแยกย่อย

  • อะไรจะหยุดทำสิ่งเดียวกันใน HTML และ JS
  • แทนที่จะมีการควบคุมผ่านเว็บหรือเบราว์เซอร์เป็นเลเยอร์ในระหว่างที่ทำไม HTML ไม่ (พร้อมกับ CSS) และ JS ไม่สามารถสร้างให้ทำงานในลักษณะเดียวกันได้
  • แม้ว่าจะมีเลเยอร์ดังนั้น. net runtime และ JVM จึงอยู่ในกรณีอื่น ๆ ที่ C ++, C ไม่ได้ถูกใช้
  • ดังนั้นให้ใช้กรณีของ Android เช่น Dalvik ทำไม Can't Chromium เป็นอีกตัวเลือก (พร้อมด้วย dalvik และ NDK) โดยที่ HTML ทำมาร์กอัพ android และ JavaScript ใช้ทำ Java อะไร

ดังนั้นคำถามคือ

แม้ว่าการใช้งานในปัจจุบันจะไม่ดี แต่ในทางทฤษฎีแล้วมันเป็นไปได้ไหมที่จะทำให้แอพพลิเคชั่นที่ใช้ HTML5 ทำงานเป็นแอพพื้นฐานอื่น ๆ บนมือถือ


1
โปรด refactor เพื่อชี้แจงซึ่งเป็นงบที่คุณเริ่มต้นและสิ่งที่เป็นคำถามที่เกิดขึ้นจริง
funkybro

คุณช่วยอธิบายสิ่งที่คุณหมายถึงโดย "หยุดทำอะไรเหมือนกันใน HTML และ JS ตัวเอง" ฉันไม่เข้าใจสิ่งที่คุณหมายถึงโดย "เหมือนกัน" - คุณได้ทำงบสี่รายการก่อนหน้านี้และฉันไม่แน่ใจว่าคุณหมายถึงอะไรในคำถามนั้น
apsillers

ถ้าฉันมีแพลตฟอร์มการพัฒนาดั้งเดิมซึ่งใช้ HTML เป็นมาร์กอัปแทนที่จะเป็นอะไรใหม่ และใช้ JS เป็นภาษาประสิทธิภาพจะดีขึ้นหรือไม่ Google ใน I / O นี้กล่าวว่าพวกเขาใช้งานได้จริงและใช้ Android บนโทรศัพท์ไม่ใช่ Chrome OS นั่นหมายความว่า FF OS ไม่ใช่แนวคิดที่ใช้งานได้จริงหรือ เป็นไปได้หรือไม่ที่แอป FFOS จะทำงานได้ดีเท่ากับแอพ Android บนแพลตฟอร์มนั้น ๆ
Amogh Talpallikar

ดูที่แอพพลิเคชั่น Windows Metro มันเป็นแอพพลิเคชั่นพื้นฐานที่ใช้ HTML สำหรับการออกแบบ GUI และ Javascript สำหรับตรรกะที่อยู่เบื้องหลัง
Philipp

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

คำตอบ:


11

เด็กชายผู้โพสต์สำหรับแอพ HTML5 นั้น LinkedIn เริ่มต้นเมื่อต้นปี 2556 ในการสัมภาษณ์ใน VentureBeatพวกเขาอธิบายว่าทำไม

ฉันคิดว่านี่เป็นส่วนที่เกี่ยวข้องกับคำถามของคุณมากที่สุด:

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

...

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

[ปรายังตั้งข้อสังเกตว่าเครื่องมือ dev และ ops สำหรับการแก้ปัญหาอย่างรวดเร็ว "ไม่มีอยู่"]

เนื่องจากสองสิ่งนี้ไม่มีตัวตนผู้คนจึงกลับไปหาคนพื้นเมือง ไม่ใช่ HTML5 ที่ยังไม่พร้อม มันคือระบบนิเวศไม่สนับสนุน ... มีเครื่องมือ แต่พวกเขากำลังเริ่มต้น ผู้คนกำลังหาข้อมูลพื้นฐาน


ฉันไม่เข้าใจ เรามีองค์กรขนาดใหญ่มาก: Google, Microsoft, Apple มุ่งเน้นไปที่การสำรอง Chrome, Safari และ IE เรามี Mozilla มุ่งมั่นที่จะ Firefox เรามี Chrome Dev Tools, Web Inspector, Firebug และ Prasad บอกว่าไม่มีเครื่องมือ?
niutech

@niutech: สมมติว่าคุณต้องการเครื่องมืออย่าง Valgrind สำหรับแอพ HTML5 มีไม่มาก
vartec

5

การขาดไลบรารีมาตรฐาน Javascript เป็นตัวยับยั้งที่น่ากลัว มีเฟรมเวิร์กที่ยอดเยี่ยมเช่น jQuery, Dojo, YUI เพื่อบอกชื่อไม่กี่คน แต่ทั้งหมดนั้นเน้นที่เลเยอร์การนำเสนอและ XHR เท่านั้น

คุณต้องการบันทึกการกำหนดค่าเครื่องมือเข้ารหัสลับอัลกอริธึมกราฟเครื่องกำเนิด UUID แผนที่ชุดต้นไม้เท็มเพลตการจัดการการพึ่งพาการจัดการวันที่การแปล / สากลสากลการดำเนินการเมทริกซ์การพึ่งพาการทดสอบหน่วยการลดแผนที่ เรื่องไม่สำคัญสำหรับภาษา JVM หรือ. NET - ใน Javascript คุณมักจะต้องทำการปรับใช้ของคุณเอง


เพิ่มการรายงานลงไป
Alan B

ECMAScript 6 เพิ่มคุณสมบัติส่วนใหญ่เหล่านี้ Google Closure Library เป็นอีกโซลูชันหนึ่ง
niutech

เชิงมุมให้วิธีการที่ดีในการประกาศในขณะนี้
Amogh Talpallikar

2

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

a += b;

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

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

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

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

ดูasm.js - เป็นชุดย่อยของ Javascript ซึ่งช่วยเพิ่มประสิทธิภาพได้ดีขึ้นมากโดยกำจัดคุณลักษณะบางอย่างของ JS โดยเฉพาะการพิมพ์แบบไดนามิก


1
คอมไพเลอร์ Javascript JIT ที่ทันสมัยสร้างรหัสเครื่องจักรพิเศษได้ทันทีสำหรับประเภทที่คุณใช้หากมีความเสถียรในการใช้งานจริงของคุณ หากคุณเขียนโค้ดด้วยวิธีที่aสามารถเป็นจำนวนเต็มสตริงหรือดับเบิลเป็นต้นคุณก็จะถูกต้อง และเบราว์เซอร์รุ่นเก่าที่ยังใช้ล่ามแน่นอนไม่มีการเพิ่มประสิทธิภาพเหล่านี้
Esailija

1
@Esailija สภาพแวดล้อม JavaScript สมัยใหม่นั้นเร็วกว่าเก่ามาก แต่พวกเขายังคงช้าลงเมื่อเปรียบเทียบกับสภาพแวดล้อมที่ทันสมัยที่พิมพ์แบบคงที่เช่น. NET, JVM, ErlangVM เป็นต้น
David Sergey

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