我正在学习Javascript Promise和async/ await.下面的示例代码异步读取并解析node.js中的JSON文件(我的node.js版本是v10.0.0).
在示例代码中,ChainReadJson函数和AwaitReadJson函数正在做同样的事情,读取和解析JSON文件.不同之处在于ChainReadJson函数使用promise链,而AwaitReadJson函数使用async/await.
const FS = require("fs");
function ReadFile(fileName) {
return new Promise((Resolve, Reject) => {
FS.readFile(fileName, 'utf8', (error, result) => {
if (error)
Reject(error);
else
Resolve(result);
});
});
}
// function using promise chain
function ChainReadJson(fileName, CallBack) {
ReadFile(fileName)
.then(
res => JSON.parse(res),
err => {
Message(-1, err.message);
}
)
.then(
res => {
if (res !== undefined)
CallBack(fileName, res);
},
err => {
Message(-2, err.message);
}
);
}
// function using …Run Code Online (Sandbox Code Playgroud) 我阅读了以下有关 V8 引擎和 javascript 优化的文章。
JavaScript 的工作原理:V8 引擎内部 + 5 个关于如何编写优化代码的技巧
根据上面的文章,推荐这些:
A。V8引擎使用隐藏类以及隐藏类和属性的缓存机制。所以避免动态添加对象属性,也避免动态改变属性的类型。而是使用对象构造函数。
b. V8引擎对常用功能进行了更多优化。因此,请避免生成仅执行一次的许多不同的相似表单函数。相反,编写代码来重复执行相同的函数。
然后,我有3个问题:
我。'a'和'b'可以应用于其他浏览器的javascript引擎,例如firefox的SpiderMonkey吗?
二. 根据“a”的说法,使用 typescript 对 v8 引擎优化更有优势?(使用 typescript,您可以生成具有较少动态变化对象和属性的 javascript 代码)
三. 现代 JavaScript 代码使用大量具有类似形式的内联和匿名函数,如下面的示例代码。根据“b”,使用单个预定义函数更有利?(此示例代码非常简化,用于显示多次使用的类似表单函数)
prm.then((res) => {
console.log(res);
}).then((res2) => {
console.log(res2);
}).catch((err) => {
console.log(err);
});
Run Code Online (Sandbox Code Playgroud) (请原谅我的英语)
下面是一个非常简化的示例代码。
function test(limit) {
let count = 0, undone = true;
function inc() {
// do something
count++;
if(count == limit)
undone = false;
}
while(undone) {
// do something
inc();
}
}
Run Code Online (Sandbox Code Playgroud)
我经常使用嵌套函数样式的函数,如inc()上面的示例所示。因为共享变量非常方便。
然而,有人告诉我,我的编码风格非常有害。因为每次test()(在上面的示例中)被调用时,都会inc()在内存中重复分配。他建议我改用 ES6 类样式代码。
我不能同意他的观点,但也不确定。嵌套函数风格的代码真的比 ES6 类风格有害吗?
编辑
我对这个问题进行了一个简单的基准测试,如下所示。
结果让我有些惊讶。我错了。我的顾问是对的。
编辑 首先,这篇文章的标题是“闭包样式代码是......”。我将其修改为“嵌套函数样式代码是...”。