首页 > 其他分享 >为什么前端打包出来的静态文件名字是一串 Hash 值 ?

为什么前端打包出来的静态文件名字是一串 Hash 值 ?

时间:2024-11-07 09:44:46浏览次数:5  
标签:文件 缓存 Hash 静态 打包 启发式 浏览器 资源

前端打包出来的静态文件名带有一串 Hash 值,主要是为了实现以下几个目的:

  1. 缓存有效性:当文件内容发生变化时,Hash 值也随之改变,这意味着浏览器能够识别文件的更新。如果文件内容没有变化,Hash 值保持不变,浏览器可以从缓存中加载文件,节省网络带宽和提高加载速度。

  2. 避免缓存问题:在开发和部署过程中,可能会遇到浏览器缓存旧的文件版本的问题。引入 Hash 值后,即使文件的路径没有变化,当文件内容更新时,Hash 值的变化会确保浏览器下载新的文件,避免了缓存所导致的问题。

  3. 版本控制:Hash 值可以作为文件的唯一标识,这样在文件名中就包含了版本信息。例如,如果你的构建工具生成了一个名为 app.abc123.js 的文件,当更新内容后会生成 app.def456.js。这使得开发团队和管理人员更容易跟踪和管理不同版本的静态资源。

  4. 构建优化:在大型项目中,打包工具(如 Webpack)会根据文件的内容生成 Hash 值,这样可以优化打包过程,促进增量编译和更高效的构建。

  5. 提高安全性:通过结合文件的内容生成 Hash 值,可以降低某些类型的攻击风险。例如,攻击者如果想上传一个恶意文件来替换合法文件,就必须知道文件的具体内容才能生成正确的 Hash,这增加了入侵的难度。

总之,为静态文件名加入 Hash 值旨在提高前端资源的管理、性能和安全性。

启发式缓存

在 Web 应用和浏览器缓存中,服务器通常会通过 HTTP 头部信息(如 Cache-Control、Expires)明确指示一个资源可以缓存多长时间。但有时这些指示可能缺失,或者某些资源的缓存控制信息不完整,客户端就会依赖启发式规则来确定该资源的缓存时长。这种规则可能基于资源的特征、文件类型,或者历史经验等。

启发式缓存的工作原理基于以下几个步骤:

  1. 资源请求:客户端请求某个资源,如果该资源没有明确的缓存过期时间,系统会选择启发式缓存。

  2. 估算缓存时间:基于启发式规则(通常与资源的响应头信息或者资源类型相关),估算资源应该缓存的时间。例如,系统可能会依据资源最后修改的时间、文件类型等来推断合适的缓存时间。

  3. 缓存存储:估算出缓存的时长后,

标签:文件,缓存,Hash,静态,打包,启发式,浏览器,资源
From: https://blog.csdn.net/2301_78659329/article/details/143586282

相关文章

  • 思科设备配置静态路由
    1.环境搭建2.基础配置 地址从左到右分别为192.168.1.0/24,192.168.2.0/24 ,192.168.3.0/24 ,192.168.4.0/24PC0路由器0路由器1路由2PC23.配置路由分析:静态路由每一跳都需要你手写,所以在路由器上0要配置去往192.168.3.0192.168.4.0的地址,环回口地址是单独......
  • 静态路由规则配置
    静态路由配置本质上通过配置虚拟机实现不同网段之间进行通信第一步:准备3台虚拟机第一台网卡配置NAT模式;第二台配置两个网卡,分别为配置NAT模式+LAN区段;第三台配置LAN区段第二步:配置网卡相关信息先查看宿主机(物理机)VMnet8网卡的IP和子网掩码配置网卡相关信息【具体的......
  • 项目不打包加密方法
    不想打包,又不想泄露核心代码怎么办最简单的方法,被动的生成.pyc文件:直接把启动项目后,项目的核心代码生成的__pycache__文件夹里对应的.pyc预编译文件复制出来,然后删掉核心代码xxx.py再把xxx.cpython-39.pyc文件改一下名字改成xxx.pyc这样项目就能正常跑了!!!注意.pyc文件的......
  • Flutter 项目一键打包多个渠道包的实现
    前言在移动开发中,通常需要对应用进行不同渠道的打包,以满足多平台推广需求。本文将介绍如何通过一键打包脚本,实现Flutter项目多渠道打包,并生成指定的渠道APK文件。效果图:实现步骤1.定义渠道索引和名称首先在代码中定义一个渠道索引和渠道名称的数组,以便在打包时区......
  • python项目打包指南
    #Python是解释型语言,我们写的Flask或Django项目如果部署,#源码可能会泄露,因此我们可以把项目打包成exe,来保护源码#需要用到工具-pyinstaller:把python项目打包成不同平台的可执行文件-nsis:NSIS(NullsoftScriptableInstallSystem)是一个开源的Windows系统下安装程序制作......
  • 数组,静态数组,动态数组
    数组是一个容器,可以存放多个元素这些元素的类型必须是一致的1.静态数组数据类型[]   数组名={元素1,元素2,元素3,.......} 通过数组的下标来引用数组中的元素默认数组下标从0开始到length-1。如果数组下标不在这个范围内会出现下标越界错误引用语法:      ......
  • CMU_15445_P2_Extendible_Hash_Table
    到Project2,我们依然在处理数据库存储相关的部分,从Project1中我们应该Get到两个概念:数据库底层数据操作的基本单元是Page.buffer_pool_manager是管理以及组织数据单元Page的工具,在Project2的第一部分,我们还新增了页面守护(PageGuard)的机制更加优雅的获取以及释放......
  • 在 Windows 中,diantz 工具可用于将现有的文件打包为 CAB 文件,类似于 makecab 命令。di
    diantz|MicrosoftLearn.cab文件(Cabinet文件)是一种压缩文件格式,用于存储多个文件或文件夹。它通常用于Windows操作系统中,作为安装包的一部分,尤其是在驱动程序、应用程序和系统文件的分发中。.cab文件通过压缩算法(如LZX或MSZIP)减小文件体积,便于存储和传输。它可以包......
  • 通过VITE/rollup实现一个工程的代码分别打包成SPA(单页面应用)和MPA(多页面应用)
    问题背景我们的客户开发的系统会销售给多个不同的单位使用,并且是需要私有化部署的。在有的客户那里,直接部署完就结束了。但是另外一些客户,提出了一些特别的要求。他们要求我们的系统只需要提供一个个功能页面,无需提供菜单管理等功能。功能页面的调度、管理、权限等工作,则是由......
  • 静态库、动态库、framework、xcframework、use_frameworks!的作用、关联核心SDK工程和
    1.1库的概念库:程序代码的集合,编译好的二进制文件加上头文件供使用,共享程序代码的一种方式。1.2库的分类根据开源情况分为:开源库(能看到具体实现)、闭源库(只公开调用的的接口,是编译后的二进制文件,看不到具体实现,使用时链接即可。)闭源库分为:动态库.td(之前叫.dylib)或.framework......