当前位置: 首页 > news >正文

iPhone XS JavaScript性能飙升背后的秘密

对JavaScript性能基准测试的初步评估显示,iPhone XS和iPhone XS max的性能甚至超过了iMac Pro。基准测试使用了Speedometer 2.0,主要针对真实世界的数据帧加载场景进行了比较。

Ruby on Rails作者、Basecamp创始人兼首席技术官David Heinemeier Hansson在Twitter上发起了一个讨论:

在Speedometer 2.0 JavaScript基准测试中,iPhone XS比iMac Pro速度更快。这是我测试过的最快的设备。比iPhone 8/iPhone X芯片高出45%。苹果是如何做到这一点的?!

这条推文引发了关于如何实现这种性能改进的重要猜测。

curiosity.ai首席技术官Rafael Oliveira评论说,苹果似乎优化了他们的ARM JS编译器,远远超过Mac上的x86:

但这就是重点——苹果似乎并没有针对x86 Safari做那么多优化,但他们却在ARM JS编译器上花了大心思……并不是说他们的CPU不令人印象深刻,只是在进行JS基准测试时,差异似乎被夸大了。

软件工程师Greg Parker指出,最新的ARM指令集ARMv8.3-A针对JavaScript做了性能改进:

ARMv8.3添加了一个从浮点数到整型的转换指令,超出范围的值按照JavaScript的方式处理。以前获取JavaScript语义的指令要慢得多。JavaScript的数字默认是双精度的,所以它需要进行很多转换。

ARM确实发布了很多称为更新,也就是ARMv8.3-A,包括对JavaScript数据类型转换的改进:

JavaScript的数字使用的是双精度浮点格式。但是,它需要将这种公共数字格式转换为32位整数,以便执行位操作。从双精度浮点数到整数的转换以及检查转换的数字是否真的是整数是很经常发生的。

ARMv8.3-A指令有助于将双精度浮点数转换为带符号的32位整数,以提高性能。

但事实证明,这并不是性能提升的原因,因为软件工程师Saam Barati解释说,iOS 12的Safari还没有利用这些指令。

从初步报告以来,基于ARMv8.3-A指令的改进已经被用在了WebKit的Nightly构建版本中,并且预计将在Safari的未来版本中使用。Barati已经注意到了各种JetStream2测试结果的性能改进:

在stanford-crypto-aes提升15%
在stanford-crypto-pbkf2提升30%
在stanford-crypto-sha256上提升97%

总体而言,如果不支持ARMv8.3-A,预计这个修复将比当前版本的Safari增加0.5-2%的整体性能提升。

Anandtech的一份iPhone XS性能报告表明,新的内存子系统最有可能是JavaScript性能得到显著提升的原因:

内存子系统对403.gcc部分有效,对429.mcf、471.omnetpp、473.Astar和483.xalancbmk基本有效,A12性能也因此从30%提升到42%。很明显,新的缓存层次结构和内存子系统在这方面起到了很大作用,所以苹果能够在最近几代芯片上实现最重要的性能跳跃。

因此,尽管ARM改进对计算成本高昂的JavaScript运算很有用,但它们并不像内存子系统的改进那么重要。

因此,很多人都在问苹果何时将桌面电脑和笔记本电脑从英特尔转向ARM,这是否会带来与今天类似的性能改进?

查看英文原文:The Story behind Very Fast iPhone XS JavaScript Performance

相关文章:

  • Java 基础语法
  • 变频电源是什么,变频电源的基础知识的认识
  • springboot配置Druid数据源
  • 红帽高级总监谈OpenJDK的未来:Java的未来从未如此光明
  • 如何设置计算机IP地址
  • expect接收命令行传递的参数并设置为变量和打印变量的值
  • rsync同步数据---把左边的文件全部拷贝到右边
  • 用简单代码看卷积组块发展
  • [译]前端离线指南(上)
  • 在应用开发中,网易云音乐如何兼顾质量和效益
  • 高级软件工程第八次作业:“两只小熊队”团队作业-5
  • JS基础(一)dom小实例
  • GitHub文件的克隆与上传
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • Git同时提交到多个远程仓库
  • 【5+】跨webview多页面 触发事件(二)
  • 【Linux系统编程】快速查找errno错误码信息
  • Angularjs之国际化
  • emacs初体验
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • javascript面向对象之创建对象
  • Leetcode 27 Remove Element
  • Promise初体验
  • Ruby 2.x 源代码分析:扩展 概述
  • Vultr 教程目录
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 智能网联汽车信息安全
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • $.ajax()方法详解
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (2015)JS ES6 必知的十个 特性
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)ABI是什么
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042
  • [.NET]桃源网络硬盘 v7.4
  • [100天算法】-每个元音包含偶数次的最长子字符串(day 53)
  • [20180129]bash显示path环境变量.txt
  • [30期] 我的学习方法
  • [AutoSar]BSW_OS 01 priority ceiling protocol(PCP)
  • [Flutter]打包IPA
  • [HarekazeCTF2019]encode_and_encode 不会编程的崽
  • [Hive] 常见函数
  • [HNOI2010]BUS 公交线路
  • [html] 动态炫彩渐变背景
  • [Java][Android][Process] ProcessBuilder与Runtime差别
  • [javaSE] GUI(Action事件)