服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服务器之家 - 编程语言 - JavaScript - js教程 - Next.js项目部署,跨端适配,图表渲染优化复盘

Next.js项目部署,跨端适配,图表渲染优化复盘

2024-04-01 15:30趣谈前端 js教程

最近开源了一款基于 Next.js + Antd5.0 的管理后台系统,打算持续迭代到开发者能傻瓜式开发和部署管理后台的程度。本文和大家分享一下最近的一些更新。

最近开源了一款基于 Next.js + Antd5.0 的管理后台系统,打算持续迭代到开发者能傻瓜式开发和部署管理后台的程度, 下面和大家分享一下最近的一些更新。

  • 添加pm2持久化部署配置
  • 优化打包后图表渲染白屏问题
  • 支持PC端和移动端适配
  • 添加白板制作页面

接下来会和大家分享一下具体的实现, 如果大家想了解 next-admin 这款开源管理系统。

同时也欢迎对 Next.js 感兴趣的小伙伴一起共建。

Github地址:https://github.com/MrXujiang/next-admin

在线地址:http://next-admin.com

Next.js部署神器PM2

Next.js项目部署,跨端适配,图表渲染优化复盘

为什么会选择PM2来部署呢?这里给大家总结几个优势:

  • 负载均衡:pm2使用Node.js的cluster模块,可以在服务器上的所有CPU核心上运行多个应用实例,实现负载均衡。
  • 后台运行:与直接在前台运行Node.js应用程序相比,pm2可以将应用程序在后台运行,更加稳定。
  • 异常自动重启(持久化):pm2可以在应用程序停止之后立即重启,减少了停机时间。pm2可以监测应用程序的运行状态,当进程发生异常(如无限循环)时,可以停止并重启不稳定的进程。
  • 控制台应用监控:pm2提供了控制台界面,可以方便地查看应用程序的状态、日志和性能指标等信息。

所以说如果对于 nginx 高级玩法不太熟悉, 建议直接用 pm2。

下面给大家介绍一下 Next-Admin 的 pm2 配置:

const argEnvIndex = process.argv.indexOf('--env')
let argEnv = (argEnvIndex !== -1 && process.argv[argEnvIndex + 1]) || ''

const RUN_ENV_MAP = {
  local: {
    instances: 2,
    max_memory_restart: '250M'
  },
  dev: {
    instances: 2,
    max_memory_restart: '250M'
  },
  prod: {
    instances: 4,
    max_memory_restart: '1000M'
  }
}

if (!(argEnv in RUN_ENV_MAP)) {
  argEnv = 'prod'
}

module.exports = {
  apps: [
    {
      name: 'next-admin',
      script: 'node_modules/next/dist/bin/next',
      args: 'start -p 80',
      instances: RUN_ENV_MAP[argEnv].instances,
      exec_mode: 'cluster',
      watch: false,
      max_memory_restart: RUN_ENV_MAP[argEnv].max_memory_restart,
      env_local: {
        APP_ENV: 'local'
      },
      env_dev: {
        APP_ENV: 'dev'
      },
      env_prod: {
        APP_ENV: 'prod'
      }
    }
  ]
}

配置基本上可以满足大部分node应用的部署需求,大家可以参考一下。接下来我们只需要在服务器上运行脚本即可启动:

"deploy:local": "pnpm build:local && pm2 start pm2.config.js --env local",
"deploy:dev": "pnpm build:dev && pm2 start pm2.config.js --env dev",
"deploy:prod": "pm2 start pm2.config.js --env prod"

启动后的效果:

Next.js项目部署,跨端适配,图表渲染优化复盘

优化打包后图表渲染白屏问题

由于新版react在开发环境下会渲染两次,这会导致某些库创建两个实例, 导致开发环境出现渲染问题, 比如我明明渲染一张图表,结果在开发浏览器却渲染了两张。为了避免开发环境react组件渲染两次的问题, 我写了一个缓存函数,来解决:

