是什么使HTML5和JS应用程序无法像本机应用程序一样运行?


9

据我了解,

  • HTML是一种标记语言,XAML,XIB以及Android使用的任何内容以及其他本机UI开发框架的内容也是一种标记语言。
  • JavaScript是一种与之配合使用的用于处理客户端脚本的编程语言,其中包括事件处理,客户端验证以及C#,Java,Objective-C或C ++在各种此类框架中所做的任何其他事情。
  • 在诸如Sencha's,Angular等表单框架中提供了MVC / MVVM模式。
  • 与其他框架一样,我们以sqlite和键值存储的形式提供localStorage,并且您拥有几乎所有它缺少的API规范。
  • 每当本机UI框架必须呈现UI时,它都必须解析相似的标记并呈现UI。

问题分类

  • 在HTML和JS本身中做同样的事情会阻止什么?
  • 为什么不能使Web(以及CSS)和JS表现出相同的方式,而不是将Web控件或浏览器作为两者之间的层?
  • 即使没有层,在其他不使用C ++,C的情况下,.net运行时和JVM也是如此。
  • 因此,让我们以Dalvik之类的Android为例,为什么Chromium不能(HTML与dalvik和NDK一起)成为android标记所做的事情,而JavaScript用于Java所做的事情?

所以问题是

即使当前的实现还不够好,但是从理论上讲,是否有可能使基于HTML5的应用程序像其他本机应用程序一样专门在移动设备上运行?


1
请重构以阐明您是从哪个语句开始的,以及实际的问题是什么。
funkybro

您能否澄清“在HTML和JS本身中做同样的事情会停止什么?”的含义。我不明白您所说的“相同”是什么意思-您之前已经做了四次陈述,但不确定在该问题中指的是什么。
apsillers

如果我有一个本机开发平台,该平台使用HTML作为标记而不是任何新标记。并使用JS作为语言,性能会更好吗?谷歌在此I / O中表示,他们很实用,正在手机上使用Android,而不是Chrome OS。这是否意味着FF OS不是一个实际的概念?如果遵循所有最佳实践,FFOS应用程序是否有可能在相应平台上表现得比Android应用程序好?
Amogh Talpallikar

看一下Windows Metro应用程序。它们是本机应用程序,使用HTML进行GUI设计,并使用Javascript进行背后的逻辑处理。
菲利普

对于显示信息并基于用户动作向外部服务器发出请求的用户界面而言,HTML / JS性能通常已经足够好。它最初并没有为更多的目的而构建,但是到现在为止,它的功能更加强大。尽管如此,对于涉及更直接的设备访问,与本机代码接口或与操作系统(即通知)交互的情况,仍然没有很好的方法来使用通用Web技术。
Katana314 2013年

Answers:


11

LinkedIn是HTML5应用程序的招贴男孩,于2013年初才出生。在接受VentureBeat采访时,他们解释了原因。

我认为这是与您的问题最相关的部分:

Prasad说性能问题不会导致崩溃或使应用运行缓慢。他所说的话表明,用于移动Web的HTML5仍然有光明的前景-但前提是开发人员愿意构建支持它的工具。

...

有些事情严重缺失。一种是工具支持-拥有一个调试器,该调试器可以实际运行,性能工具可以告诉您内存耗尽的地方。如果您查看Android和iOS,则有两家非常大的公司专注于构建工具,以在生产出现问题时提供大量详细信息。在移动网络方面,要使这些桌面工具适用于移动设备确实很困难。我们正在努力解决的第二大问题是可操作性,运行时诊断信息。即使现在,当我们构建HTML5时,我们仍将其构建为客户端应用程序。它更多是一种客户端-服务器架构。…的可操作性,在将我们分发给大量用户时为我们提供信息,也没有那么多出色的工具来支持这一点。

[普拉萨德还指出,“快速存在的开发和运营工具无法解决”。

因为这两个东西不存在,所以人们回到了本地。不是说HTML5还没有准备好?这是生态系统不支持的。…有工具,但它们只是开始。人们只是在弄清楚基础知识。


我不明白 我们有许多大型公司:Google,Microsoft,Apple专注于支持Chrome,Safari和IE。Mozilla致力于Firefox。我们有Chrome开发工具,Web检查器,Firebug。普拉萨德说没有工具吗?
niutech 2014年

@niutech:假设您想要像Valgrind这样的HTML5应用程序工具。没什么
vartec

5

缺少Javascript标准库是一个可怕的阻碍。有很多很棒的框架,例如jQuery,Dojo,YUI,但它们都只专注于表示层和XHR。

您是否需要可配置的日志记录,加密工具,图形算法,UUID生成器,地图,集合,树,模板,依赖项管理,日期处理,本地化/国际化,矩阵运算,依赖项注入,单元测试,映射减少,XML处理?对于JVM或.NET语言而言,这是微不足道的-使用Javascript,您通常必须滚动自己的实现。


向其中添加报告。
艾伦B

ECMAScript 6添加了大多数这些功能。Google Closure库是另一个解决方案。
niutech 2014年

Angular现在提供了一种不错的声明方式。
Amogh Talpallikar 2014年

2

Javascript速度缓慢的原因之一是它完全缺乏类型安全性。任何时候变量都可以是任何类型。同样,大多数操作对许多不同的类型都有效,但是具有不同的语义。一个简单的术语

a += b;

对于解释器而言,这并不是一件容易的事,因为ab可以是数字或字符串。当两个都是数字时,这是算术加法。当两者均为字符串时,这是字符串连接。如果一个是字符串,一个是数字,则在执行字符串连接之前,必须先格式化数字。这些是完全不同的操作,需要对参数进行不同的解释。

根据ab的类型,a现在的类型可以是整数,双精度型或字符串型,而与之前的类型无关。

由于JS中的变量可以随时更改其类型,因此,每当调用此指令时,解释器几乎就不会对类型进行评估,以避免执行错误的操作。这需要额外的CPU周期。

使优化更加困难的其他功能是稀疏数组或垃圾回收以及事件处理程序,它们可以随时触发。

看一下asm.js-它是Javascript的一个子集,通过摆脱一些JS功能(尤其是动态类型),可以实现更好的优化。


1
如果现代Javascript JIT编译器的实际运行时使用情况稳定,它们会针对所使用的类型即时生成专用的机器代码。如果您确实a以整数,字符串或双精度等方式编码,那么您是对的。当然仍然使用解释器的旧版浏览器也没有这些优化。
Esailija 2013年

1
@Esailija现代JavaScript环境比旧环境快得多。但是与静态类型的现代环境(如.NET,JVM,ErlangVM等)相比,它们仍然较慢。–
David Sergey

@nirth是的,我不是说这个,只是说这篇文章描述了解释器/非优化的jit编译器将如何做,而且速度很慢。
Esailija
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.