当前位置: 首页 > news >正文

手机网站建设维护协议想换掉做网站的公司

手机网站建设维护协议,想换掉做网站的公司,如何选择最好的域名,网站背投广告代码在上一篇文章中#xff0c;我们介绍了 NestJS 的微服务架构实现。本文将深入探讨 NestJS 应用的性能优化策略#xff0c;从应用层到部署层面提供全方位的优化指南。 应用层优化 1. 路由优化 // src/modules/users/users.controller.ts import { Controller, Get, UseInter…在上一篇文章中我们介绍了 NestJS 的微服务架构实现。本文将深入探讨 NestJS 应用的性能优化策略从应用层到部署层面提供全方位的优化指南。 应用层优化 1. 路由优化 // src/modules/users/users.controller.ts import { Controller, Get, UseInterceptors, CacheInterceptor } from nestjs/common; import { UsersService } from ./users.service;Controller(users) UseInterceptors(CacheInterceptor) export class UsersController {constructor(private readonly usersService: UsersService) {}// 使用路由参数而不是查询参数提高路由匹配效率Get(:id)async findOne(Param(id) id: string) {return this.usersService.findOne(id);}// 避免深层嵌套路由Get(:id/profile)async getProfile(Param(id) id: string) {return this.usersService.getProfile(id);} } 2. 数据序列化优化 // src/interceptors/transform.interceptor.ts import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from nestjs/common; import { Observable } from rxjs; import { map } from rxjs/operators; import { classToPlain } from class-transformer;Injectable() export class TransformInterceptor implements NestInterceptor {intercept(context: ExecutionContext, next: CallHandler): Observableany {return next.handle().pipe(map(data {// 使用 class-transformer 进行高效的数据序列化return classToPlain(data, { excludeExtraneousValues: true,enableCircularCheck: false });}),);} } 数据库优化 1. 查询优化 // src/modules/posts/posts.service.ts import { Injectable } from nestjs/common; import { InjectRepository } from nestjs/typeorm; import { Repository } from typeorm; import { Post } from ./post.entity;Injectable() export class PostsService {constructor(InjectRepository(Post)private postsRepository: RepositoryPost,) {}async findAll(page: number, limit: number) {// 使用分页查询const [posts, total] await this.postsRepository.createQueryBuilder(post).leftJoinAndSelect(post.author, author)// 只选择需要的字段.select([post.id, post.title, author.name])// 添加索引字段的排序.orderBy(post.createdAt, DESC)// 使用分页.skip((page - 1) * limit).take(limit)// 缓存查询结果.cache(true).getManyAndCount();return { posts, total };} } 2. 索引优化 // src/entities/user.entity.ts import { Entity, Column, Index } from typeorm;Entity() export class User {Column()Index() // 为经常查询的字段添加索引email: string;Column()Index() // 为经常排序的字段添加索引createdAt: Date;// 复合索引Index([firstName, lastName])Column()firstName: string;Column()lastName: string; } 缓存策略 1. Redis 缓存集成 // src/config/cache.config.ts import { CacheModule } from nestjs/common; import * as redisStore from cache-manager-redis-store;export const cacheConfig {imports: [CacheModule.register({store: redisStore,host: process.env.REDIS_HOST,port: process.env.REDIS_PORT,ttl: 60 * 60, // 1 hourmax: 100, // 最大缓存数}),], };// src/modules/products/products.service.ts import { Injectable, Inject, CACHE_MANAGER } from nestjs/common; import { Cache } from cache-manager;Injectable() export class ProductsService {constructor(Inject(CACHE_MANAGER) private cacheManager: Cache,) {}async getProduct(id: string) {// 先从缓存获取let product await this.cacheManager.get(product:${id});if (!product) {// 缓存未命中从数据库获取product await this.productRepository.findOne(id);// 设置缓存await this.cacheManager.set(product:${id}, product, { ttl: 3600 });}return product;} } 2. 多级缓存策略 // src/services/cache.service.ts import { Injectable } from nestjs/common; import { Cache } from cache-manager; import * as NodeCache from node-cache;Injectable() export class CacheService {private localCache: NodeCache;constructor(Inject(CACHE_MANAGER) private redisCache: Cache,) {this.localCache new NodeCache({stdTTL: 60, // 本地缓存 1 分钟checkperiod: 120,});}async get(key: string) {// 1. 检查本地缓存let data this.localCache.get(key);if (data) return data;// 2. 检查 Redis 缓存data await this.redisCache.get(key);if (data) {// 将数据放入本地缓存this.localCache.set(key, data);return data;}return null;}async set(key: string, value: any, ttl?: number) {// 同时更新本地缓存和 Redis 缓存this.localCache.set(key, value, ttl);await this.redisCache.set(key, value, { ttl });} } 内存管理 1. 内存泄漏防护 // src/decorators/memory-safe.decorator.ts import { applyDecorators, SetMetadata } from nestjs/common;export function MemorySafe(options: { timeout?: number } {}) {return applyDecorators(SetMetadata(memory-safe, true),SetMetadata(timeout, options.timeout || 30000),); }// src/interceptors/memory-guard.interceptor.ts import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from nestjs/common; import { Reflector } from nestjs/core; import { Observable } from rxjs; import { timeout } from rxjs/operators;Injectable() export class MemoryGuardInterceptor implements NestInterceptor {constructor(private reflector: Reflector) {}intercept(context: ExecutionContext, next: CallHandler): Observableany {const isMemorySafe this.reflector.get(memory-safe, context.getHandler());const timeoutValue this.reflector.get(timeout, context.getHandler());if (isMemorySafe) {return next.handle().pipe(timeout(timeoutValue),);}return next.handle();} } 2. 垃圾回收优化 // src/main.ts import { NestFactory } from nestjs/core; import { AppModule } from ./app.module; import * as v8 from v8;async function bootstrap() {// 配置垃圾回收v8.setFlagsFromString(--max_old_space_size4096);const app await NestFactory.create(AppModule);// 定期强制垃圾回收setInterval(() {global.gc();}, 30000);await app.listen(3000); } bootstrap(); 部署优化 1. PM2 集群配置 // ecosystem.config.js module.exports {apps: [{name: nestjs-app,script: dist/main.js,instances: max, // 根据 CPU 核心数自动设置实例数exec_mode: cluster,autorestart: true,watch: false,max_memory_restart: 1G,env: {NODE_ENV: production,},}], }; 2. Nginx 负载均衡 # nginx.conf upstream nestjs_upstream {least_conn; # 最少连接数负载均衡server 127.0.0.1:3000;server 127.0.0.1:3001;server 127.0.0.1:3002;keepalive 32; # 保持连接数 }server {listen 80;server_name example.com;location / {proxy_pass http://nestjs_upstream;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection upgrade;proxy_set_header Host $host;proxy_cache_bypass $http_upgrade;# 开启 gzip 压缩gzip on;gzip_types text/plain application/json;gzip_min_length 1000;# 客户端缓存设置add_header Cache-Control public, max-age3600;} } 监控与性能分析 1. 性能监控集成 // src/modules/monitoring/monitoring.service.ts import { Injectable } from nestjs/common; import * as prometheus from prom-client;Injectable() export class MonitoringService {private readonly requestDuration: prometheus.Histogram;private readonly activeConnections: prometheus.Gauge;constructor() {// 初始化 Prometheus 指标this.requestDuration new prometheus.Histogram({name: http_request_duration_seconds,help: Duration of HTTP requests in seconds,labelNames: [method, route, status],buckets: [0.1, 0.5, 1, 2, 5],});this.activeConnections new prometheus.Gauge({name: active_connections,help: Number of active connections,});}recordRequestDuration(method: string, route: string, status: number, duration: number) {this.requestDuration.labels(method, route, status.toString()).observe(duration);}incrementConnections() {this.activeConnections.inc();}decrementConnections() {this.activeConnections.dec();} } 2. 日志优化 // src/modules/logging/winston.config.ts import { WinstonModule } from nest-winston; import * as winston from winston; import winston-daily-rotate-file;export const winstonConfig {imports: [WinstonModule.forRoot({transports: [// 控制台日志new winston.transports.Console({format: winston.format.combine(winston.format.timestamp(),winston.format.colorize(),winston.format.simple(),),}),// 文件日志按日期轮转new winston.transports.DailyRotateFile({filename: logs/application-%DATE%.log,datePattern: YYYY-MM-DD,zippedArchive: true,maxSize: 20m,maxFiles: 14d,format: winston.format.combine(winston.format.timestamp(),winston.format.json(),),}),],}),], }; 写在最后 本文详细介绍了 NestJS 应用的性能优化策略 应用层优化路由优化、数据序列化数据库优化查询优化、索引设计缓存策略Redis 集成、多级缓存内存管理内存泄漏防护、垃圾回收优化部署优化PM2 集群、Nginx 负载均衡监控与性能分析Prometheus 集成、日志优化 通过实施这些优化策略我们可以显著提升 NestJS 应用的性能和可靠性。在实际应用中建议根据具体场景和需求选择合适的优化方案。 如果觉得这篇文章对你有帮助别忘了点个赞
http://www.w-s-a.com/news/911816/

