购物网站建设要多少钱/利用搜索引擎营销成功的案例
Vue 性能优化的方法
Vue 性能优化的方法多种多样,以下是一些常用的策略:
- 使用v-show替换v-if:v-show是通过CSS控制元素的显示与隐藏,而v-if是通过操作DOM来控制元素的显示与隐藏,频繁操作DOM会导致性能下降。因此,在需要频繁切换显示状态的情况下,使用v-show更为高效。
- 合理使用key:在使用v-for时,为每一项item设置唯一key值,可以方便Vue.js内部机制精准找到该条列表数据,在state更新时,较快地定位到diff,从而提高渲染性能。
- 避免v-for与v-if结合使用:v-for的优先级高于v-if,如果两者同时使用,每次v-for循环时都需要进行v-if判断,这会影响性能。推荐的做法是将v-if放在v-for的外层,通过计算属性或过滤器来减少不必要的渲染。
- 合理使用watch和computed:watch适用于执行异步或开销较大的操作,或者需要对数据变化作出特定响应的场景;computed则用于根据已有的响应式数据计算出一个新的值,并会进行缓存,只有在相关响应式数据改变时才会重新计算。这样可以避免不必要的重复计算,提高性能。
- 组件缓存:使用keep-alive组件可以缓存不活动的组件实例,而不是销毁它们。这对于包含大量静态内容的组件特别有效,可以显著提高性能。
- 路由懒加载:通过路由懒加载,只有在使用到对应的页面时才会加载相关的代码,这可以减少初始加载的代码量,提升网页的加载速度。
- 资源管理:将静态资源放在第三方CDN服务器上,如CSS、JS、图片等,可以提高页面加载速度,减少项目打包后的体积,并利用浏览器缓存。
- 节流和防抖技术:在事件处理、滚动加载、搜索框输入等场景下,使用节流和防抖技术可以有效地减少不必要的计算和操作,提升页面性能和用户体验。
v-if 和 v-for 在 Vue 中的优先级及优化
-
优先级:v-for的优先级高于v-if。
-
优化建议:
- 如果v-if和v-for同时出现在一个元素上,推荐将v-if放在v-for的外层,或者使用计算属性先过滤掉不需要渲染的数据,然后再进行v-for渲染。
- 避免在v-for内部使用复杂的计算或方法调用,这会导致每次渲染时都需要重新计算或调用,影响性能。
使用 Vue 渲染大量数据时的优化策略
- 列表分页:将大量数据分页加载,只渲染当前页的数据,可以减少初始加载时间和内存占用。
- 虚拟滚动:当列表中的数据数量非常大时,使用虚拟滚动可以避免渲染所有的数据,只渲染可见区域的数据。
- 懒加载:对于需要异步加载的数据,可以使用懒加载的方式,在用户滚动到某个位置时再去加载数据并渲染。
- 数据缓存:对于静态的大量数据,可以将其缓存到本地或使用浏览器的缓存机制,避免每次都从服务器获取数据。
Vue 缓存当前组件及更新方法
-
缓存方法:
- 使用keep-alive组件可以缓存不活动的组件实例。
- 使用Vuex或localStorage等状态管理工具来持久化组件状态。
-
更新方法:
- 当组件状态发生变化时,如果使用了keep-alive,则组件实例不会被销毁,而是会触发其activated和deactivated生命周期钩子。可以在这些钩子中处理组件状态的更新。
- 如果使用了Vuex或localStorage等状态管理工具,则需要通过相应的API来更新状态。
解决 Vue 打包时 vendor 文件过大的问题
- 减少依赖包大小:选择轻量级的库和插件,去除未使用的依赖项。
- 代码分割:将应用拆分成多个小块,按需加载,减少初始加载时间。
- Tree Shaking:在打包过程中移除未使用的代码,减少打包体积。
- 使用CDN:将一些常用的库和资源通过CDN引入,减少打包体积和服务器压力。
解决 SPA 单页应用首屏加载速度慢的问题
- 代码分割:通过代码分割,将应用程序的代码分割成多个小块,并在需要时才进行加载。
- 图片优化:压缩图片大小、使用WebP格式等方式来减少图片大小。
- 按需加载:对于不必要的组件或图片,采用按需加载的方式。
- 数据缓存:避免每次都重新请求数据,减少数据请求时间。
- 使用CDN:将一些静态资源放在CDN上,减少页面加载时间。
- 骨架屏:在页面加载过程中显示一个骨架屏,提高用户体验。
综上所述,Vue性能优化需要从多个方面入手,包括DOM操作、组件渲染、资源管理、状态管理等。通过合理使用Vue提供的各种工具和技巧,可以显著提高应用的性能和用户体验。
1. 使用 import
时,Webpack 如何处理 node_modules
中的依赖?
- 依赖解析:Webpack 会从
node_modules
文件夹中解析模块,根据配置的resolve.mainFields
,优先选择模块的入口文件(通常是main
或module
字段)。 - 代码优化:
- Tree Shaking:如果依赖支持 ES Modules(如使用
module
字段),Webpack 会移除未使用的代码。 - 缓存与分包:通过配置
SplitChunksPlugin
,将第三方依赖分离到独立的 chunk,优化缓存利用。
- Tree Shaking:如果依赖支持 ES Modules(如使用
2. Webpack 中的 bundle、chunk 和 module 是什么?
- Module(模块):
- 代码的最小单元,例如一个 JS 文件、CSS 文件或图片文件。
- Chunk(代码块):
- Webpack 按需或按配置生成的代码块,由多个模块组成。
- 如
main.js
或异步加载的vendor.js
。
- Bundle(打包文件):
- Webpack 最终输出的文件,包含多个 chunk 的内容。
3. 常见的 Webpack Loader 有哪些?
- JavaScript 转译:
babel-loader
:转译 ES6+ 代码。
- CSS 处理:
css-loader
:解析@import
和url()
。style-loader
:将 CSS 插入到 DOM 中。postcss-loader
:使用插件处理 CSS(如自动添加前缀)。sass-loader
:编译 Sass/SCSS。
- 文件处理:
file-loader
:处理文件并输出 URL。url-loader
:将小文件转为 Base64,大文件走file-loader
。
- 图片优化:
image-webpack-loader
:优化图片体积。
- 模板引擎:
html-loader
:处理 HTML 中的资源引用。
- 其他:
ts-loader
:处理 TypeScript 文件。vue-loader
:解析 Vue 单文件组件。
4. Webpack 和 Rollup、Parcel 构建工具有什么区别?
特性 | Webpack | Rollup | Parcel |
---|---|---|---|
定位 | 通用模块打包器 | 专注于 JS 库/框架 | 零配置应用程序打包工具 |
配置 | 灵活,但需要手动配置 | 配置较少,简单易用 | 零配置 |
Tree Shaking | 支持,但依赖配置 | 默认支持,效果更好 | 支持,但功能较弱 |
性能 | 插件丰富但较慢 | 适合打包小型库,体积更小 | 快速,内置多线程 |
适用场景 | 前端应用程序开发 | 构建 JS 库或框架 | 快速开发原型或简单项目 |
5. 如何使用 webpack-dev-server
监控文件编译?
- 安装:
npm install webpack-dev-server --save-dev
- 配置:
在webpack.config.js
中添加:devServer: {contentBase: './dist',port: 8080,hot: true, // 开启热更新watchContentBase: true, // 监听静态文件变化 }
- 启动服务:
npx webpack serve
6. 常用的前端性能分析工具?
- 浏览器工具:
- Chrome DevTools(Performance、Lighthouse、Coverage)。
- 线上服务:
- Google PageSpeed Insights。
- WebPageTest。
- 性能监控平台:
- Sentry。
- New Relic。
- 性能测试工具:
- Lighthouse CLI。
- Puppeteer。
7. 前端项目中如何配置 HTTP 缓存机制?
- 强缓存:
- 设置
Cache-Control
或Expires
头。
Cache-Control: max-age=31536000
- 设置
- 协商缓存:
- 配置
ETag
和Last-Modified
。
ETag: "5d8c72a5" Last-Modified: Tue, 15 Nov 2022 12:45:26 GMT
- 配置
- 版本化文件:
- 使用 Webpack 的
contenthash
生成文件名。
- 使用 Webpack 的
8. 如何优化 Webpack 的打包速度?
- 缓存:
- 使用
cache
:cache: { type: 'filesystem' }
- 使用
- 缩小范围:
- 使用
include
限制loader
处理范围。 - 忽略不必要的文件:
module.noParse: /jquery|lodash/
- 使用
- 并行构建:
- 使用
thread-loader
或HappyPack
。
- 使用
- 减少输出:
- 在开发模式下,禁用文件压缩:
optimization: { minimize: false }
- 在开发模式下,禁用文件压缩:
9. 有哪些前端网站性能优化的关键点?
- 网络优化:
- 使用 CDN 加速。
- 启用 HTTP/2。
- 资源优化:
- 图片懒加载。
- 使用代码拆分,按需加载。
- 缓存策略。
- 渲染优化:
- 优化 CSS 和 JS。
- 避免长时间运行的 JavaScript。
10. 前端项目中,如何优化首屏渲染时间?
- 减少首屏内容:只加载首屏所需内容,其他内容按需加载。
- SSR 和静态化:使用 Vue 的服务端渲染(SSR)或预渲染。
- 资源优化:使用
gzip
压缩、CDN 和缓存。 - 快速显示骨架屏:通过 CSS 或预渲染提供骨架屏。
11. 前端如何处理后端接口一次性返回的超大树形结构数据?
- 按需加载:
- 使用懒加载技术,只加载用户展开部分。
- 分页加载:
- 将数据按页分片,结合
scroll
事件加载更多。
- 将数据按页分片,结合
- 虚拟列表:
- 使用如
vue-virtual-scroller
渲染视口内的数据。
- 使用如
12. 如何在页面内一次性渲染 10 万条数据,并保证页面不卡顿?
- 虚拟滚动:
- 使用库如
react-window
或vue-virtual-scroller
。
<virtual-scroller :items="items" :page-size="30" />
- 使用库如
- 分批渲染:
- 使用
requestAnimationFrame
分段更新:const chunkRender = (data, start = 0, chunkSize = 1000) => {if (start >= data.length) return;requestAnimationFrame(() => {renderChunk(data.slice(start, start + chunkSize));chunkRender(data, start + chunkSize, chunkSize);}); };
- 使用
13. 如何在浏览器中执行 100 万个任务,并保证页面不卡顿?
- 任务分片:
- 使用
setTimeout
或requestIdleCallback
:const tasks = Array(1e6).fill(0); function processChunk() {const chunk = tasks.splice(0, 1000); // 每次处理 1000 个任务chunk.forEach(task => { /* 执行任务 */ });if (tasks.length) {setTimeout(processChunk, 0); // 下一帧继续} } processChunk();
- 使用
- Web Workers:
- 将计算密集型任务移到 Worker 中执行。
14. 在网页中有大量图片时,如何优化图像加载以提高页面加载速度?
- 延迟加载:
- 使用
IntersectionObserver
实现懒加载。
- 使用
- 使用合适的图片格式:
- 使用 WebP 等高压缩比格式。
- 响应式图片:
- 使用
<picture>
标签根据屏幕分辨率加载不同大小的图片。
- 使用
- 图片压缩:
- 使用工具(如 ImageMagick 或 TinyPNG)减小图片体积。
- 使用 CDN:
- 减少图片的传输时间和延迟。
如何在前端实现一个实时自动补全搜索框?
在前端实现一个实时自动补全搜索框通常涉及以下几个步骤:
- 用户输入监听:使用JavaScript监听用户在搜索框中的输入事件。
- 请求后端数据:根据用户输入的内容,向后端发送请求,获取相关的自动补全建议。
- 展示建议:将后端返回的建议以列表形式展示给用户,通常是一个下拉列表。
- 用户选择:当用户从下拉列表中选择某个建议时,将该建议填充到搜索框中或执行其他相关操作。
如何在前端实现国际化,并根据用户设置自动切换语言?
在前端实现国际化并根据用户设置自动切换语言,可以使用i18n(国际化)相关的库或工具,如i18n-webpack-plugin(专为Webpack设计的国际化插件)。实现步骤通常包括:
- 准备语言文件:为每种语言准备相应的语言文件,包含所有需要国际化的字符串和对应的翻译。
- 配置国际化插件:在Webpack项目中配置i18n-webpack-plugin或其他国际化插件,将语言文件嵌入到生成的bundle中。
- 检测用户语言设置:通过浏览器的语言设置或用户手动选择的语言,确定当前用户的语言偏好。
- 切换语言:根据用户的语言偏好,从语言文件中获取对应的翻译,并更新页面上的文本内容。
常见的登录鉴权方式有哪些?各自的优缺点是?
常见的登录鉴权方式包括:
-
Session-Cookie:
- 优点:简单、易于实现。
- 缺点:依赖于服务器存储Session信息,存在跨域问题,且安全性相对较弱(如易受到XSS攻击)。
-
Token-Based Authentication(如JWT):
- 优点:无状态、可扩展性好、易于跨域。
- 缺点:Token过期处理较复杂,且Token通常存储在客户端,存在被窃取的风险。
-
OAuth:
- 优点:支持第三方授权,用户无需在多个应用间重复登录。
- 缺点:实现复杂,涉及多个参与方(客户端、资源服务器、授权服务器等)。
-
OpenID Connect:
- 优点:基于OAuth的扩展,提供了用户身份信息的标准格式。
- 缺点:实现相对复杂,需要额外的配置和集成工作。
前端开发中的 Live-Reload 自动刷新与 HMR 热模块替换有什么区别?
前端开发中的Live-Reload自动刷新与HMR(Hot Module Replacement)热模块替换的区别如下:
-
Live-Reload:
- 原理:当代码发生变化时,整个页面会自动刷新以显示最新的内容。
- 优点:实现简单,易于理解和使用。
- 缺点:页面刷新会导致当前状态丢失,用户体验较差。
-
HMR:
- 原理:Webpack在构建时会插入HMR运行时代码,通过WebSocket监听文件的变化。当检测到代码文件修改并保存后,Webpack会重新打包这些变化的模块,并发送到浏览器端进行替换,无需刷新整个页面。
- 优点:保持应用状态不丢失,用户体验更好。可以只更新变化的模块,提高开发效率。
- 缺点:实现相对复杂,需要Webpack等构建工具的支持。
如何使用 Webpack 处理内联 CSS?
使用Webpack处理内联CSS可以通过以下步骤实现:
- 安装相关Loader:如
raw-loader
,用于将CSS文件作为字符串内联到JavaScript代码中。 - 配置Webpack:在
webpack.config.js
中配置raw-loader
来处理CSS文件。 - 在JavaScript中引入CSS:使用
require
或import
语句将CSS文件作为字符串引入,并内联到HTML或组件中。
例如,可以在HTML模板文件中使用${require("raw-loader!./style.css").default}
来内联CSS。
如何使用 Webpack 解决开发环境中的跨域问题?
使用Webpack解决开发环境中的跨域问题可以通过配置Webpack的devServer.proxy
选项来实现。具体步骤如下:
- 配置Webpack的devServer:在
webpack.config.js
中配置devServer
对象。 - 设置proxy:在
devServer
对象中添加proxy
选项,指定需要代理的接口和目标服务器地址。
例如:
devServer: {proxy: {'/api': {target: 'http://localhost:3000', // 目标服务器地址changeOrigin: true, // 是否允许代理pathRewrite: { '^/api': '' } // 重写接口名}}
}
这样,当访问/api
开头的接口时,Webpack会将请求代理到http://localhost:3000
上,从而解决跨域问题。
前端开发中如何优化网络请求和资源加载?具体怎么实现?
前端开发中优化网络请求和资源加载的方法包括:
- 合并与压缩资源:使用Webpack等工具将多个JavaScript、CSS文件合并成一个文件,并进行压缩以减少文件大小。
- 使用CDN:将常用的第三方库或静态资源通过CDN进行分发,减轻服务器的负载并提高加载速度。
- 缓存策略:利用浏览器缓存机制,将不经常变化的资源缓存到本地,减少重复请求。
- 懒加载与按需加载:对于图片、视频等非关键资源,采用懒加载方式;对于大型JavaScript库或组件,采用按需加载方式以减少初始加载时间。
- 减少HTTP请求:通过合并CSS、JavaScript文件、使用雪碧图等方式减少HTTP请求的数量。
- 使用HTTP/2:HTTP/2支持多路复用和服务器推送等特性,可以显著提高网络请求的效率。
如何使用 Webpack 优化产出代码?
使用Webpack优化产出代码的方法包括:
- 代码分割:使用Webpack的代码分割功能将代码拆分成多个小块,按需加载以减少初始加载时间。
- 代码压缩:使用Terser等压缩工具对JavaScript代码进行压缩以减少文件大小。
- Tree Shaking:移除未使用的代码以减少最终包的体积。Webpack 5引入了摇树优化功能,可以自动移除未使用的代码。
- 持久化缓存:Webpack 5引入了持久化缓存功能,可以显著提高重复构建的效率。
- 优化Loader配置:合理配置Loader以避免不必要的转换和处理,提高构建速度。
- 使用DllPlugin:将常用库预先编译并打包成DLL文件,然后在主项目中引用这些DLL文件以减少重复编译的时间。
Webpack 中,常见的图片处理加载器有哪些?
Webpack中常见的图片处理加载器包括:
- file-loader:将图片文件输出到输出目录,并返回文件的URL。
- url-loader:类似于file-loader,但可以将较小的文件转换为Base64编码的URL并内联到代码中。通过配置
limit
选项可以指定文件大小阈值。 - image-webpack-loader:用于压缩图片文件以减小最终打包文件的大小。通常与其他Loader(如url-loader或file-loader)结合使用。
如何使用 Webpack 和 Localstorage 实现静态资源的离线缓存?
使用Webpack和LocalStorage实现静态资源的离线缓存可以通过以下步骤实现:
- 打包资源:使用Webpack将静态资源(如JavaScript、CSS、图片等)打包成一个或多个文件。
- 缓存资源:在应用程序加载时,检查LocalStorage中是否已缓存了这些资源。如果已缓存,则直接从LocalStorage中加载;否则,从网络加载并将资源缓存到LocalStorage中。
- 更新缓存:当资源发生更新时,需要更新LocalStorage中的缓存。可以通过版本号或哈希值来判断资源是否已更新。
需要注意的是,LocalStorage的存储空间有限(通常为5MB左右),因此只适合存储较小的静态资源。对于较大的资源或需要频繁更新的资源,建议考虑其他缓存策略(如Service Workers)。
什么是 Webpack?它有什么作用?
Webpack是一个模块打包工具,主要用于将前端项目中的各种资源(如JavaScript、CSS、图片等)打包在一起,实现自动化构建。它的作用包括:
- 模块打包:将多个模块(如JavaScript文件、CSS文件、图片等)打包成一个或多个文件,方便在浏览器中使用。
- 资源转换:支持通过加载器(loaders)对不同类型的资源进行转换,例如将ES6+代码转换为ES5代码,或将SCSS/LESS文件转换为CSS文件。
- 代码优化:提供了多种优化功能,如代码压缩、分割代码、生成source maps等,以提高代码的加载速度和调试效率。
- 自动化构建:可以自动化处理项目的构建流程,包括编译、打包、压缩、优化等,大大提高了开发效率。
- 插件系统:提供了丰富的插件系统,开发者可以通过插件扩展Webpack的功能,满足各种复杂的构建需求。
Webpack是一个功能强大的前端构建工具,能够帮助开发者有效地管理和打包现代JavaScript应用程序,提高开发效率和项目性能。
1. 如何使用 Webpack 进行前端性能优化?
-
Tree Shaking:
- 移除未使用的代码,确保使用 ES Modules。
optimization: {usedExports: true, }
-
代码分割:
- 使用
SplitChunksPlugin
分离第三方库和业务代码。
optimization: {splitChunks: {chunks: 'all',}, }
- 使用
-
动态加载:
- 使用
import()
动态加载组件:
const component = () => import('./MyComponent.vue');
- 使用
-
压缩代码:
- 使用
TerserPlugin
压缩 JS。 - 使用
css-minimizer-webpack-plugin
压缩 CSS。
- 使用
-
静态资源优化:
- 压缩图片:使用
image-webpack-loader
。 - 小资源转 Base64:通过
url-loader
。
- 压缩图片:使用
-
缓存优化:
- 使用
contenthash
生成文件名:
output: {filename: '[name].[contenthash].js', }
- 使用
-
开发环境加速:
- 使用
webpack-dev-server
和热模块替换(HMR)。
- 使用
2. 如何在 Webpack 中实现条件组件的按需打包?
-
动态导入:
- 使用 ES 模块的
import()
:
const loadComponent = (condition) => {if (condition) {return import('./ComponentA.vue');} else {return import('./ComponentB.vue');} };
- 使用 ES 模块的
-
环境变量控制:
- 使用
DefinePlugin
注入环境变量:
new webpack.DefinePlugin({IS_PRODUCTION: JSON.stringify(process.env.NODE_ENV === 'production'), });
- 在代码中条件加载:
if (IS_PRODUCTION) {import('./ProdComponent.vue'); } else {import('./DevComponent.vue'); }
- 使用
-
路由懒加载:
- 使用 Vue Router 按需加载组件:
const routes = [{path: '/home',component: () => import('./Home.vue'),}, ];
3. 前端如何使用 Webpack 进行高效分包优化?
-
Vendor 分包:
- 把第三方库分离到独立的 chunk:
optimization: {splitChunks: {cacheGroups: {vendors: {test: /[\\/]node_modules[\\/]/,name: 'vendors',chunks: 'all',},},}, }
-
动态导入:
- 按需加载模块,避免加载全部内容。
-
共享依赖:
- 使用
externals
排除公共库,直接通过 CDN 加载。
externals: {vue: 'Vue', },
- 使用
-
分析包结构:
- 使用
webpack-bundle-analyzer
检查包内容:
npx webpack-bundle-analyzer stats.json
- 使用
4. 前端项目中资源的缓存配置策略有哪些?
-
强缓存:
- 使用
Cache-Control
和Expires
。
Cache-Control: max-age=31536000
- 使用
-
协商缓存:
- 配置
ETag
和Last-Modified
:
ETag: "xyz123" Last-Modified: Tue, 01 Dec 2023 12:00:00 GMT
- 配置
-
文件名哈希:
- Webpack 中启用
contenthash
:
output: {filename: '[name].[contenthash].js', }
- Webpack 中启用
-
资源分组:
- 把需要频繁更新的资源与稳定资源分开,优化缓存命中率。
5. 如何优化 Webpack 打包后文件的体积?
-
Tree Shaking:
- 清除未使用的代码:
optimization: {usedExports: true, }
-
按需加载:
- 动态导入需要的模块。
-
压缩资源:
- 使用
TerserPlugin
压缩 JS。 - 使用
css-minimizer-webpack-plugin
压缩 CSS。
- 使用
-
移除无用依赖:
- 检查
node_modules
中是否存在冗余依赖。
- 检查
-
使用现代库:
- 替换大型库(如
lodash
)为更小的替代方案(如lodash-es
或单个函数)。
- 替换大型库(如
6. 同一前端页面的 3 个组件请求同一个 API 并发送了 3 次请求,如何优化?
-
使用状态管理:
- 使用 Vuex/Pinia 缓存请求数据,避免重复请求。
-
请求合并:
- 使用共享的
Promise
缓存:
let apiCache = null; function fetchData() {if (!apiCache) {apiCache = axios.get('/api/data');}return apiCache; }
- 使用共享的
-
事件总线:
- 通过全局事件总线广播数据到多个组件。
-
服务端优化:
- 在后端设计 API,将多次请求合并为一个批量请求。
7. 什么是 Webpack 的 bundle、chunk 和 module?分别有什么作用?
- Module:
- 代码的最小单元,可以是 JS、CSS、图片等资源。
- 作用:提供独立的功能或资源。
- Chunk:
- 由多个模块组成的代码块,可以是同步或异步加载。
- 作用:用于按需加载,优化性能。
- Bundle:
- Webpack 打包输出的文件。
- 作用:包含可供浏览器直接使用的代码。
8. Webpack 插件底层的实现原理是什么?
Webpack 插件基于 事件钩子 和 Tapable 实现。
- Compiler 和 Compilation:
Compiler
:代表 Webpack 的完整生命周期。Compilation
:代表一次打包过程。
- Tapable:
- Webpack 使用 Tapable 实现事件系统。
- 插件通过
compiler.hooks
注册钩子。
- 插件实现示例:
class MyPlugin {apply(compiler) {compiler.hooks.emit.tap('MyPlugin', (compilation) => {console.log('生成资源时触发!');});} } module.exports = MyPlugin;
9. Core Web Vitals 是什么?它包括哪些指标?
Core Web Vitals 是 Google 提出的用户体验关键性能指标,包括:
-
LCP(Largest Contentful Paint):
- 测量页面主要内容加载完成的时间,目标 ≤ 2.5 秒。
-
FID(First Input Delay):
- 测量首次用户交互到响应的延迟时间,目标 ≤ 100 毫秒。
-
CLS(Cumulative Layout Shift):
- 测量页面布局的视觉稳定性,目标 ≤ 0.1。
重要性:
- 提升用户体验。
- 对 SEO 有直接影响。
相关文章:

前端面试热门题(二)[html\css\js\node\vue)
Vue 性能优化的方法 Vue 性能优化的方法多种多样,以下是一些常用的策略: 使用v-show替换v-if:v-show是通过CSS控制元素的显示与隐藏,而v-if是通过操作DOM来控制元素的显示与隐藏,频繁操作DOM会导致性能下降。因此&am…...

mvc基础及搭建一个静态网站
mvc asp.net core mvc环境 .net8vscode * Asp.Net Core 基础* .net8* 前辈* .net 4.9 非跨平台版本 VC* 跨平台版本* 1.0* 2.0* 2.1* 3.1* 5* 语言* C#* F# * Visual Basic* 框架* web应用* asp应用* WebFrom* mvc应用* 桌面应用* Winform* WPF* Web Api api应用或者叫服务* …...

AOSP的同步问题
repo sync同步时提示出错: error: .repo/manifests/: contains uncommitted changesRepo command failed due to the following UpdateManifestError errors: contains uncommitted changes解决方法: 1、cd 进入.repo/manifests cd .repo/manifests2、执行如下三…...

HarmonyOS4+NEXT星河版入门与项目实战(23)------实现手机游戏摇杆功能
文章目录 1、案例效果2、案例实现1、代码实现2、代码解释4、总结1、案例效果 2、案例实现 1、代码实现 代码如下(示例): import router from @ohos.router import {ResizeDirection } from @ohos.UiTest import curves...

Logistic Regression(逻辑回归)、Maximum Likelihood Estimatio(最大似然估计)
Logistic Regression(逻辑回归)、Maximum Likelihood Estimatio(最大似然估计) 逻辑回归(Logistic Regression,LR)逻辑回归的基本思想逻辑回归模型逻辑回归的目标最大似然估计优化方法 逻辑回归…...

Vue文字转语音实现
在开发流程中,面对语音支持的需求,小规模语音内容或许可以通过预处理后播放来轻松应对,但当涉及大量语音时,这一方法就显得繁琐低效了。为此,智慧的开发者们总能找到便捷的解决方案——利用Web技术实现语音播放&#x…...

Docker快速部署RabbitMq
在外网服务器拉取镜像 docker pull arm64v8/rabbitmq:3.8.9-management或者拉去我的服务器的 docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_rabbitmq:3.8.9-management重新命名 docker tag registry.cn-hangzhou.aliyuncs.com/qiluo-images/lin…...

glog在vs2022 hello world中使用
准备工作 设置dns为阿里云dns 223.5.5.5,下载cmake,vs2022,git git clone https://github.com/google/glog.git cd glog mkdir build cd build cmake .. 拷贝文件 新建hello world并设置 设置预处理器增加GLOG_USE_GLOG_EXPORT;GLOG_NO_AB…...

[241129] Docker Desktop 4.36 发布:企业级管理功能、WSL 2 增强 | Smile v4.0.0 发布
目录 Docker Desktop 4.36 发布:企业级管理功能、WSL 2 和 ECI 增强Smile v4.0.0 发布!Java 机器学习库迎来重大升级 Docker Desktop 4.36 发布:企业级管理功能、WSL 2 和 ECI 增强 Docker Desktop 4.36 带来了强大的更新,简化了…...

CentOS使用chrony服务进行时间同步源设置脚本
CentOS使用chrony服务进行时间同步源设置脚本 #!/bin/bash# Created: 2024-11-26 # Function: Check and Set OS time sync source to 10.0.11.100 # FileName: centos_set_time_source_to_ad.sh # Creator: Anster # Usage: # curl http://webserver-ip/scripts/centos_set…...

Git仓库迁移到远程仓库(源码、分支、提交)
单个迁移仓库 一、迁移仓库 1.准备工作 > 手动在电脑创建一个临时文件夹,CMD进入该目录 > 远程仓库上创建一个同名的空仓库 2.CMD命令:拉取旧Git仓库(包含提交、分支、源码) $ git clone --bare http://git.domain.cn/…...

【算法刷题指南】优先级队列
🌈个人主页: 南桥几晴秋 🌈C专栏: 南桥谈C 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据…...

使用pymupdf提取PDF文档中的文字和其颜色
最近我在捣鼓一个PDF文件,想把它里面的文字和文字颜色给提取出来。后来发现有个叫pymupdf的库能搞定这事儿。操作起来挺简单的,pymupdf的示例文档里就有现成的代码可以参考。 how-to-extract-text-with-color 我本地的测试代码如下: impor…...

贪心算法题
0简介 0.1什么是贪心算法 贪心算法是用贪婪(鼠目寸光)的角度,找到解决问题的最优解 贪心策略:(从局部最优 --> 整体最优) 1把解决问题的过程分为若干步; 2解决每一个问题时,都选择当前“看上去”最优的解法; 3“…...

Python 3 教程第33篇(MySQL - mysql-connector 驱动)
Python MySQL - mysql-connector 驱动 MySQL 是最流行的关系型数据库管理系统,如果你不熟悉 MySQL,可以阅读我们的 MySQL 教程。 本章节我们为大家介绍使用 mysql-connector 来连接使用 MySQL, mysql-connector 是 MySQL 官方提供的驱动器。…...

23种设计模式之外观模式
目录 1. 简介2. 代码2.1 SelectFoodService (选择食品)2.2 PayService (支付服务)2.3 TakeService (制作服务)2.4 OrderService (下单服务)2.5 Food (食品)2.6 TackingSystem (外观类)2.7 Test (测试类) 3. 优缺点3. 总结 1. 简介…...

GateWay使用手册
好的,下面是优化后的版本。为了提高可读性和规范性,我对内容进行了结构化、简化了部分代码,同时增加了注释说明,便于理解。 1. 引入依赖 在 pom.xml 中添加以下依赖: <dependencies><!-- Spring Cloud Gate…...

MySQL1.0
1.数据库的三大范式 范式是为了使数据库设计更加合理,规范,减少数据冗余和数据不一致等问题指定的一系列规则。 第一范式:第一范式要求数据表中的每一列都是不可分割的原子数据项。例如:有一个学生信息表,包含 “学生…...

IDEA使用HotSwapHelper进行热部署
目录 前言JDK1.8特殊准备DECVM安装插件安装与配置参考文档相关下载 前言 碰到了一个项目,用jrebel启动项目时一直报错,不用jrebel时又没问题,找不到原因,又不想放弃热部署功能 因此思考能否通过其他方式进行热部署,找…...

简单web项目自定义部署Dockerfile
本意就是弄清楚如何做web自定义项目的镜像。 基础镜像是java:8u261-jdk,其中java路径为/opt/java webdemo1.0.0.1-SNAPSHOT.jar文件里面已经包含了lib文件。 可以设置PATH也可以不设置,但是建议设置JAVA_HOME FROM swr.cn-north-4.myhuaweicloud.com…...

基础Web安全|SQL注入
基础Web安全 URI Uniform Resource Identifier,统一资源标识符,用来唯一的标识一个资源。 URL Uniform Resource Locator,统一资源定位器,一种具体的URI,可以标识一个资源,并且指明了如何定位这个资源…...

SpringBoot -拦截器Interceptor、过滤器 Filter 及设置
Spring Boot拦截器(Interceptor)的概念 - 在Spring Boot中,拦截器是一种AOP的实现方式。它主要用于<font style"color:#DF2A3F;">拦截请求</font>,在请求处理之前和之后执行特定的代码逻辑。与过滤器不同的…...

C++小问题
怎么分辨const修饰的是谁 是限定谁不能被改变的? 在C中,const关键字的用途和位置非常关键,它决定了谁不能被修改。const可以修饰变量、指针、引用等不同的对象,并且具体的作用取决于const的修饰位置。理解const的规则能够帮助我们…...

avcodec_alloc_context3,avcodec_open2,avcodec_free_context,avcodec_close
avcodec_alloc_context3 是创建编解码器上下文,需要使用 avcodec_free_context释放 需要使用avcodec_free_context 释放 /** * Allocate an AVCodecContext and set its fields to default values. The * resulting struct should be freed with avcodec_free_co…...

强化学习的几个主要方法(策略梯度、PPO、REINFORCE实现等)(下)
由于平台字数限制,上文:https://blog.csdn.net/ooblack/article/details/144198538 4. PPO算法 近端策略优化(proximal policy optimization,PPO)算法是OpenAI的默认强化学习算法,在RLHF中也用到了这个算…...

计算机网络:IP协议详细讲解
目录 前言 一、IP网段划分 二、IP报头 三、解决IP地址不足-->NAT技术 前言 在之前,我们学习了传输层中的TCP和UDP,重点是TCP协议,他帮我们解决具体到主机的哪个应用(端口)、传输的可靠(序列号、校验和…...

2024信创数据库TOP30之华为Gauss DB
近日,由DBC联合CIW/CIS共同发布的“2024信创数据库TOP30”榜单正式揭晓,汇聚了国内顶尖的数据库企业及其产品,成为展示中国信创领域技术实力与发展潜力的重要平台。在这份榜单中,华为的GaussDB凭借其卓越的技术实力、广泛的行业应…...

在线家具商城基于 SpringBoot:设计模式与实现方法探究
第3章 系统分析 用户的需求以及与本系统相似的在市场上存在的其它系统可以作为系统分析中参考的资料,分析人员可以根据这些信息确定出本系统具备的功能,分析出本系统具备的性能等内容。 3.1可行性分析 尽管系统是根据用户的要求进行制作,但是…...

九、Spring Boot集成Spring Security之授权概述
文章目录 往期回顾:Spring Boot集成Spring Security专栏及各章节快捷入口前言一、授权概述二、用户权限三、用户授权流程三、Spring Security授权方式1、请求级别授权2、方法级别授权 往期回顾:Spring Boot集成Spring Security专栏及各章节快捷入口 Spr…...

python之Flask入门—路由参数
语法: /routerName/<string:parameter_name> 其中:routerName代表路由名称<>中的string是参数类型,parameter_name为参数名称 参数类型: (1) string 接收任何没有斜杠(/&#x…...