楔子
我们在写代码的时候,往往开始的时候关注功能实现,然后进行性能测试,如果性能满足需求,皆大欢喜,否则,优化之路就开始了。
作为一名合格的屌丝码农,应该把性能优化始终铭记在心,哪怕满足需求了,也要想想是否可以做得更好呢。
然而,JS作为动态语言,与c/c++有很多不同之处。我们知道,JS代码是JS引擎动态编译的。动态语言的一个巨大优势就是引擎可以根据运行时产生的profile对已经在执行的代码尤其是被频繁调用的热点函数进行重新优化编译(V8的crankshaft模块),这依稀就是控制论里面的闭环控制,负反馈嘛,终于发现教科书知识的用途了。哇哈哈~~~
做任何事情都是有规则限制的,JS引擎优化JS代码也不例外,如果我们能够在JS代码里面尽量避免使用JS引擎无法优化的格式,无疑能够最大程度的发挥引擎的能力。
web-inspector里面的cpu-profilor模块能够很好的评测某个JS函数运行十几年占整个工程的比率,这样就可以盯着排名靠前的函数进行优化。 然而,原生的web-inspector只给出了JS函数的执行占用比,并没有列出该函数是否被优化过,如果没有优化,原因又是什么。
我们在深入阅读JS引擎V8代码后,将这些十分关键/有用的信息通过web-inspector展现给码农。这样,那些排名靠前的没有被优化的函数就需要被好好修理一番了,更重要的是未被优化的原因也呈现出来,这样只要对症下药就可以了。