首页 存档 技术 查看内容

简单技巧:优化JavaScript编译器工作

2018-3-30 13:00 |来自: 互联网 296 0

摘要: 这篇文章告诉你一些简单的技巧来优化JavaScript编译器工作,从而让你的JavaScript代码运行的更快。尤其是在你游戏中发现帧率下降或是当垃圾回收器有大量的工作要完成的时候。 单一同态: 当你定义了一个两个参数的函 ...

这篇文章告诉你一些简单的技巧来优化JavaScript编译器工作,从而让你的JavaScript代码运行的更快。尤其是在你游戏中发现帧率下降或是当垃圾回收器有大量的工作要完成的时候。

单一同态:

当你定义了一个两个参数的函数,编译器会接受你的定义,如果函数参数的类型、个数或者返回值的类型改变编译器的工作会变得艰难。通常情况下,单一同态的数据结构和个数相同的参数会让你的程序会更好的工作。

function example(a, b) {
// 期望a,b都为数值类型
console.log( a * b);
};

example(); // 不佳
example(1); // 仍然不佳
example("1", 2); // 尤其不佳

example(1, 2); // 很好

展开:

编译器会在编译的时候求出变量的值并且展开它(最佳实践),因此在程序执行前可以尽量多的表达信息。常量和变量一样可以被展开,只要它们没有用任何的与运行期有关的运算。

const a = 42; // 很容易展开
const b = 1337 * 2; // 可以求值
const c = a b; // 也可以求值
const d = Math.random() * c; // 只能展开'c'
const e = "Hello " "Medium"; // 其他类型的值也可以

// 展开前
a;
b;
c;
d;
e;

// 展开后
// 会在编译的时候做好这些!
42
2674
2716
Math.random() * 2716
"Hello Medium"

函数内联:

JIT编译器会找出你的代码中哪些部分是经常执行的。在编译的时候通过将函数分成小块来将代码块内联并且热追踪函数之后代码会执行的更快。

// 以下这些会内联
// [] 单一的返回语句
// [] 返回总是一样的
// [] 返回时单一同态的
// [] 参数是单一同态的
// [] 函数体是一个单一的语句
// [] 不是包裹在另一个函数体内
// ...
function isNumeric(n) {
return (
n

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部