相关文章:

  • 对商家而言网站建设的好处网址导航怎么彻底删除
  • app设计网站模板企业展厅策划设计公司有哪些
  • wordpress销售主题手机网站关键词优化
  • 怎么查一个网站是什么程序做的三亚城乡建设局网站
  • 深圳分销网站设计公司做网站一般需要多久
  • 企业网站设计代码丹东seo排名公司
  • 企业网站建设定制开发服务网站建设说课ppt
  • 大连市城乡建设局网站网站免费网站入口
  • 做暧网站网站备案ps
  • 知名网站建设公司电话长子网站建设
  • 网站建设的意义与目的建立什么船籍港
  • 广州注册公司营业执照网站建设代码优化
  • 百度网站官网马克互联网主题 wordpress
  • 网站制作 客户刁难深圳自助建站
  • 怎么去推广一个网站广东餐饮品牌设计
  • 网站代码加密了怎么做兰州最新大事
  • 现在ui做的比较好的网站去年做啥网站致富
  • 广东网站建设咨询电话好牌子网
  • 公司怎样制作网站南阳网站关键词
  • 营销型网站建设与网盟完整php网站开发
  • 网站做微信链接怎么做的石桥铺网站建设公司
  • 济南mip网站建设公司做图书馆网站模板
  • app 门户网站网站项目框架
  • 做网站视频网站备案 新闻审批号
  • 织梦网站怎么居中视频网站开发与制作
  • 网站上海备案佛山网站seo哪家好
  • 品牌形象网站有哪些珠海市区工商年报在哪个网站做
  • 注册域名不建设网站seo外包服务方案
  • 如何进行外贸网站建设wordpress文章输入密码可见
  • 政务网站建设索引常州做网站信息