Archive

Posts Tagged ‘javascript’

[转] 为什么移动Web应用程序很慢

August 14th, 2013 No comments

Drew Crawford 的博客文章. 很长, 但值得一读.

英文原文:

Why mobile web apps are slow[1]

中文翻译:

为什么移动Web应用程序很慢[2]

[1] http://sealedabstract.com/rants/why-mobile-web-apps-are-slow/

[2] http://blog.jobbole.com/45670/

[转] 各JavaScript引擎的简介,及相关资料/博客收集

April 20th, 2013 No comments

RednaxelaFX 同学在 ITEYE 上总结了 JavaScript 引擎相关的资源:

http://hllvm.group.iteye.com/group/topic/37596

有兴趣的可以移步关注。

[摘要] The V8 Myth: Why JavaScript is not a Worthy Competitor

December 25th, 2012 No comments

本文是内容摘要。原文见这里。作者的主页在这里

以下是摘要:

  • JavaScript是无类型的(untyped)语言,代码规模相对较小,以源代码形式发布,在运行动态编译;ActionScript是有类型的(typed),代码规模较大,在编译后以二进制字节码的形式发布。
  • JavaScript在语言本质上的一些特性导致了它不适合用来开发重量级的应用。清醒一些吧。
  • 动态分析是静态分析的很好的补充,但是无法完全替代静态分析。ActionScript代码经过一个AOT(Ahead-of-Time)编译器充分的分析和优化,而JavaScript的即时编译器无法承受这种优化的开销。
  • 你大概听说V8(一个新的JavaScript VM)使用了“类型推断”技术,但是你可能不知道一个JIT是无法承受AOT使用的 modular analysis 所带来的开销的。
  • 我粗略的测试了一下ActionScript工具链和JavaScript工具链。前者得到的代码速度是后者的三倍以上。当然这个比较不够严谨。
  • 所以,不要操心JavaScript了,来关注ActionScript吧,这个才是21世纪最值得拥有的脚本语言。

摘要结束

原文作者原先是美国马里兰大学程序语言研究组的研究人员,后来加入了Adobe公司程序语言研究小组。这篇博客写于2012年1月,距今差不多快1年——对于互联网技术而言是很长的一段时间。文章很短,评论很多,语言之间的对比和吐槽总是很有人气 🙂

今天看来,文中提到的JavaScript的一些问题依然存在,相信其中还有一些研究的机会,博主已经看到了一些相关的研究成果发表了。有兴趣研究的同学要抓紧时间了 🙂

IonMonkey 中可能的研究点

November 16th, 2012 No comments

一周前,一位巴西的大四学生给 Mozilla JS-Internals 邮件列表发了一封邮件[1],说自己下半年就开始计算机科学的研究生学业了,希望能够在 IonMonkey 上做些研究,但是刚接触 IonMonkey 没有什么感觉,希望能够得到一些指点。今天 Mozilla JS Engine 的负责人 David Anderson 回复了他,指出了几个他们感兴趣的研究项目[2],有兴趣的读者可以关注一下:

  1. Escape Analysis(逃逸分析):目前还没有任何的工作,所以即使不是完整的算法实现,能够得到一些测试数据也是很好的。逃逸分析能够帮助减少冗余的堆内存占用(当一个线程中的堆内存对象不确定是否被其它线程引用的时候是不能轻易的删除的)。
  2. Better Alias Analysis(别名分析):目前 IonMonkey 中有一个别名分析(位于 js/src/ion/AliasAnalysis.{h,cpp}),但是比较的粗糙,例如在遇到类似“v.x + v.y + v.z”这样的表达式时,现在的别名分析会将 v.x 和 v.z 都看成是 v.y 的别名。这阻碍了后续的优化工作。
  3. RA Improvements(寄存器分配算法的改进):要重写一个 RA 是非常难的,工作量也非常的大。如果能够在现在 RA 实现的基础上做一些改进,也是很有意义的。
  4. Control-flow Elimination(不常用控制流消除):目前 IonMonkey 能够消除(eliminate)单个指令,但是无法消除 CFG 中的 Block 。如果这个功能实现了,我们(开发人员)就可以做进一步的实验,尝试更加激进的优化,消除掉不常用的分支,或许还可以促进 RA 的效果。

目前 IonMonkey 还在开发中,支持的分析和优化还不是很多,实现上也是比较简单的实现,应该还有不少的机会。

Reference:

[1]: http://www.mail-archive.com/dev-tech-js-engine-internals@lists.mozilla.org/msg00120.html

[2]: http://www.mail-archive.com/dev-tech-js-engine-internals@lists.mozilla.org/msg00122.html

TraceMonkey (not) in Firefox

October 28th, 2012 No comments

这个世界总是变化太快。浏览器的世界变化更快。

2008年左右加入到Firefox/SpiderMonkey中的Trace-based JIT引擎TraceMonkey,2011年10月份的时候被默认禁用(bug#697666),11月份的时候已经被David Anderson从Mozilla-Central中移除了(bug#698201)。

Nicholas Nethercote在他的博客中解释说,当时Firefox中有TraceMonkey(TM)和JaegerMonkey(JM)两个不同的JIT同时存在,而引入的Type Inference技术(TI)使得JM+TI的执行性能超过了JM+TM的执行速度。TM针对特定的代码优化的效果还是不错的,例如没有分支跳转的循环。但是在其它的代码情形下,不如JM(它是Method-based)。除此之外TM的代码的复杂性和内存消耗也是它被移除的原因之一。在移除前,TM的代码行数已经达到了67000+的规模,对于一个JS编译器来说已经是很大了。

TraceMonkey诞生的时候出了好几篇高质量的论文(PLDI’09, VEE’09),我也曾经想在上面做一些工作。想不到我还没有克服自己的拖延症,TraceMonkey就已经告别了。只能叹“相逢恨晚,造物弄人” :-D。