const MyChart = (props: IChart) => {
    const chartRef = useRef<any>(null);
    const { type, data, id } =props;
    useEffect(() => {
        let chart:any;
        // 避免在开发环境渲染两次
    if(isDev) {
        let curCache = localStorage.getItem(id);
        if(!curCache) {
            localStorage.setItem(id, '1');
            chart = createChart(chartRef.current, type, data);
        } 
    }else {
        chart = createChart(chartRef.current, type, data);
    }
    return () => {
        localStorage.removeItem(id);
        chart && chart.destroy();
    }
    }, [type, data, id]);
    return <div ref={chartRef}></div>
}

这样生产环境和开发环境就可以优雅的渲染图表了:

Next.js项目部署,跨端适配,图表渲染优化复盘

支持PC端和移动端适配

由于目前大部分管理后台都是针对PC端的, 移动访问体验不好, 所以我在 Next-Admin 管理系统中做了适配, 保证在PC和移动端都能有不错的适配效果。接下来分享几张移动端访问 Next-Admin 的页面:

Next.js项目部署,跨端适配,图表渲染优化复盘

Next.js项目部署,跨端适配,图表渲染优化复盘

Next.js项目部署,跨端适配,图表渲染优化复盘

Next.js项目部署,跨端适配,图表渲染优化复盘

Next.js项目部署,跨端适配,图表渲染优化复盘

内置在线白板

之前写了一个自定义的白板应用,目前也内置进去了,大家可以参考一下:

Next.js项目部署,跨端适配,图表渲染优化复盘

后期规划

后面会对国际化支持,搭建引擎,页面渲染引擎做一些内置页面,帮助大家更高效的开发管理系统。

原文地址:https://mp.weixin.qq.com/s/Ku4ziFB4zEMo7sJ_Oc6ouQ

延伸 · 阅读

精彩推荐
  • js教程JavaScript/TypeScript 实现并发请求控制的示例代码

    JavaScript/TypeScript 实现并发请求控制的示例代码

    这篇文章主要介绍了JavaScript/TypeScript 实现并发请求控制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...

    凤晴铃玉4422022-01-04
  • js教程微信小程序canvas实现签名功能

    微信小程序canvas实现签名功能

    这篇文章主要为大家详细介绍了微信小程序canvas实现签名功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    weixin_4543937910982022-01-04
  • js教程JavaScript事件概念详解(区分静态注册和动态注册)

    JavaScript事件概念详解(区分静态注册和动态注册)

    这篇文章主要介绍了JavaScript事件(区分静态注册和动态注册)的相关资料,帮助大家更好的理解和学习使用JavaScript,感兴趣的朋友可以了解下...

    皮卡丘和羊宝贝7122022-01-17
  • js教程微信小程序实现登录界面

    微信小程序实现登录界面

    这篇文章主要为大家详细介绍了微信小程序实现登录界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Harris-H11172022-03-08
  • js教程原生js canvas实现简单贪吃蛇

    原生js canvas实现简单贪吃蛇

    这篇文章主要为大家详细介绍了原生js canvas实现简单贪吃蛇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    深夜猿6742022-02-15
  • js教程利用js实现Ajax并发请求限制请求数量的示例代码

    利用js实现Ajax并发请求限制请求数量的示例代码

    这篇文章主要介绍了利用js实现Ajax并发请求限制请求数量的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值...

    GuaX5602022-02-24
  • js教程js实现碰撞检测

    js实现碰撞检测

    这篇文章主要为大家详细介绍了js实现碰撞检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    搬砖大法8342022-01-11
  • js教程CocosCreator经典入门项目之flappybird

    CocosCreator经典入门项目之flappybird

    这篇文章主要介绍了CocosCreator经典入门项目之flappybird,详细说明了制作的每个步骤,还有详尽的代码,对CocosCreator感兴趣的同学,一定要看一下...

    冏尼10032022-03-01