Điều gì ngăn ứng dụng HTML5 và JS hoạt động tốt như ứng dụng gốc?


9

Từ những gì tôi hiểu,

  • HTML là một ngôn ngữ đánh dấu, nội dung của XAML, XIB cũng như bất cứ thứ gì Android sử dụng và các khung phát triển UI gốc khác.
  • JavaScript là ngôn ngữ lập trình được sử dụng cùng với nó để xử lý kịch bản phía máy khách, sẽ bao gồm những thứ như xử lý sự kiện, xác thực phía máy khách và bất kỳ thứ gì khác mà C #, Java, Objective-C hoặc C ++ thực hiện trong nhiều khung như vậy.
  • Có các mẫu MVC / MVVM có sẵn trong các khung biểu mẫu như Sencha's, Angular, v.v.
  • Chúng tôi có localStorage ở dạng cả sqlite và lưu trữ khóa-giá trị như các khung khác có và bạn có đặc tả API cho hầu hết mọi thứ mà nó thiếu.
  • Bất cứ khi nào một khung UI gốc phải kết xuất UI, nó phải phân tích cú pháp đánh dấu tương tự và kết xuất UI.

Phân tích câu hỏi

  • Điều gì ngăn cản việc làm tương tự trong chính HTML và JS?
  • Thay vì có một trình điều khiển web hoặc trình duyệt làm một lớp ở giữa, tại sao không thể tạo HTML (cùng với CSS) và JS để thực hiện cùng một cách?
  • Ngay cả khi có một lớp, thì thời gian chạy .net và JVM cũng vậy trong các trường hợp khác khi C ++, C không được sử dụng.
  • Vì vậy, hãy xem trường hợp của Android, như Dalvik, tại sao Chromium không thể là một lựa chọn khác (cùng với dalvik và NDK) trong đó HTML thực hiện đánh dấu Android làm gì và JavaScript được sử dụng để làm gì Java?

Vì vậy, câu hỏi là

Ngay cả khi các triển khai hiện tại không tốt, nhưng về mặt lý thuyết thì có thể khiến các ứng dụng dựa trên HTML5 hoạt động như các ứng dụng gốc khác đặc biệt trên thiết bị di động không?


1
vui lòng cấu trúc lại để làm rõ những câu bạn bắt đầu từ đâu và câu hỏi thực sự là gì.
funkybro

Bạn có thể làm rõ ý của bạn bằng cách "Điều gì ngăn cản việc làm tương tự trong chính HTML và JS không?" Tôi không hiểu ý của bạn là "giống nhau" - bạn đã đưa ra bốn câu trước đây và tôi không chắc bạn đang đề cập đến câu hỏi nào trong câu hỏi đó.
apsillers

Nếu tôi có một nền tảng phát triển riêng sử dụng HTML làm đánh dấu thay vì bất kỳ thứ gì mới. và sử dụng JS làm ngôn ngữ, hiệu suất sẽ tốt hơn? Google trong I / O này cho biết, họ đã thực tế và sử dụng Android trên điện thoại chứ không phải Chrome OS. Vậy có nghĩa là, HĐH FF không phải là một khái niệm thực tế? các ứng dụng FFOS có thể hoạt động tốt như các ứng dụng Android trên các nền tảng tương ứng nếu tất cả các thực tiễn tốt nhất được tuân theo?
Amogh Talpallikar

Hãy xem các ứng dụng Windows Metro. Chúng là các ứng dụng gốc sử dụng HTML cho thiết kế GUI và Javascript cho logic đằng sau nó.
Philipp

Hiệu suất HTML / JS nói chung là quá đủ tốt cho giao diện người dùng hiển thị thông tin và dựa trên hành động của người dùng, đưa ra yêu cầu cho máy chủ bên ngoài. Ban đầu nó không được chế tạo nhiều hơn thế, nhưng bây giờ nó có khả năng ấn tượng hơn. Tuy nhiên, đối với các tình huống liên quan đến truy cập thiết bị trực tiếp nhiều hơn, giao tiếp với mã gốc hoặc tương tác với hệ điều hành (nghĩa là thông báo), vẫn không có cách nào tốt để sử dụng các công nghệ web đa năng cho việc đó.
Katana314

Câu trả lời:


11

Cậu bé áp phích cho các ứng dụng HTML5, LinkedIn đã có nguồn gốc từ đầu năm 2013. Trong cuộc phỏng vấn trên VentureBeat, họ giải thích lý do tại sao.

Tôi nghĩ rằng đây là phần có liên quan nhất đến câu hỏi của bạn:

Prasad cho biết các vấn đề về hiệu suất không gây ra sự cố hoặc khiến ứng dụng chạy chậm. Những gì ông đã nói cho thấy rằng HTML5 cho web di động vẫn có một tương lai tươi sáng - nhưng chỉ khi các nhà phát triển sẵn sàng xây dựng các công cụ để hỗ trợ nó.

...

