vite-服务端渲染(ssr)项目线上频繁刷新(踩坑记录)

news2024/9/23 9:30:45

今天来分享一个我在公司修改之前前端留下来的项目的坑。来说说大致的一个经过把,我老板说这个项目是之前的一个前端做的,用的是ssr服务端渲染的技术,不过他项目在线上会一直频繁的刷新,据说他想破脑袋都想不出来,最终因为解决不了这个问题被老板劝退?😂,哈哈哈,其实并不是,我也不清楚啥子情况离职哈哈,接着我就想证明自己的逝力,想尝试去解决这个问题,如果不解决的话就得重新写一份这个代码。

项目目录结构

在这里插入图片描述
我当时第一眼看上去,这不就是传统的spa的vue项目吗

在这里插入图片描述
看了一眼,发现这个项目自己写了服务端,我就去看他的一个源码

服务端代码

在这里插入图片描述
看了一样,大概的代码逻辑就是使用vite创建了一个开发服务器,通过express去拦截特定url,通过fs读取默认的模板配置,再通过一个ssr_render的函数,去把所有路由下所有的组件合并成html,将这个html进行格式化,以及pretty格式化,最后返回一个html字符串。我看了下好像没有太大的问题,我就尝试在本地测试复现。

哎,好像本地是正常的,当时测完我就开心的以为事情解决了,然后通过nginx部署到线上,结果果然和老板描述的一样,会不断的频繁刷新页面

思考

接着我就进行了思考,本地不会,线上会,使用的nginx做的转发,那毫无疑问是nginx的问题把,然后我尝试从nginx配置上找原因

    server {
        listen 60080 proxy_protocol;
        server_name xxx;
        real_ip_header proxy_protocol;
        real_ip_recursive on;
        set_real_ip_from xxx.xxx.xxx.xxx;
        set_real_ip_from 127.0.0.1;
        location / {
            proxy_pass http://127.0.0.1:8191;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            # 如果使用 WebSocket,添加以下配置
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }

    }

我这个是内网项目,域名会先转发到我公网的nginx服务器再转发到我内网的ip上,我在网上测试了很多种方式,还是找不到问题。但是好像线上控制台看到了websocket报错
在这里插入图片描述
于是我去百度搜了很多nginx和websocket关联的一些文章,依旧无果。后面我觉得很奇怪,不应该是websocket的问题,因为我项目里面客服的前端socket连接代码全部注释掉了,怎么还会有websocket的报错,于是我又把问题进行了转移。

思考2

我在网络控制台去查看,发现每次自动刷新多了一个_vite_ping这个请求,我chat搜了一下_vite_ping 是 Vite 开发服务器用来检测客户端连接是否健康的请求。这是 Vite 内部机制的一部分,用于确保热模块替换(HMR)功能正常工作。我就思考了会不会是vite源码里面又使用websocket?接着我就去百度vite项目中频繁自动刷新页面的问题,果然就找到了相关的文章

感谢这两篇文章:
vite、vue3本地页面正常显示不刷新,外网穿透后页面不停刷新
vite项目 通过外网域名访问 无限刷新 的解决办法
来解释一下吧,在vite源码里面进行websocket连接的时候会带端口号,当我进行转发之后,实际上我域名是没有带端口的,它的访问就变成了域名:端口

在这里插入图片描述
第一篇文章是原理
第二篇文章是具体解决的方式

通过第二篇文章的处理方式他就不会加上端口去访问

最终解决方案

还是写一下把,在vite.config.js进行配置

