有一种 left-pad 事件,不过它只影响了依赖公共注册表的项目,并在 11 分钟之后重新发布。最小化所带来的益处远大于其缺点。而且,npm 已经修改了它的发布策略,任何重要的项目都应该使用缓存或私有注册中心(作为临时解决方案)。
Viyi翻译于 1天前0人顶 翻译得不错哦!使用异步代码
同步代码确实在 Node 中有一个(低的)位置。 它主要用于编写 CLI 命令或与 Web 应用程序无关的其他脚本。Node 开发者主要构建 Web 应用程序,因此他们使用异步代码,以避免阻塞线程。
例如,如果我们只是构建数据库脚本,而不是用来处理并发/并行任务的系统,这样就行了:
let data = fs.readFileSync('./acconts.json')db.collection('accounts').insert(data, (results))=>{ fs.writeFileSync('./accountIDs.json', results, ()=>{process.exit(1)})})
但是在构建 Web 应用时下面写法会更佳:
app.use('/seed/:name', (req, res) => { let data = fs.readFile(`./${req.params.name}.json`, ()=>{ db.collection(req.params.name).insert(data, (results))=>{ fs.writeFile(`./${req.params.name}IDs.json`, results, ()={res.status(201).send()}) }) })})
区别在于你是否在写并发(通常是长时间运行)还是非并发(短时间运行)的系统。 根据经验,我们总是在 Node 中使用异步代码。
Tocy翻译于 2天前0人顶 翻译得不错哦!避免阻塞请求
Node 有一个简单的模块加载系统,使用 CommonJS 模块规范。它内建的 require 函数很容易把另外单独存放的的模块包含进来。与 AMD/requirejs 不同,Node/CommonJS 采用同步的方式加载模块。require工作方式是:导入在模块或文件中导出的内容。
const react = require('react')
大多数开发知道 require 有缓存。因此,只要解析出来的文件名没什么变化(在 npm 模块中是没有的),模块中的代码会只执行一次并将结果保存在一个变量中(同一进程内)。这个优化非常棒。然而,在有缓存的情况下,你仍然最好把 require 语句放在前面。看看下面的代码,在真正进入路由的时候才加载 axios 模块。/connect 路由出乎预料的慢,因为它在导入模块的时候才开始请求文件[译者注:IO 操作比 CPU 运算慢很多]:
app.post('/connect', (req, res) => { const axios = require('axios') axios.post('/api/authorize', req.body.auth) .then((response)=>res.send(response))})
更好更高效的方式是服务器启动后就加载模块,而不是在路由中:
const axios = require('axios')const express = require('express')app = express()app.post('/connect', (req, res) => { axios.post(