常见的Nodejs框架
- Koa: 一个轻量的Nodejs框架,代码非常简洁。采用洋葱圈模型中间件,非常方便扩展功能,但是开发后端API需要进行再封装。
- Express: Express也是一个轻量框架,Express和Koa的区别在于中间件机制。但总体差别不是很大,绝大多数Nodejs框架都是在Koa或者Express基础上封装的。
- Hapi: 是一个用于构建应用程序和服务的现代化、富有框架的 Node.js 框架。它提供了一系列的工具和插件,使得构建可扩展和高性能的应用变得更加容易。
- Nestjs: 基于TS,使用了大量的装饰器语法,开发体验类似于Java的Springboot。除此之外,Nestjs还提供了GraphQL、WebSocket、各种MQ和微服务的解决方案,比较适合大型后端项目的开发。
Redis
1.缓存: BFF 可以使用 Redis 作为缓存层,将一些频繁读取的数据存储在 Redis 中,以减轻后端服务器的负载,比如热门商品信息,商品页面和网站首页。
2.会话存储: BFF 可以使用 Redis 存储用户会话数据。将会话信息存储在 Redis 中,可以提高会话的可扩展性,使得 BFF 可以更容易地水平扩展。
3.实时数据: BFF 可以使用 Redis 的发布-订阅功能来实现实时数据推送。通过订阅 Redis 的频道,BFF 可以在后端有更新时向前端实时推送数据,实现实时通信。
4.Redis持久化: Redis可以将缓存持久化到本地,持久化策略包括RDB和AOF。
5.集群: 如果单机Redis不够用的话,可以考虑搭建Redis集群,Redis集群有主从和哨兵两种模式。
mogodb优化
避免全表扫描,为当前集合中的文档创建索引,索引可以提高查询性能。
- 尽量设计索引使其成为覆盖索引,即索引包含了查询中涉及的所有字段。这样可以减少对实际文档的访问。
- 对于经常一起使用的查询条件,考虑创建复合索引,复合索引可以提高多条件查询的性能。
// keys为需要创建索引的字段,options为可选参数,用于设置索引的一些属性
db.collection.ensureIndex(keys, options)
在查询中使用投影,只返回需要的字段,以及限制返回的文档数量
// 查询名字为 "John" 的用户,并只返回名字和年龄字段
db.users.find({ name: "John" }, { name: 1, age: 1, _id: 0 })
webpack
-
Webpack 热更新的核心是在运行时替换模块,从而实现代码的即时更新。这个过程中涉及到模块标识、模块的重新构建、新代码的传递等多个步骤,通过 HMR runtime 实现了运行时的模块替换逻辑。
-
在生产环境中,可以开启一些性能优化的特性,例如代码压缩、去除调试信息、模块标识符的简化等,可以通过使用
mode
配置选项来自动开启这些特性。
// webpack.config.js
module.exports = {
mode: 'production',
// ...其他配置
};
- 将代码拆分为多个小块,按需加载,从而减小初始加载体积。Webpack 提供了
SplitChunksPlugin
来实现代码分割。
// webpack.config.js
optimization: {
splitChunks: {
chunks: 'all',
},
},
- 使用懒加载来分割应用的代码,只在需要时加载,可以使用动态
import
语法或者React.lazy
进行组件级别的懒加载。
// 动态 import
const someModule = import('./someModule');
// React.lazy
const MyComponent = React.lazy(() => import('./MyComponent'));
- 通过 Tree Shaking 来消除未使用的代码,确保在生产环境中开启
mode: 'production'
,并检查是否配置了optimization.minimize: true
// webpack.config.js
optimization: {
minimize: true,
},
- 使用缓存来避免重复构建,Webpack 提供了
cache
配置选项,可以使用插件如hard-source-webpack-plugin
或cache-loader
实现构建缓存。
// webpack.config.js
cache: {
type: 'filesystem',
},
- 使用 CDN 加速静态资源的加载,可以减小服务器负担,提高加载速度。