import { defineConfig } from 'vite';
export default defineConfig({
  //...你自己的配置
  server: {
    hmr: {
      protocol: 'ws',
      host: '127.0.0.1'
    }
  },
 }

结语

每一次的踩坑都是成长,会让我不断的探索不断的寻求方式去解决问题,不仅是开拓大脑思维,也是积累经验,期待我可以变得更强大。最后这里还是需要鸣谢一个大佬,总是能帮我搜索到关键信息,搜索引擎这块我还是得再加强哈哈哈,加油!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1927035.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

周鸿祎为什么建议Java、前端、大数据、PHP开发都要学一下大模型?_ai大模型全栈工程师跟java有关吗

ChatGPT的出现在全球掀起了AI大模型的浪潮,2023年可以被称为AI元年,AI大模型以一种野蛮的方式,闯入你我的生活之中。 从问答对话到辅助编程,从图画解析到自主创作,AI所展现出来的能力,超出了多数人的预料&…

【企业级监控】Zabbix监控网站并发连接数

Zabbix自定义监控项与触发器 文章目录 Zabbix自定义监控项与触发器资源列表基础环境前言一、什么是zabbix的Key值二、获取远程Key值2.1、获得主机的Key值2.2、被监控端安装Agent2.3、zabbix_get命令获取Agent数据举例2.3.1、zabbx_get获取cpu核心数2.3.2、获取目标主机系统和内…

windows中超详细深度学习环境配置之安装显卡驱动、cuda、cudnn、pytorch、torchvision、pycharm

超详细介绍安装Gpu版本的pytorch深度学习环境 一、显卡驱动安装1.1 下载驱动1.2 安装驱动 二、cuda安装2.1 下载cuda2.2 安装cuda2.3 检查cuda是否安装成功 三、安装cudnn3.1 cudnn下载3.2 cudnn安装 四、安装miniconda4.1 miniconda下载4.2 miniconda安装4.3 添加环境变量 五、…

数字营销以打造“会员体系”为主要目标的好处和优势

​蚓链数字化营销实践观察:在数字化时代,企业的营销方式发生了深刻的变革。会员体系作为一种常见的营销策略,在数字营销领域中发挥着越来越重要的作用。 首先,我们来总结一下会员体系的特点和优势 (一)个性…

图注意力网络

【图书推荐】《图神经网络基础、模型与应用实战》_搭建神经网络需要看什么书-CSDN博客 图注意力网络的由来和发展 图注意力网络(GAT)是一种图神经网络(GNN)模型,最早由Petar Velickovic等在2017年提出。它的设计灵感…

Java基础-I/O流

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 字节流 定义 说明 InputStream与OutputStream示意图 说明 InputStream的常用方法 说明 OutputStrea…

Qt基础 | Qt Creator的基本介绍与使用 | 在Visual Studio中创建Qt项目

文章目录 一、Qt Creator的基本介绍与使用1.新建一个项目2.项目的文件组成3.项目文件介绍3.1 项目管理文件3.2 界面文件3.3 主函数文件3.4 窗体相关的文件 4.项目的编译、调试与运行 二、在Visual Studio中创建Qt项目 Qt C开发环境的安装,请参考https://liujie.blog…

C1W1.LAB.Preprocessing+Word frequencies+Logistic_regression_model

理论课:C1W1.Sentiment Analysis with Logistic Regression 文章目录 预处理导入包Twitter dataset简介查看原始文本处理原始文本处理超链接、Twitter 标记和样式分词去除标点和停用词词干处理 process_tweet() 词频构建与可视化导入包加载数据集字典字典实例添加或…

cesium 实现地图环境功能 - 雨,雪,雾特效

需求背景解决效果Codeindex.vuefogEffect.tsrain.glslsnow.glslfog.glsl 需求背景 需要实现天气模拟,日照模拟功能,提高三维实景效果 解决效果 Code 注意:我以下glsl文件时基于 webgl1.0,即cesium,创建球的时候&…

ES的使用示例

1.安装 ES的安装对springboot的版本配置要求很高,需要根据如下的目录下载对应的版本。 查看自己项目所使用的springboot和spring的版本,对应下载文件。 下载链接地址:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-…

微软GraphRAG原理介绍(附带部分源码)

我们前几天写了一篇文章,简单跑了一下GraphRAG看了下效果,没看过这篇文章的可以看下https://www.luxinfeng.top/article/动手实操微软开源的GraphRAG。今天我们介绍一下GraphRAG的实现原理,关于实验对比的内容,我会在下一篇文章中…

48V电源架构解析

48V电源架构解析 48V系统的诞生 汽车在1918年引入蓄电池,到1920年逐渐普及,当时的电池电压是6V。后来,随着内燃机排量的增加以及高压缩比内燃机的出现,6V系统已经不能满足需求,于是在1950年引入了12V系统。大多数汽车…

【python学习】标准库之数学相关math库的定义、功能、使用场景、代码示例和第三方数学相关库NumPy

引言 math模块是Python标准库的一部分,它提供了一系列基本的数学函数和常数。这些函数和常数对于日常的数学运算非常有用,例如计算平方根、计算余弦值等。 文章目录 引言一、math的定义二、math的功能2.1 基本的数学运算2.2 数学常数2.3 随机数 三、math…

八臂-聚乙二醇-生物素;8ARM-PEG-Biotin

一、基本信息 名称:八臂PEG生物素、八臂-聚乙二醇-生物素、Octa-arm PEG Biotin、8ARM-PEG-Biotin 结构:具有八个分支的PEG链,每个分支末端连接生物素分子 状态:固体/粉末/溶液,具体取决于产品规格和存储条件 纯度&…

论文去AI痕秘籍:轻松几步,守护你的学术原创性

如何有效降低AIGC论文的重复率,也就是我们说的aigc如何降重?AIGC疑似度过高确实是个比较愁人的问题。如果你用AI帮忙写了论文,就一定要在交稿之前做一下AIGC降重的检查。一般来说,如果论文的AIGC超过30%,很可能会被判定…

Qt|QTreewidget类下函数qt助手详解说明示例(二)

上篇:Qt|QTreewidget类下函数qt助手详解说明示例(一) 该系列持续更新,喜欢请一键三连,一起学习进步,升职加薪,感谢各位大佬。 QT5.14.2 参考官方QT助手 Kimi辅助说明 文章目录 insertTopLevelI…

浅学三次握手

数据要完成传输,必须要建立连接。由于建立TCP连接的过程需要来回3次,所以,将这个过程形象的叫做三次握手。 结合上面的图来看更清楚。 先说三次握手吧,连接是后续数据传输的基础。就像我们打电话一样,必须保证我和对方…

工作是为了什么

如果经常和总监及以上的领导聊天,就会发现他们与咱们一线程序员的最大不同,并不是编程技能多高深精通,而是分析问题、认知世界的方式。 程序员只关注工作领域的“一亩三分地”,实质上是放弃了自己成长的机会,在工作的…

软件测试——非功能测试

工作职责: 1.负责产品系统测试,包括功能测试、性能测试、稳定性测试、用户场景测试、可靠性测试等。 2.负责测试相关文档的编写,包括测试计划、测试用例、测试报告等。 3.负责自动化测试框架、用例的维护。 岗位要求: 1.熟练…

解决mysql,Navicat for MySQL,IntelliJ IDEA之间中文乱码

使用软件版本 jdk-8u171-windows-x64 ideaIU-2021.1.3 mysql-essential-5.0.87-win32 navicat8_mysql_cs 这个问题我调试了好久,网上的方法基本上都试过了,终于是解决了。 三个地方结果都不一样。 方法一 首先大家可以尝试下面这种方法&#xff1a…