前端发版上线出现白屏问题

目录

    • 路由配置问题
    • 资源缓存问题
    • 首屏加载过慢

:喂,你的页面白啦!

出现上线白屏的问题有很多,如:配置错误、缓存问题、浏览器兼容问题,根据不同情况去解决。

路由配置问题

问题描述: 在vue开发的前端网页上线后,出现白屏,刷新页面报404错误。

问题分析: 项目上线之后出现白屏,且刷新之后也找不到资源,服务器静态资源文件加载失败,出现这种情况,通常是路由配置的问题。

解决方案:

配置路由:在vue-router的配置中设置mode为history模式(history模式:当用户在地址栏中输入或刷新页面时,浏览器会向服务器发送关于路径的请求),在服务器端配置URL重写规则,即:在Nginx中使用try_files指令,将所有路径都重定向到入口文件(比如index.html),这样即使用户在地址栏中输入或刷新页面,服务器也会正确返回入口文件,而不会出现404错误。

// vue-router配置
const router = new VueRouter({
  mode: 'history',
  routes: [...]
});
// nginx配置
location / {
    root ...
    index ...
    try_files $uri $uri/ /index.html;
}
location @router {
    rewrite ^.*$ /index.html last;
}

资源缓存问题

问题描述: web页面白屏,需要清除缓存数据重新加载才能正常访问。单页面的项目,客户不想每次发版都刷新,也不希望每次都重新加载资源文件(即使是缓存也需要刷新和加载)。

问题分析:

在首次上线项目的时候,build生成的资源文件直接放到服务端上线即可。但之后上线,在客户端会默认缓存index.html入口文件,但vue打包生成的css/js都是hash值,跟上次的文件名都不一样,因此会出现找不到css/js的情况,导致出现白屏的问题。

解决问题: 发版后前端页面白屏,通过刷新才能访问前端页面。我个人觉得这个问题无法解决,因为不管怎么做,服务器资源发生变化了,在web页面更新资源的时候都需要一定的缓冲时间。

优化方案:

1、配置资源缓存

确保index.html不被缓存,这样每次用户访问时都会从服务器获取最新版本。在index.html文件的meta标签中添加缓存控制信息,在服务端的响应头中设置合适的缓存过期时间。对index.html入口文件不缓存,css/js资源设置缓存过期时间。

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<meta http-equiv="Cache" content="no-cache">
// nginx配置
#为了解决线上发布新版本后访问前端页面出现短暂性白屏问题,就是把缓存给禁用掉
location = /index.html {
   add_header Cache-Control "no-store, no-cache, no-transform, must-revalidate, max-age=0";
   add_header Pragma "no-cache";  
   add_header Expires "0";
}

location / {
	#需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404
   try_files $uri $uri/ @router;
   index  index.html index.htm;
}
#对应上面的@router,主要原因是路由的路径资源并不是一个真实的路径,所以无法找到具体的文件
#因此需要rewrite到index.html中,然后交给路由在处理请求资源
location @router {
   rewrite ^.*$ /index.html last;
}

2、增加版本号或时间戳到资源文件名

通过在构建过程中将版本号或时间戳添加到资源文件名中,可以避免浏览器加载旧的缓存资源。

// vue.config.js
module.exports = {  
  outputDir: 'dist',  
  filenameHashing: true, // 确保文件名包含hash  
  chainWebpack: config => {  
    config.output  
      .filename(`js/[name].[contenthash].js`)  
      .chunkFilename(`js/[name].[contenthash].chunk.js`);  
  }  
}

首屏加载过慢

问题描述: 用户打开页面,出现长时间的白屏,特别是对于单页面应用来说。

问题分析:

出现首页长时间白屏的原因有很多:

1、首页需要加载大量的资源或依赖
2、服务器请求速度太慢
3、首页的样式太复杂,需要渲染很长时间
4、浏览器兼容问题

优化方案:

1、代码拆分+按需(懒)加载:将页面依赖的资源进行代码拆分,通过按需加载或懒加载的方式,延迟加载非必要的资源,只有当用户需要访问到某个模块的时候再去加载对应的资源。

2、预加载资源:通过标签来预加载关键资源,提前加载必要资源。

