前端面试热门题(二)[html\css\js\node\vue)
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…...
施耐德电气:多维解构AI挑战,引领产业创新变革
CSDN 看到,大模型正在掀起一场智能化革命,带来计算、开发、交互三大范式全面升级和转换,其中 AI 计算范式正在从图灵、冯诺伊曼计算范式转为神经网络计算范式。AI 技术仍在快速发展,AI 算力基础设施的数据中心如果仍走“堆资源、堆…...
Unity的GPU Instancing技术
首先新建一个场景,添加一个相机,并创建一个Render Texture给相机。 然后在相机上挂载以下脚本TestBatches ,同时脚本的Inspector面板的Mesh中选择Cube,另外创建一个新的材质拖动给mat: public class TestBatches : M…...
JVM指令集概览:基础与应用
写在文章开头 在现代软件开发中,Java 语言凭借其“一次编写,到处运行”的理念成为了企业级应用的首选之一。这一理念的背后支撑技术正是 Java 虚拟机(JVM)。JVM 是一个抽象的计算机,它实现了 Java 编程语言的各种特性,并且能够执行编译后的字节码文件。了解 JVM 的工作原…...
使用 Redis Stream 结合 Redission DelayedQueue 实现延迟消息队列(已上线生产)
一、Redis Stream 介绍 Redis Stream 是 Redis 5.0 版本新增加的数据结构,作为一种轻量级的消息队列,Redis Stream 作为一种轻量级的消息队列,适合资源有限或对性能要求较高的场景。 Redis Stream 主要用于消息队列(MQÿ…...
时频转换 | Matlab基于递归图Reccurence Plots一维数据转二维图像方法
目录 基本介绍程序设计参考资料获取方式 基本介绍 时频转换 | Matlab基于递归图Reccurence Plots一维数据转二维图像方法 程序设计 clear clc close allfs 6400 ; % 数据采样频率 N 5120; % 信号的点数% 生成时间向量 t (0:N-1) / fs; % 生成正弦信号 x sin(2 * pi * 15…...
《手写Spring渐进式源码实践》实践笔记 (第二十一章 将ORM框架整合到Spring容器中)
文章目录 第二十一章 ORM框架整合Spring背景目标设计实现代码结构类图实现步骤 测试事先准备属性配置文件测试用例测试结果: 总结 第二十一章 ORM框架整合Spring 背景 MyBatis-Spring 能够实现 MyBatis 与 Spring 框架的无缝集成。它使得 MyBatis 能够参与 Spring…...
数据库管理-第267期 23ai:Oracle Data Redaction演示(20241128)
数据库管理267期 2024-11-286 数据库管理-第267期 23ai:Oracle Data Redaction演示(20241128)1 示例表及数据2 创建编校策略2.1 名字全编校2.2 电话部分编校 3 DML演示3.1 场景13.2 场景2 总结 数据库管理-第267期 23ai:Oracle Da…...
NGO-CNN-BiGRU-Attention北方苍鹰算法优化卷积双向门控循环单元时间序列预测,含优化前后对比
NGO-CNN-BiGRU-Attention北方苍鹰算法优化卷积双向门控循环单元时间序列预测,含优化前后对比 目录 NGO-CNN-BiGRU-Attention北方苍鹰算法优化卷积双向门控循环单元时间序列预测,含优化前后对比预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介…...
第六届国际科技创新学术交流会暨管理科学信息化与经济创新发展(MSIEID 2024)
重要信息 大会官网:msieid2024.iaecst.org (点击了解大会,参会等内容) 大会时间:2024年12月6-8日 大会地点:中国-广州 大会简介 随着全球化和信息化的不断深入,管理科学、信息化和经济发展…...
【计算机视觉算法与应用】模板匹配、图像配准
目录 1. 基于灰度值的模板匹配 2. 基于相关性的模板匹配 3. 基于形状的模板匹配 4. 基于组件的模板识别 5. 基于形变的模板匹配 6. 基于描述符的模板匹配 7. 基于点的模板匹配 性能比较 模板匹配的算法实现需要结合具体需求和应用场景来选择方法。以下是基于 OpenCV 的…...
HHO-CNN-BiGRU-Attention哈里斯鹰优化算法卷积神经网络结合双向门控循环单元时间序列预测,含优化前后对比
HHO-CNN-BiGRU-Attention哈里斯鹰优化算法卷积神经网络结合双向门控循环单元时间序列预测,含优化前后对比 目录 HHO-CNN-BiGRU-Attention哈里斯鹰优化算法卷积神经网络结合双向门控循环单元时间序列预测,含优化前后对比预测效果基本介绍模型描述程序设计…...
数据并行、模型并行与张量并行:深度学习中的并行计算策略(中英双语)
中文版 数据并行、模型并行与张量并行:深度学习中的并行计算策略 随着深度学习模型的不断增大,单个计算节点(例如单个 GPU)的计算和内存能力逐渐成为了限制训练效率和模型规模的瓶颈。为了应对这些挑战,深度学习社区…...
大数据-239 离线数仓 - 广告业务 测试 FlumeAgent 加载ODS、DWD层
点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! 目前开始更新 MyBatis,一起深入浅出! 目前已经更新到了: Hadoop࿰…...
Python中的数据结构深入解析:从列表到字典的优化技巧
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! Python是一门以易用性和可读性著称的高级编程语言,其内置的数据结构为开发者提供了强大的工具,但了解其底层实现及性能优化策略却常被忽略。本文深入探讨Python中的核心数据结构,包括列表(list)、元组…...
【JS】JS判断数据类型
typeof // typeof 后面括号有没有都可以 console.log(typeof(a)) // string console.log(typeof(123)) // number console.log(typeof(undefined)) // undefined console.log(typeof(true)) // boolean console.log(typeof(Symbol(123))) // symbolconsole.log(typeof(null)) /…...
基于jmeter+perfmon的稳定性测试记录
软件测试资料领取:[内部资源] 想拿年薪40W的软件测试人员,这份资料必须领取~ 软件测试面试刷题工具领取:软件测试面试刷题【800道面试题答案免费刷】 1. 引子 最近承接了项目中一些性能测试的任务,因此决定记录一下,…...
【0351】Postgres内核 Open WAL segment(包含 WAL 位置 ‘RecPtr’)(2 - 4)
上一篇: 文章目录 1. 打开 WAL Segment2. Standby mode 由一个 状态机(state machine)实现2.1 何处获取 WAL 文件?2.1.1 XLogSource2.1.2 从所选源(XLogSource )读取 XLOG2.1.2.1 walreceiver 运行状态 ?2.1.3 readFile(XLOG 文件句柄)1. 打开 WAL Segment 在经过前…...
Mysql基础
什么是关系型数据库? 顾名思义,关系型数据库(RDB,Relational Database)就是一种建立在关系模型的基础上的数据库。关系模型表明了数据库中所存储的数据之间的联系(一对一、一对多、多对多)。 …...
Altium Designer学习笔记 24 PCB初始布局2
基于Altium Designer 23学习版,四层板智能小车PCB 更多AD学习笔记:Altium Designer学习笔记 1-5 工程创建_元件库创建Altium Designer学习笔记 6-10 异性元件库创建_原理图绘制Altium Designer学习笔记 11-15 原理图的封装 编译 检查 _PCB封装库的创建Al…...
【从0学英语】形容词性/名词性物主代词是什么?
在英语中,物主代词是非常重要的语法概念之一,特别是对于初学者来说。理解形容词性物主代词和名词性物主代词的不同,能够帮助我们在日常对话中准确地表达拥有关系。在这篇文章中,我们将深入探讨这两个概念,并通过详细的…...
hhdb数据库介绍(10-29)
管理 数据备份 从存储节点或灾备机房数据备份 选择灾备机房类型、从库(双主备库)存储节点类型进行备份,页面根据选择类型,对应给出提示信息。发起备份时,检测从存储节点状态是否符合备份条件。 主从数据一致性检测…...
springboot(20)(删除文章分类。获取、更新、删除文章详细)(Validation分组校验)
目录 一、删除文章分类功能。 (1)接口文档。 1、请求路径、请求参数。 2、请求参数。 3、响应数据。 (2)实现思路与代码书写。 1、controller层。 2、service接口业务层。 3、serviceImpl实现类。 4、mapper层。 5、后端接口测试。…...
实战指南:理解 ThreadLocal 原理并用于Java 多线程上下文管理
目录 一、ThreadLocal基本知识回顾分析 (一)ThreadLocal原理 (二)既然ThreadLocalMap的key是弱引用,GC之后key是否为null? (三)ThreadLocal中的内存泄漏问题及JDK处理方法 &…...
Spark 内存管理机制
Spark 内存管理 堆内内存和堆外内存 作为一个 JVM 进程,Executor 的内存管理建立在 JVM(最小为六十四分之一,最大为四分之一)的内存管理之上,此外spark还引入了堆外内存(不在JVM中的内存),在spark中是指不…...
【Maven】继承和聚合
5. Maven的继承和聚合 5.1 什么是继承 Maven 的依赖传递机制可以一定程度上简化 POM 的配置,但这仅限于存在依赖关系的项目或模块中。当一个项目的多个模块都依赖于相同 jar 包的相同版本,且这些模块之间不存在依赖关系,这就导致同一个依赖…...
NViST运行笔记
文章标题: NViST: In the Wild New View Synthesis from a Single Image with Transformers 1. 环境配置 创建环境 conda create -n nvist python3.9 进入环境 conda activate nvist 安装torch torchvision torchaudio pip install torch2.1.2 torchvision0…...
性能测试工具Grafana、InfluxDB和Collectd的搭建
一、性能监控组成简介 1、监控能力分工:这个系统组合能够覆盖从数据采集、存储到可视化的整个监控流程。Collectd可以收集各种系统和应用的性能指标,InfluxDB提供高效的时序数据存储,而 Grafana 则将这些数据以直观的方式呈现出来。2,实时性能监控:对于需要实时了解系统状…...
JS中的类与对象
面向对象是使用最广泛的一种编程范式,最具代表性的面向对象语言就是Java和C,在它们的理念中,面向对象的三大特性:封装,继承,多态。类,对象,公有/私有方法/属性,各种继承就…...
域名解析系统 DNS
1.域名系统概述 用户与互联网上某台主机通信时,必须要知道对方的IP地址。然而用户很难记住长达32 位的二进制主机地址。即使是点分十进制地址也并不太容易记忆。但在应用层为了便于用户记忆各种网络应用,连接在互联网上的主机不仅有P地址,而…...
Flutter 1.1:下载Flutter环境
1、在AS中下载Flutter插件 在setting的Plugins中下载Flutter,如图所示,可以直接进行搜索查找 2、下载flutter的sdk源代码 flutter中文文档学习 通过Git下载SDK源代码 git clone -b stable https://github.com/flutter/flutter.git3、配置系统变量 3…...
HTML5系列(6)-- 拖放 API 实战指南
前端技术探索系列:HTML5 拖放 API 实战指南 🎯 致读者:探索现代交互技术 👋 前端开发者们, 今天我们将深入探讨 HTML5 中一个强大而实用的特性 —— 拖放 API。这项技术能够让我们创建更加直观和交互性强的用户界面…...
windows下kafka初体验简易demo
这里提供了windows下的java1.8和kafka3.9.0版本汇总,可直接免费下载 【免费】java1.8kafka2.13版本汇总资源-CSDN文库 解压后可以得到一个文件夹 资料汇总内有一个kafka文件资料包.tgz,解压后可得到下述文件夹kafka_2.13-3.9.0,资料汇总内还…...
算法训练(leetcode)二刷第三十三天 | *322. 零钱兑换、*279. 完全平方数、*139. 单词拆分
刷题记录 *322. 零钱兑换*279. 完全平方数*139. 单词拆分 *322. 零钱兑换 leetcode题目地址 dp[j]存储amount为j时所需要的最少硬币数。当j为0时需要0个硬币,因此dp[0]赋值为0. 因为是取最少硬币数,因此初始化需要赋值一个最大值。 状态转移方程&…...
windows的pip镜像源配置
Windows 中 pip 镜像源配置 在 Windows 系统中,为了提高 pip 包的安装速度,我们可以配置 pip 的镜像源。以下是具体的配置步骤: 创建文件夹 在 C:\Users\Administrator\pip 路径下创建一个名为 pip.ini 的文件。 编辑 pip.ini 文件 使用文本…...
Django Rest Framework中嵌套关系的JSON序列化
在 Django Rest Framework (DRF) 中,处理嵌套关系的 JSON 序列化是一个常见需求。以下是如何实现嵌套关系序列化的详细说明,包括序列化器定义、模型关系以及常见用法。 1、问题背景 假设我们有以下两个模型: class Jobdtl(models.Model):jo…...
ONVIF协议网络摄像机客户端使用gsoap获取RTSP流地址GStreamer拉流播放
什么是ONVIF协议 ONVIF(开放式网络视频接口论坛)是一个全球性的开放式行业论坛,旨在促进开发和使用基于物理IP的安全产品接口的全球开放标准。 ONVIF规范的目标是建立一个网络视频框架协议,使不同厂商生产的网络视频产品完全互通。…...
40分钟学 Go 语言高并发:Go程序性能优化方法论
Go程序性能优化方法论 一、性能指标概述 指标类型关键指标重要程度优化目标CPU相关CPU使用率、线程数、上下文切换⭐⭐⭐⭐⭐降低CPU使用率,减少上下文切换内存相关内存使用量、GC频率、对象分配⭐⭐⭐⭐⭐减少内存分配,优化GC延迟指标响应时间、处理延…...
MySQL基础(语句)知识复习 (除索引和视图)
1.客户端和数据库操作 1.登录客户端界面:mysql -uroot -p 2.查看当前的数据库版本:select version(); 3.显示所有数据库:show databases;, 4.创建数据库:create [IF NOT EXISTS] database 库名 character set 字符…...
【sqlcipher】pc端sqflite使用过程中遇到的问题
在flutter中使用sqlcipher时 Mac上如果通过flutter带的文件管理api(即File的delete()方法)删除数据库文件,再创建同名的数据文件的话,必现readonly问题, 这里需要注意的一点是 DatabaseFactory 在Mac上直接使用全局的…...
Vue 实现无线滚动效果
目录 1.Element-plus官网中的Infinite Scroll组件说明 2.滚动条设置 3.滚动到底部的函数调用 1.Element-plus官网中的Infinite Scroll组件说明 官网链接如下所示: Infinite Scroll 无限滚动 | Element Plus 首先查看该代码,发现这个组件使用了一个…...
【CSS in Depth 2 精译_062】第 10 章 CSS 中的容器查询(@container)概述 + 10.1 容器查询的一个简单示例
当前内容所在位置(可进入专栏查看其他译好的章节内容) 【第十章 CSS 容器查询】 ✔️ 10.1 容器查询的一个简单示例 ✔️ 10.1.1 容器尺寸查询的用法 ✔️ 10.2 深入理解容器10.3 与容器相关的单位10.4 容器样式查询的用法10.5 本章小结 文章目录 第 10…...
conda手动初始化
问题:环境中存在conda但是conda无法使用 方法: 进入到anaconda目录下, 进入bin目录, 然后执行 source activate要想启动时自动进入conda环境, 需要在 ~/.bashrc中添加如下命令 # >>> conda initialize >>> # !! Contents within this block are managed by …...
hhdb数据库介绍(10-28)
管理 管理菜单主要囊括对业务数据进行管理的功能,例如对数据的备份恢复或执行业务表的DDL语句等操作。 数据对象 数据对象功能可以帮助用户通过列表实时查看当前已存在的数据对象,了解业务数据的整体情况。提供了对数据对象的筛选、统计、关联、详情等…...
Spring Boot自定义启动banner
在启动 Springboot 应用时,默认情况下会在控制台打印出 Springboot 相关的banner信息。 自定义banner 如果你想自定义一个独特的启动banner,该怎么做呢?Springboot 允许我们通过自定义启动banner来替换默认的banner。只需要在 resources 目…...
c语言——数组名该如何理解呢?
一般情况下,数组名表示首元素地址,以下2种除外: ①、sizeof(数组名) 表示整个数组 ※只有数组名的情况 sizeof(数组名i) 就不能表示整个数组 ②、&数组名 表示整个数组,取的是整个数…...
前端 如何用 div 标签实现 步骤审批
在前端实现一个步骤审批流程,通常是通过 div 标签和 CSS 来构建一个可视化的流程图,结合 JavaScript 控制审批的状态变化。你可以使用 div 标签创建每一个步骤节点,通过不同的样式(如颜色、边框等)表示审批的不同状态&…...
QT工程,它该怎么学?
在现代软件开发中,QT因其强大的跨平台能力和友好的用户界面设计工具,成为开发者学习和应用的热门选择。特别是在Linux系统下,如何安装、配置QT开发环境,以及创建和管理QT工程是入门QT开发的关键环节。本文将从安装QT开发环境开始&…...
第426场周赛:仅含置位位的最小整数、识别数组中的最大异常值、连接两棵树后最大目标节点数目 Ⅰ、连接两棵树后最大目标节点数目 Ⅱ
Q1、仅含置位位的最小整数 1、题目描述 给你一个正整数 n。 返回 大于等于 n 且二进制表示仅包含 置位 位的 最小 整数 x 。 置位 位指的是二进制表示中值为 1 的位。 2、解题思路 我们需要找到一个整数 x,使得: x ≥ nx 的二进制表示中仅包含置位…...
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. 简介…...