1.Node.js中的process.nectTick()有什么作用
将一个回调函数插入到当前执行栈的尾部,在下一次事件轮询之前调用这个回调函数
2.什么是Node.js中的事件发射器,作用是什么,如何使用
提供一种机制,可以创建、触发和监听自定义事件。他的作用是允许我们对异步事件进行订阅并在事件发生时执行回调函数
使用步骤:
①:创建一个事件发射器对象
②:使用on()方法为特定事件注册监听器
③:使用emit()方法触发事件
const EventEmitter = require('events');
const eventEmitter = new EventEmitter();
// 注册一个事件和对应的监听器
eventEmitter.on('greet', (name) => {
console.log(`Hello, ${name}!`);
});
// 触发事件
eventEmitter.emit('greet', 'World');
3.Node.js中的事件循环
事件循环(Event Loop) 是其异步编程模型的核心机制,是一个永远允许的循环,它允许 Node.js 以非阻塞的方式执行代码,尽管 JavaScript 本身是单线程的。
阶段 | 说明 |
---|---|
timers | 处理 setTimeout 和 setInterval |
I/O callbacks | 执行延迟到下轮循环的 I/O 回调 |
idle, prepare | 内部使用 |
poll | 轮询新的 I/O 事件 |
check | 处理 setImmediate 回调 |
close callbacks | 如 socket.on('close') |
4.什么是非阻塞I/O,Node.js如何实现非阻塞I/O
非阻塞 I/O(Non-blocking I/O) 是指发起 I/O 操作(如读取文件、访问数据库、网络请求)时,程序不需要等待该操作完成,而是可以继续执行后续代码。一旦 I/O 完成,通过回调函数、事件或 Promise 通知程序结果。
5.如何解决前端SPA应用首屏加载速度慢的问题
①: 代码分割
- 动态导入:利用 ES6 的
import()
动态加载模块,按需加载代码。 - 路由懒加载:结合路由框架(如 React Router、Vue Router),实现路由组件的懒加载。
- webpack 配置:利用 webpack 的
splitChunks
插件来分割代码,确保只有当用户访问特定页面时才加载相应的代码块。
②: 开启 gzip 压缩。
- 在服务器端配置 gzip 压缩,减少传输的数据量。
③:优化资源加载
- 预加载与预渲染:使用
<link rel="preload">
和<link rel="prefetch">
提前加载关键资源。 - 使用 Service Worker:通过 Service Worker 缓存静态资源,减少网络请求。
- 延迟加载:对于非关键资源(如图片和视频),使用懒加载技术延迟加载。
④:图片优化
⑤:Server-Side Rendering (SSR)
- 对于首屏加载特别敏感的应用,可以考虑采用服务端渲染技术,预先生成 HTML 内容发送给客户端,减少首屏空白时间。