3、CSS优化:可以通过css预编译器来提高css代码的复用性,避免使用过多的CSS样式和复杂的选择器,尽量减少页面重绘和重排的次数,优化CSS文件加载和解析速度。

4、异步加载脚本:将JavaScript脚本放在页面底部或使用defer、async属性进行异步加载,避免脚本阻塞页面渲染。

5、服务器性能优化: 对服务器进行性能优化,如:CDN加速、启用Gzip压缩、配置合适的缓存策略等,提高资源加载速度。

6、服务端渲染:对于单页面应用,考虑使用服务端渲染(SSR)技术,在服务器端生成页面的HTML内容,减少客户端渲染时间,加快首屏加载速度。

7、缓存优化:利用浏览器缓存机制和服务端缓存技术,减少重复请求,加快页面加载速度。

在这里插入图片描述

参考文章:

彻底解决前端发版白屏问题和解决方案

【优化】vue项目缓存引发的白屏

灰度发布、蓝绿部署、金丝雀都是啥?

Vue 项目中首页长时间白屏的原因及解决方法

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ValueError: Cannot load file containing pickled data when allow_pickle=False

问题描述 遇到报错&#xff1a;ValueError: Cannot load file containing pickled data when allow_pickleFalse 解决方案 经过查阅有人说是与numpy的版本有关&#xff0c;但是还是不要轻易改变环境中的版本&#xff0c;不一定哪个地方就会报错。这里放个解决方案&#xff1a;…

【详细讲解yarn的安装和使用】

&#x1f308;个人主页:程序员不想敲代码啊&#x1f308; &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家&#x1f3c6; &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提…

探索MongoDB:发展历程、优势与应用场景

一、MongoDB简介 MongoDB 始于 2007 年&#xff0c;由 Dwight Merriman、Eliot Horowitz 和 Kevin Ryan –&#xff08;DoubleClick 的主理团队&#xff09;共同创立。 DoubleClick 是一家互联网广告公司&#xff08;现隶属于 Google&#xff09;&#xff0c;公司团队开发并利…

数字化转型的密码:传统企业转型路径的深度剖析

引言&#xff1a;数字经济浪潮下的新资产形态 传统行业&#xff0c;如零售、金融、教育等&#xff0c;在如今这场数字化浪潮中&#xff0c;同样需要积极拥抱变革&#xff0c;探索适合自身的转型之路。本文将结合制造业的转型经验&#xff0c;深入探讨传统行…

电脑开机0x0000007B蓝屏怎么办?

电脑开机0x0000007B蓝屏怎么办啊?相信很多用户的电脑都有遇到过蓝屏的问题,最近有用户电脑一开机就蓝屏,并且显示0x0000007B错误代码,原本想通过安全模式进行修复,结果发现安全模式进不去,不知道该怎么解决。这可能与我们的内存或硬盘有关,尝试设置一下硬盘模式,看看是…

嵌入式软件工程师都需要安装哪些软件

文章目录 一、编程软件1.keil2.vscode①Chinese&#xff1a;中文②C/C、C/C Extension Pack③CMake、CMake Tools等代码调试运行的工具④Remote-SSH等&#xff0c;关于远程登录linux服务器的插件 3.Pycharm和Anaconda&#xff0c;用来写python脚本和配置环境&#xff0c;PYQT上…

【Python】搭建 Python 环境

目 录 一.安装 Python二.安装 PyCharm 要想能够进行 Python 开发&#xff0c;就需要搭建好 Python 的环境 需要安装的环境主要是两个部分&#xff1a; 运行环境: Python开发环境: PyCharm 一.安装 Python (1) 找到官方网站 (2) 找到下载页面 选择 “Download for Windows”…

[蓝桥杯 2022 省 A] 求和

[蓝桥杯 2022 省 A] 求和 题目描述 给定 n n n 个整数 a 1 , a 2 , ⋯ , a n a_{1}, a_{2}, \cdots, a_{n} a1​,a2​,⋯,an​, 求它们两两相乘再相加的和&#xff0c;即 S a 1 ⋅ a 2 a 1 ⋅ a 3 ⋯ a 1 ⋅ a n a 2 ⋅ a 3 ⋯ a n − 2 ⋅ a n − 1 a n − 2 ⋅ a…