Có một vài điều bị thiếu nghiêm trọng. Một là hỗ trợ công cụ - có một trình gỡ lỗi thực sự hoạt động, các công cụ hiệu suất cho bạn biết nơi bộ nhớ sắp hết. Nếu bạn nhìn vào Android và iOS, có hai tập đoàn rất lớn tập trung vào các công cụ xây dựng để cung cấp nhiều thông tin chi tiết khi có sự cố trong sản xuất. Về phía web di động, để các công cụ máy tính để bàn hoạt động cho thiết bị di động thực sự khó khăn. Phần lớn thứ hai chúng ta đang vật lộn là khả năng hoạt động, thông tin chẩn đoán thời gian chạy. Ngay cả bây giờ, khi chúng tôi xây dựng HTML5, chúng tôi xây dựng nó dưới dạng một ứng dụng phía máy khách. Đó là nhiều hơn một kiến ​​trúc máy khách-máy chủ. Khả năng hoạt động của điều đó, cung cấp cho chúng tôi thông tin khi chúng tôi phân phối cho một lượng lớn người dùng, cũng không có nhiều công cụ tuyệt vời để hỗ trợ điều đó.

[Prasad cũng lưu ý rằng các công cụ dev và op để giải quyết vấn đề nhanh chóng "không tồn tại."]

Bởi vì hai thứ đó không tồn tại, mọi người trở về bản địa. Không phải là HTML5 chưa sẵn sàng; đó là hệ sinh thái không hỗ trợ nó. Có những công cụ, nhưng chúng là lúc bắt đầu. Mọi người chỉ đang tìm ra những điều cơ bản.


Tôi không hiểu Chúng tôi có các tập đoàn rất lớn: Google, Microsoft, Apple tập trung vào việc hỗ trợ Chrome, Safari và IE. Chúng tôi có Mozilla cam kết với Firefox. Chúng tôi có Chrome Dev Tools, Web Inspector, Fireorms. Và Prasad nói rằng không có công cụ?
niutech

@niutech: giả sử bạn muốn có một công cụ như Valgrind cho ứng dụng HTML5. Không có nhiều.
vartec

5

Việc thiếu một thư viện chuẩn Javascript là một chất ức chế khủng khiếp. Có các khung công tác tuyệt vời như jQuery, Dojo, YUI, để đặt tên cho một số ít, nhưng tất cả chúng chỉ tập trung vào lớp trình bày và XHR.

Bạn có muốn ghi nhật ký cấu hình, công cụ mã hóa, thuật toán đồ thị, trình tạo UUID, Bản đồ, Bộ, Cây, mẫu, quản lý phụ thuộc, thao tác ngày, bản địa hóa / quốc tế hóa, hoạt động ma trận, tiêm phụ thuộc, kiểm tra đơn vị, giảm bản đồ, xử lý XML? Tầm thường đối với các ngôn ngữ JVM hoặc .NET - trong Javascript, bạn thường phải thực hiện triển khai của riêng mình.


Thêm báo cáo vào đó.
Alan B

ECMAScript 6 bổ sung phần lớn các tính năng này. Thư viện đóng cửa của Google là một giải pháp khác.
niutech

Angular cung cấp cách khai báo tốt đẹp bây giờ.
Amogh Talpallikar

2

Một lý do khiến Javascript chậm là do thiếu an toàn kiểu. Bất kỳ biến có thể là bất kỳ loại bất cứ lúc nào. Ngoài ra, hầu hết các hoạt động là hợp lệ với nhiều loại khác nhau, nhưng có ngữ nghĩa khác nhau . Một thuật ngữ đơn giản

a += b;

không phải là tầm thường đối với trình thông dịch, bởi vì abcó thể là số hoặc chuỗi. Khi cả hai là số, đó là một bổ sung số học. Khi cả hai là chuỗi, đây là một chuỗi nối. Khi một là một chuỗi và một là một số, số phải được định dạng trước khi thực hiện nối chuỗi. Đây là những hoạt động hoàn toàn khác nhau đòi hỏi phải diễn giải các đối số khác nhau.

Tùy thuộc vào loại ab, loại abây giờ có thể là số nguyên, gấp đôi hoặc Chuỗi, bất kể đó là loại nào trước đây.

Vì các biến trong JS có thể thay đổi kiểu của chúng bất cứ lúc nào, nên trình thông dịch hầu như không thể đánh giá các kiểu bất cứ khi nào lệnh này được gọi để tránh thực hiện thao tác sai. Điều này đòi hỏi các chu kỳ CPU bổ sung.

Các tính năng khác làm cho việc tối ưu hóa khó hơn nhiều là mảng thưa thớt hoặc bộ xử lý rác và bộ xử lý sự kiện có thể kích hoạt bất cứ lúc nào.

Hãy xem asm.js - Đây là một tập hợp con của Javascript cho phép tối ưu hóa tốt hơn nhiều bằng cách loại bỏ một số tính năng JS, đặc biệt là gõ động.


1
Trình biên dịch Javascript JIT hiện đại tạo mã máy chuyên dụng nhanh chóng cho các loại bạn đang sử dụng nếu chúng ổn định trong thời gian sử dụng thực tế của bạn. Nếu bạn thực sự mã hóa theo cách acó thể là số nguyên, chuỗi hoặc gấp đôi, thì bạn đã đúng. Và các trình duyệt cũ hơn vẫn sử dụng trình thông dịch tất nhiên cũng không có những tối ưu hóa này.
Esailija

1
@Esailija Môi trường JavaScript hiện đại nhanh hơn nhiều so với môi trường cũ. Nhưng chúng vẫn chậm hơn khi so sánh với các môi trường hiện đại được gõ tĩnh, chẳng hạn như .NET, JVM, ErlangVM, v.v.
David Sergey

@nirth yeah Tôi không nói điều đó, chỉ nói rằng bài đăng này mô tả cách trình biên dịch jit phiên dịch / không tối ưu hóa sẽ làm điều đó và điều đó thực sự chậm.
Esailija
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.