问题 为什么Javascript在iPhone上运行得如此之慢?


我一直在研究为iPhone编写应用程序。我真的很喜欢这个样子 PhoneGap的 这基本上允许您在应用程序中包含一个网页。我的技能主要是在HTML / Javascript中,因此这个工具可以让我充分利用我的技能,而无需花费很多时间学习如何为iPhone本地编写应用程序。

我一直在我的iPhone上为Javascript做一些测试,还有一些 看似简单 例子运行缓慢。真的很慢。不幸的是,这对我的任务来说是个大问题!

有什么工作吗?如果我想做任何有趣的事情,我将不得不写一个“适当的”应用程序?

解释为什么Apple似乎创建了如此糟糕的Javascript实现也很有意思(可能会赚更多的钱?更少的网络应用程序=商店中更多的应用程序?)

参考

http://ajaxian.com/archives/ipad-javascript-shockingly-slow


11456
2017-07-22 10:10


起源

如果你想编写在移动处理器上快速运行的代码,是的,你要么必须用非解释性语言编写代码,要么等待几年,直到技术赶上你头脑中令人兴奋的图片。 - Paul D. Waite
我希望你不要对我脑子里的'令人兴奋的照片'进行讽刺! - Tom Gullen
一点点。您似乎认为JavaScript在手机上的执行速度更快。我怀疑苹果公司有很大的动力让iPhone上的网页浏览效果不佳。他们在应用程序背后投入了大量营销,但他们也将iPhone作为互联网销售。他们并不缺乏竞争对手。 - Paul D. Waite
与传统计算机相比,它很慢。但是由于它开始发热,我不能在夏天将我的“笔记本电脑”放在我的膝盖上,而你必须在阳光下留下一个正在运行的iPad以使其过热。这都是权衡取舍。 iOS是我见过的第一个商业尝试,看到你可以制作一个现代操作系统,同时仍然保持有用。目前,这意味着JavaScript速度较慢。 - Paul D. Waite
如果你在Objective-C中构建你的应用程序,那么Javascript的重要性就是零 - 这对于所有意图和目的都是'正确'的方式。 iPhone非常强大。你见过它渲染OpenGL吗?如果您使用正确的工具来完成工作,一切都将以您希望的方式运行。如果你想让它符合你自己的理想,它就不会“有能力”。如果你需要赢得一场比赛,你可能不应该尝试使用拖拉机只是因为你是一个农民而且这是你所知道的。只是在说' ;-) - Matt Long


答案:


Javascript并不是特别慢,但DOM非常慢。
我认为它与桌面浏览器相同,但放大了。
如果无法优化,我会首先检查所有DOM操作。

另一种选择是使用模板引擎。
主要的DOM操作是通过innerHTML注入完成的,即使在移动设备上也是如此。

我们已经构建了我们的Web应用程序的移动版本,我们使用  (我们创建的一个开源JS库)从JSON数据中呈现HTML,并且它非常敏感。

我们采用HTML5方式(不是本机方式)但我认为生成HTML可以在PhoneGap中包装时以相同的方式完成。


9
2017-07-22 11:22





我认为Apple没有为Mobile Safari创建任何特殊的Javascript实现。可能与桌面Safari相同或非常相似。

这些设备很小并且具有严格的功率限制,因此CPU很慢。


3
2017-07-22 10:18





显然,由于安全功能,iOS不会对JavaScript进行JIT编译(与Android不同): http://daringfireball.net/linked/2010/07/22/android-ios-js-benchmarks

关于DOM访问的好处是问题:我不知道这些基准测试多少测试DOM操作。


2
2017-07-22 22:40





@Rudiger:只是一个想法 - 自“8年前”以来,台式计算机速度的许多改进部分是通过使用多个处理器来实现的。 Javascript是单线程的,因此可能无法利用这样的多处理器。是的,我知道浏览器可以利用它,并且将其他处理器放在其他处理器上可以为Javascript线程提供更多的CPU能力,但我有一个应用程序,主要是原始的Javscript内部处理,其中主要的事情是正在进行的是搜索和数组操作。

那么,在将桌面电源与移动处理器电源进行比较时,就我的目的而言,放慢速度可能不会那么糟糕?我目前在Safari上使用单处理器以六年历史的笔记本电脑上以非常可接受的速度运行。所以我认为iPhone或iPad上的Safari对我来说可能不会那么糟糕。你认为这是合理的吗?


0
2018-01-08 05:40





实际上,我认为Apple尽可能地保持javascript不受Iphone的影响。他们似乎想要通过他们的appstore通过要求本地运行的应用程序来管理事物..我很好奇,如果javascript也很慢Android手机,(我之前从未使用过一款)..如果不是那么我觉得有点奇怪的是Iphone会慢慢用javascript,无论如何,它们已经失去了市场份额而且必须解决问题在某些方面,我确信,我认为人们正在抓住Apple的游戏和白痴试图微观管理一切,因为移动设备领域出现了更多合法的替代品。


-1
2017-07-22 10:23



绝对的笨蛋。处理器很慢。 JavaScript被解释。每次发布时,Apple都会在iPhone上加快JavaScript速度(请参阅 daringfireball.net/2008/07/webkit_performance_iphone 对于2.0和 waynepan.com/2009/03/24/iphone-30-javascript-performance 对于3.0)。据我了解,Android 2.2具有更好的JavaScript性能(arstechnica.com/gadgets/news/2010/07/...),但你也不能购买任何运行2.2的手机。 - Paul D. Waite
这是一堆垃圾。与移动处理器是8年前台式机速度的事实无关,尽管使用更复杂的OpenGL图形和更多网络。 Android使用几乎相同的Safari实现称为Gecko引擎,它与其他人相比速度极快,而且它们是开源项目的一个重要贡献者,都有点烦人。从我所看到的Googles尝试,现在苹果试图让Gecko更快的是在它们准备好之前渲染项目并且imo未通过Acid 3测试 - Rudiger
@Rudiger Gecko与苹果,谷歌,Safari或Android完全没有任何关系 - 我想你应该说“WebKit”。此外,关于“在准备好之前渲染事物”的最后一行没有逻辑意义。 @Paul Javascript在解读之后通常是JIT编译的 - 我不确定iPhone / iPad / Android是否会这样做,但是WinMobi上的Opera Mobile,Symbian会JIT编译JS - 也许iPad JS是如此之慢,因为它不是JIT 。我不知道。 - lucideer
@Rudiger: Gecko是Firefox背后的引擎。 WebKit是Safari背后的引擎。 Gecko和WebKit之间没有任何关系,除了它们都是渲染引擎的事实。 - Paul D. Waite
@Paul其实我找到了我所说的,Nitro或你写的SquirrelFish Extreme。不知道为什么我以为是Gecko。适合在Stack Overflow醉酒上发帖。我不知道谷歌使用V8并认为它是WebKit的直接分支 - Rudiger