C语言:动态内存管理(malloc,calloc,realloc,free)

目录 前言 malloc函数 free函数 calloc函数 realloc函数 前言 在这一章节将讲解动态内存分配&#xff0c;它可以在程序的堆区创建一块内存&#xff0c;在这块内存中存什么值就是由自己决定的了 开辟的空间有两个特点&#xff1a; 1. 空间开辟的大小是固定的 2. 数组在…

零基础学习挖掘PHP网站漏洞

教程介绍 本套课程&#xff0c;分为三个阶段&#xff1a;第一阶段&#xff1a;基础篇 学习PHP开发的基础知识&#xff0c;对PHP常见的漏洞进行分析&#xff0c;第二阶段&#xff1a;进阶篇 实战PHP漏洞靶场&#xff0c;了解市面上的PHP主流网站开发技术&#xff0c;并对市面上…

JAVA获取免费天气

JAVA调用天气代码示例 前沿&#xff1a;最近在开发任务中需要获取每日的实时天气和天气预报&#xff0c;要求还是免费的。在网络上搜索了一下免费的API并有了以下思路 免费API网址&#xff1a;https://dev.qweather.com/docs/api/grid-weather/grid-weather-now/ 调用格林天…

工程企业的未来选择:Java版工程项目管理系统平台与数字化管理的融合

在现代化的工程项目管理中&#xff0c;一套功能全面、操作便捷的系统至关重要。本文将介绍一个基于Spring Cloud和Spring Boot技术的Java版工程项目管理系统&#xff0c;结合Vue和ElementUI实现前后端分离。该系统涵盖了项目管理、合同管理、预警管理、竣工管理、质量管理等多个…

基于Colab训练的yolov4-tiny自定义数据集(可用于OpenCV For Unity)

参考资料文档和视频。 1.打开文档,点击【文件】【在云端硬盘中保存一份副本】,即将文档复制到自己云端硬盘。 2.打开该文件,按文中提示进行。 【代码执行程序】【更改运行时类型】修改运行时为GPU(免费的GPU不好用,收费的好用,某宝上几十元就可用一个月) 步骤1) !git…

大数据面试题 —— Kafka

目录 消息队列 / Kafka 的好处消息队列的两种模式什么是 KafkaKafka 优缺点你在哪些场景下会选择 Kafka讲下 Kafka 的整体结构Kafka 工作原理 / 流程Kafka为什么那么快/高效读写的原因 / 实现高吞吐的原理生产者如何提高吞吐量&#xff08;调优&#xff09;kafka 消息数据积压&…

python爬虫-----输入输出与流程控制语句(第四天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

力扣:字母迷宫,python

这里写自定义目录标题 问题描述题解踩坑记录global和nonlocal关键字的区别&#xff1a;类中可以用实例变量替换全局变量 问题描述 字母迷宫游戏初始界面记作 m x n 二维字符串数组 grid&#xff0c;请判断玩家是否能在 grid 中找到目标单词 target。 注意&#xff1a;寻找单词…

【C++ leetcode】双指针(专题完结)

15. 三数之和 题目 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的…

P1443马的遍历 典bfs

题目&#xff1a; 代码&#xff1a; #include<algorithm> #include<iostream> #include<cstring> #include<queue>using namespace std;int n,m;int dx[] {-1,-1,-2,-2,1,1,2,2}; int dy[] {-2,2,-1,1,-2,2,-1,1}; bool vis[450][450];struct node{…

秋招打卡算法题第一天

一年多没有刷过算法题了&#xff0c;已经不打算找计算机类工作了&#xff0c;但是思来想去&#xff0c;还是继续找吧。 1. 字符串最后一个单词的长度 public static void main(String[] args) {Scanner in new Scanner(System.in);while(in.hasNextInt()){String itemin.nextL…

Ubuntu 下统计文件数量的命令

参考:https://blog.csdn.net/kxh123456/article/details/123811580 查看当前目录下的文件数量&#xff08;不包含子目录中的文件&#xff09; ls -l|grep "^-"| wc -l实例展示&#xff1a;如下图所示&#xff0c;当前路径下&#xff0c;有2个json文件和2个文件夹&a…