【VUE】解决图片视频加载缓慢/首屏加载白屏的问题
1 问题描述
在 Vue3 项目中,有时候会出现图片视频加载缓慢、首屏加载白屏的问题
2 原因分析
通常是由以下原因导致的:
图片或视频格式不当:如果图片或视频格式选择不当,比如选择了无损压缩格式,可能会导致文件大小过大,从而影响加载速度。
页面中同时加载了大量的图片和视频,导致请求次数过多,网络传输速度受限,从而影响页面加载速度。
页面中的图片和视频没有进行优化处理,比如没有进行压缩、没有使用 CDN 加速等。
页面的 HTML、CSS、JavaScript 代码没有进行优化,比如没有使用 webpack 进行打包、没有使用代码分割技术等,导致页面加载时间过长。
页面中的图片和视频没有使用懒加载技术,导致页面一次性加载过多的资源,从而导致页面加载速度变慢。
网络状况不佳,比如网络延迟、带宽受限等,都可能导致图片和视频加载缓慢。
服务器响应时间过长:如果服务器响应时间过长,会导致页面请求资源的时间变慢,从而影响页面加载速度。
使用了不稳定的第三方库:如果使用了不稳定的第三方库或者组件,可能会导致页面加载速度变慢。
浏览器缓存策略不当:如果浏览器缓存策略设置不当,可能会导致浏览器重复请求资源,从而影响页面加载速度。
网络安全策略较为严格:如果网络安全策略较为严格,可能会导致浏览器请求资源时遇到一些限制,从而影响页面加载速度。
因此,在开发 Vue3 项目时,需要注意对图片和视频进行优化处理,减少请求次数,使用懒加载技术,优化代码等,来提升页面加载速度,避免出现加载缓慢、首屏加载白屏的问题。
3 解决方案
图片和视频加载缓慢、导致首屏加载白屏的问题,通常可以从以下几个方面入手来解决:
- 图片和视频的优化
- 懒加载
- 骨架屏
- 代码优化
3.1 图片和视频的优化
可以通过图片压缩、视频压缩等技术来减小文件大小,从而提高加载速度。同时,还可以通过 CDN 加速来加快资源加载速度。
可以从以下几个方法入手:
- 压缩图片或视频
- 选择合适的图片或视频格式
- 使用图片或视频 CDN 加速
- 使用懒加载技术
3.1.1 压缩图片或视频
可以使用图片或视频压缩工具,将文件大小压缩至合适的大小。对于图片,可以使用在线图片压缩工具或者 Photoshop 等图片编辑软件进行压缩;对于视频,可以使用视频压缩软件,如 HandBrake 等进行压缩。
压缩工具推荐
以下是几个常用的在线图片压缩工具:
- TinyPNG(tinypng.com)
TinyPNG 是一个免费的在线图片压缩工具,可以将 PNG 和 JPEG 格式的图片压缩至合适的大小,而且不会影响图片质量。
- Compressor.io(compressor.io)
Compressor.io 是一个免费的在线图片压缩工具,可以压缩 JPEG、PNG、SVG 和 GIF 等格式的图片。它可以将图片压缩至较小的大小,而且不会影响图片质量。
- Kraken(kraken.io)
Kraken 是一个在线图片优化和压缩服务,可以将 JPEG、PNG 和 GIF 等格式的图片压缩至最小的文件大小。Kraken 还提供了 API 接口,可以方便地集成到项目中。
- ImageOptim(imageoptim.com)
ImageOptim 是一个免费的图片优化工具,它可以自动压缩 JPEG、PNG 和 GIF 等格式的图片,并且可以自动删除图片中的元数据和不必要的信息,从而减小文件大小。
3.1.2 选择合适的图片或视频格式
选择合适的图片或视频格式也可以减小文件大小。例如,对于图片,可以选择 JPEG 或者 WebP 格式,对于视频,可以选择 H.264 或者 H.265 格式。
3.1.3 使用图片或视频 CDN 加速
可以使用图片或视频 CDN 加速,将图片或视频资源分布在全球各地的 CDN 节点上,从而加快资源的传输速度,提高页面加载速度。
3.1.4 使用懒加载技术
可以使用懒加载技术,将图片或视频的加载延迟到用户需要访问它们时再加载,从而减少页面一次性请求过多的资源,提高页面加载速度。
3.2 懒加载
使用懒加载技术,可以将图片和视频的加载延迟到用户需要访问它们时再加载,从而减少页面一次性加载过多的资源,提高首屏加载速度。
以下是使用懒加载技术实现图片和视频懒加载的方法:
使用 Intersection Observer API
使用 Intersection Observer API
Intersection Observer API 是一种新的浏览器 API,可以监听指定元素是否进入了视口,从而触发回调函数。
可以通过监听图片或视频元素是否进入了视口,从而触发加载图片或视频的操作。
使用示例
当然可以,下面是一个使用 Intersection Observer API 实现图片懒加载的 Vue 3 示例:
在组件中引入 Intersection Observer API
在 Vue 3 中,可以通过在组件中使用
onMounted
钩子函数来引入 Intersection Observer API:<template><img v-for="image in images" :key="image.id" :src="image.placeholder" :data-src="image.src" alt=""> </template><script> import { onMounted } from 'vue';export default {name: 'LazyLoadImages',data() {return {images: [{id: 1,src: 'path/to/image1.jpg',placeholder: 'path/to/placeholder1.jpg'},{id: 2,src: 'path/to/image2.jpg',placeholder: 'path/to/placeholder2.jpg'},// ...]};},setup() {onMounted(() => {// 创建 IntersectionObserver 实例const observer = new IntersectionObserver(entries => {entries.forEach(entry => {if (entry.isIntersecting) {const lazyImage = entry.target;lazyImage.src = lazyImage.dataset.src;lazyImage.removeAttribute('data-src');observer.unobserve(lazyImage);}});});// 监听图片元素const lazyImages = document.querySelectorAll('img[data-src]');lazyImages.forEach(image => {observer.observe(image);});});} }; </script>
在上面的示例中,通过
onMounted
钩子函数创建了 IntersectionObserver 实例,并在其中监听了所有带有 "data-src" 属性的图片元素。当图片元素进入视口时,我们通过
isIntersecting
属性判断图片是否进入了视口,如果进入了视口就将 "data-src" 属性的值赋给 "src" 属性,从而加载图片资源,同时移除 "data-src" 属性,避免重复加载。最后,通过
unobserve
方法停止监听图片元素。这样,就成功地使用 Intersection Observer API 实现了图片的懒加载。
使用第三方库
除了使用 Intersection Observer API,还可以使用一些第三方库来实现图片和视频的懒加载,
如 LazyLoad、Lozad.js、LazyLoad-xt 等。这些库可以更快速地实现懒加载效果,并提供了更多的配置选项,例如触发懒加载的条件、动画效果等。具体使用方法可以参考它们的官方文档。
使用示例
当然可以,以下是一个使用 LazyLoad 库实现图片懒加载的 Vue 3 示例:
安装和引入 LazyLoad 库
在终端中安装 LazyLoad 库:
npm install lazyload --save
然后,在 Vue 3 组件中引入 LazyLoad 库:
<template><img v-for="image in images" :key="image.id" :src="image.placeholder" data-src="image.src" alt=""> </template><script> import LazyLoad from 'lazyload';export default {name: 'LazyLoadImages',data() {return {images: [{id: 1,src: 'path/to/image1.jpg',placeholder: 'path/to/placeholder1.jpg'},{id: 2,src: 'path/to/image2.jpg',placeholder: 'path/to/placeholder2.jpg'},// ...]};},mounted() {// 初始化 LazyLoadconst lazyLoadInstance = new LazyLoad({elements_selector: 'img[data-src]',threshold: 0,// 配置选项});// 手动触发加载lazyLoadInstance.update();} }; </script>
在上面的示例中,
先通过
npm install
命令安装了 LazyLoad 库,并在组件中引入了该库。然后,在组件的
mounted
钩子函数中初始化了 LazyLoad 并传入了图片元素的选择器,以及其它一些配置选项。最后,通过
update
方法手动触发图片的加载。
这样,就成功地使用 LazyLoad 库实现了图片的懒加载。
除了图片懒加载,LazyLoad 库还可以用于懒加载视频、背景图等资源。具体使用方法可以参考 LazyLoad 的官方文档。
3.3 骨架屏
骨架屏(Skeleton Screen)是一种页面加载优化的技术,可以在页面加载过程中显示一个简单的灰色框架,代替还未加载的内容。骨架屏可以提高用户体验,让用户感觉页面加载速度更快,同时也可以减少用户的焦虑感。
在 Vue 3 中,可以使用一些第三方库来实现骨架屏效果,例如 vue-skeleton-webpack-plugin、vue-content-loader、vue-loading-skeleton 等。
3.3.1 如何在Vue 3中使用vue-content-loader实现骨架屏效果?
vue-content-loader
是一个 Vue.js 组件库,可以帮助我们实现骨架屏效果。它提供了多种预定义的 SVG 形状,可以快速生成骨架屏模板,并且可以自定义颜色、大小、动画等。以下是在 Vue 3 中使用
vue-content-loader
实现骨架屏效果的步骤:
3.3.1.1 安装和导入 vue-content-loader
在终端中使用 npm 安装
vue-content-loader
:npm install vue-content-loader
然后在需要使用的组件中导入
SkeletonLoader
组件:import { SkeletonLoader } from 'vue-content-loader';
3.3.1.2 创建骨架屏模板
在模板中使用
SkeletonLoader
组件,并通过type
属性指定要使用的 SVG 形状。例如,要使用矩形形状可以这样写:<template><div><SkeletonLoader :width="300" :height="200" type="rect" /></div> </template>
3.3.1.3 自定义骨架屏模板
可以通过
vue-content-loader
提供的属性来自定义骨架屏模板的颜色、大小、动画等。例如,要改变矩形形状的颜色和大小可以这样写:<template><div><SkeletonLoader :width="300" :height="200" type="rect" :rect="{ rx: 5, ry: 5 }" :speed="1" :primaryColor="'#f3f3f3'" :secondaryColor="'#ecebeb'" /></div> </template>
在上面的代码中,我们通过
rect
属性设置了矩形的圆角半径,通过speed
属性设置了动画速度,通过primaryColor
和secondaryColor
属性设置了骨架屏的颜色。
以上就是在 Vue 3 中使用
vue-content-loader
实现骨架屏效果的基本步骤。需要注意的是,vue-content-loader
组件库提供了多种预定义的 SVG 形状,你可以根据需求选择合适的形状,并通过属性来自定义骨架屏的样式和动画。
3.3.2 使用 vue-skeleton-webpack-plugin 实现骨架屏的示例
vue-skeleton-webpack-plugin
是一个 Webpack 插件,可以帮助我们在打包过程中生成骨架屏模板,并自动注入到 HTML 文件中。以下是使用
vue-skeleton-webpack-plugin
实现骨架屏的示例:
3.3.2.1 安装和配置 vue-skeleton-webpack-plugin
在终端中使用 npm 安装
vue-skeleton-webpack-plugin
:npm install vue-skeleton-webpack-plugin
然后在 Vue 项目的
vue.config.js
文件中添加以下配置:const VueSkeletonWebpackPlugin = require('vue-skeleton-webpack-plugin');module.exports = {configureWebpack: {plugins: [new VueSkeletonWebpackPlugin({webpackConfig: {entry: {app: './src/skeleton.js' // 指定骨架屏入口文件}},insertAfter: '<div id="app"></div>', // 骨架屏注入位置minimize: true,quiet: true})]} };
在上面的示例中,我们指定了骨架屏的入口文件为
./src/skeleton.js
,并通过insertAfter
属性指定了注入位置。
3.3.2.2 创建骨架屏模板
在项目中创建骨架屏模板,可以使用
vue-content-loader
或其他骨架屏工具来生成模板。例如,创建了一个
Skeleton.vue
组件来定义骨架屏模板:<template><div><SkeletonLoader :width="300" :height="200" type="rect" :rect="{ rx: 5, ry: 5 }" :speed="1" :primaryColor="'#f3f3f3'" :secondaryColor="'#ecebeb'" /></div> </template><script> import { SkeletonLoader } from 'vue-content-loader';export default {name: 'Skeleton',components: {SkeletonLoader} }; </script>
3.3.2.3 创建骨架屏入口文件
在项目中创建骨架屏入口文件
skeleton.js
,用于生成骨架屏模板。例如,在
skeleton.js
中创建了一个 Vue 实例,使用Skeleton
组件作为根组件:import Vue from 'vue'; import Skeleton from './components/Skeleton.vue';new Vue({render: h => h(Skeleton) }).$mount('#app');
在上面的代码中,通过
render
函数将Skeleton
组件渲染到 DOM 中的#app
元素上。
3.3.2.4 注入骨架屏模板到 HTML 文件中
在 HTML 文件中,使用
vue-skeleton-webpack-plugin
提供的Skeleton
标签来注入骨架屏模板。例如,在
public/index.html
文件中添加以下代码:<!DOCTYPE html> <html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>My App</title> </head><body><Skeleton></Skeleton><div id="app"></div> </body></html>
在上面的代码中,我们在
Skeleton
标签中注入了骨架屏模板,并将真实内容放在app
标签中。
3.3.2.5 打包项目并查看效果
在终端中运行以下命令打包项目:
npm run build
打包完成后,打开生成的
index.html
文件,即可看到骨架屏效果。在加载真实内容之前,页面会显示骨架屏模板,提升用户体验。
3.4 代码优化
在代码优化时,需要综合考虑多个方面,包括性能、可读性、可维护性等。
下面是一些常见的代码优化方式及其结果问题:
- 懒加载/按需加载
- 缓存机制
- 代码压缩和合并
- 其他优化方式
3.4.1 懒加载/按需加载
懒加载/按需加载是指将页面或模块的加载推迟到需要时再进行,以减少初始加载时间和网络请求次数,提高页面性能。然而,在使用懒加载/按需加载时,可能会出现以下问题:
- 首次加载时,用户可能需要等待更长时间才能看到页面内容。
- 如果按需加载的模块过多,可能会出现过多的网络请求,导致页面加载速度变慢。
- 懒加载/按需加载的代码可能会增加复杂度,降低代码的可读性和可维护性。
3.4.2 缓存机制
缓存机制是指将一些静态资源(如图片、CSS、JS 等)缓存在客户端,以减少网络请求次数,提高页面性能。然而,在使用缓存机制时,可能会出现以下问题:
- 如果缓存时间过长,可能会导致用户无法看到最新的内容。
- 如果缓存时间过短,可能会导致用户频繁地重新请求资源,降低页面性能。
- 缓存机制可能会对服务器和客户端产生额外的负担,增加服务器和客户端的开销。
3.4.3 代码压缩和合并
代码压缩和合并是指将多个 JS 或 CSS 文件压缩为一个文件,并将其中的空格、注释等无关字符删除,以减小文件大小,提高页面性能。然而,在使用代码压缩和合并时,可能会出现以下问题:
- 如果压缩和合并的文件过大,可能会导致文件下载时间过长,影响页面性能。
- 代码压缩和合并可能会增加复杂度,降低代码的可读性和可维护性。
- 如果压缩和合并的文件不够灵活,可能会导致无法对不同的页面进行定制和优化。
3.4.4 其他优化方式
除了上述方式外,还有一些其他的代码优化方式,如使用更高效的算法或数据结构、减少重绘和回流、优化图片大小和格式等。这些优化方式的效果和问题也各不相同,需要根据具体情况进行选择和评估。
综上所述,代码优化需要综合考虑多个方面,不能只追求性能,还要注意代码的可读性和可维护性,以确保代码质量和用户体验的均衡。
3.4.5 示例
下面是一个代码优化前后的示例对比:
假设有一个需求,需要在页面上显示一组商品列表,每个商品包含图片、标题、描述、价格等信息。
可以使用 Vue.js 来实现该需求,如下所示:
<template><div><h2>商品列表</h2><ul><li v-for="(item, index) in items" :key="index"><img :src="item.image" :alt="item.title"><h3>{{ item.title }}</h3><p>{{ item.description }}</p><span>¥{{ item.price }}</span></li></ul></div> </template><script> export default {data() {return {items: []};},created() {fetch('https://api.example.com/products').then(response => response.json()).then(data => {this.items = data;});} }; </script>
在上面的代码中,使用了 Vue.js 的模板语法来创建商品列表,并通过
fetch
方法从后端 API 获取商品数据。然而,在实际应用中,该代码存在一些性能问题,可以进行优化。
下面是一个针对该代码的优化方案:
<template><div><h2>商品列表</h2><ul><li v-for="(item, index) in items" :key="index"><img :src="item.image" :alt="item.title"><h3>{{ item.title }}</h3><p>{{ item.description }}</p><span>¥{{ item.price }}</span></li></ul></div> </template><script> import axios from 'axios';export default {data() {return {items: [],loading: true};},async created() {try {const response = await axios.get('https://api.example.com/products');this.items = response.data;} catch (error) {console.error(error);} finally {this.loading = false;}} }; </script>
在上面的优化方案中,使用了以下优化方式:
- 使用
axios
替换fetch
,以提高网络请求的稳定性和可读性。- 将
created
钩子函数改为异步函数,并使用async/await
语法简化异步代码,以提高代码可读性。- 添加
loading
变量,用于在数据加载完成前显示加载动画,以提高用户体验。通过以上优化,可以提高代码的性能、可读性和可维护性,从而提高应用的质量和用户体验。
3.5 如何设置浏览器缓存策略以提高页面加载速度?
设置浏览器缓存策略可以减少浏览器重复请求资源,从而提高页面加载速度。可以通过在 HTTP 响应头中设置缓存策略来实现。
以下是一些常见的缓存策略设置方法:
- 设置强缓存
- 设置协商缓存
3.5.1 设置强缓存
强缓存是指浏览器在一定时间内直接从本地缓存中获取资源,而不需要向服务器发送请求。可以通过设置 "Expires" 或者 "Cache-Control" 响应头来设置强缓存时间,如下所示:
- Expires:设置过期时间,例如 "Expires: Wed, 21 Oct 2023 07:28:00 GMT"
- Cache-Control:设置缓存策略,例如 "Cache-Control: max-age=3600",表示资源在 3600 秒内有效。
3.5.2 设置协商缓存
协商缓存是指浏览器在过期时间后,向服务器发送请求,服务器会根据资源的 ETag 或者 Last-Modified 等信息,判断资源是否发生变化。如果资源没有发生变化,服务器会返回 304 状态码,告诉浏览器可以直接使用本地缓存。可以通过设置 "Last-Modified" 和 "ETag" 响应头来设置协商缓存,如下所示:
- Last-Modified:表示资源的最后修改时间,例如 "Last-Modified: Wed, 21 Oct 2023 07:28:00 GMT"
- ETag:表示资源的唯一标识符,例如 "ETag: W/1234567890"
注意,设置缓存策略时需要根据具体情况进行设置,过长的缓存时间可能会导致资源更新不及时,而过短的缓存时间则可能会影响页面加载速度。建议根据实际情况进行调整。
相关文章:

【VUE】解决图片视频加载缓慢/首屏加载白屏的问题
1 问题描述 在 Vue3 项目中,有时候会出现图片视频加载缓慢、首屏加载白屏的问题 2 原因分析 通常是由以下原因导致的: 图片或视频格式不当:如果图片或视频格式选择不当,比如选择了无损压缩格式,可能会导致文件大小过大…...

spring复习:(35)在getBean时,在哪里根据普通bean和工厂bean进行区分处理来返回的?
在AbstractBeanFactory的doGetBean方法: 调用的getObjectForBeanInstance方法部分代码如下: 如果不是工厂bean,则直接将实例返回,否则调用getObjectFromFactoryBean方法获取工厂bean的getObject方法返回的对象 protected Object getObjectF…...

Jenkins全栈体系(二)
Jenkins 第三章 Jenkins Git Maven 自动化部署配置 十、几种构建方式 快照依赖构建/Build whenever a SNAPSHOT dependency is built 当依赖的快照被构建时执行本job 触发远程构建 (例如,使用脚本) 远程调用本job的restapi时执行本job job依赖构建/Build after other proj…...

c++11 标准模板(STL)(std::basic_istream)(九)
定义于头文件 <istream> template< class CharT, class Traits std::char_traits<CharT> > class basic_istream : virtual public std::basic_ios<CharT, Traits> 类模板 basic_istream 提供字符流上的高层输入支持。受支持操作包含带格式的…...

OpenSource - Spring Startup Ananlyzer
文章目录 🚀Optimization of Spring Startup核心能力📈Spring应用启动数据采集报告应用启动时长优化 📈Spring应用启动数据采集报告安装jar包配置项应用启动自定义扩展 🚀应用启动时长优化支持异步化的Bean类型接入异步Bean优化 开…...

ES6迭代器、Set、Map集合和async异步函数
目录 迭代器 Iterator 的作用 Iterator 的遍历过程 Set Map集合 map和对象区别? async异步函数 迭代器 迭代器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口&…...

mac android studio设置跟mac系统一样的快捷键
mac版的android studio 跟mac系统的快捷键不一样,主要修改了下面几组操作,为了跟mac系统快捷键相同 setting->Keymap 搜索bottom 修改3个快捷键: cmd↓ 设置让鼠标移动到屏幕最后面 shiftcmd↓ 选中从当前位置到屏幕最下面 option↓. 或者 end 滚动到屏幕最下方 // 因为默认…...

Java-通过IP获取真实地址
文章目录 前言功能实现测试 前言 最近写了一个日志系统,需要通过访问的 IP 地址来获取真实的地址,并且存到数据库中,我也是在网上看了一些文章,遂即整理了一下供大家参考。 功能实现 这个是获取正确 IP 地址的方法,可…...
Java代码实现word转PDF
import com.spire.doc.Document; import com.spire.doc.FileFormat; import lombok.extern.slf4j.Slf4j; public class WordConvertPdf { /** * word转pdf * param wordPathName word文件路径及名称 * param pdfPathName pdf生成路径及名称 */ public static void wordToPdf(…...
Java设计模式-简单工厂(Simple Factory)模式
介绍 简单工厂(Simple Factory)模式,又称为静态工厂方法(Static Factory Method)模式。 由一个工厂类来创建具体产品,即创建具体类的实例。 简单工厂模式从概念上涉及三个角色: 抽象产品角色…...
微软所有业务线梳理
目录 一、Windows 二、Office 三、Surface 四、Xbox 五、Azure 六、Dynamics 七、LinkedIn 八、Bing...

SDN系统方法 | 1. 概述
随着互联网和数据中心流量的爆炸式增长,SDN已经逐步取代静态路由交换设备成为构建网络的主流方式,本系列是免费电子书《Software-Defined Networks: A Systems Approach》的中文版,完整介绍了SDN的概念、原理、架构和实现方式。原文: Softwar…...

【数据分享】1929-2022年全球站点的逐日平均压力数据(Shp\Excel\12000个站点)
气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 对于具体到监测站点的气象数据,之前我们分享过1929-2022年全球气象…...

Profibus DP主站转Modbus TCP网关profibus从站地址范围
远创智控YC-DPM-TCP网关。这款产品在Profibus总线侧实现了主站功能,在以太网侧实现了ModbusTcp服务器功能,为我们的工业自动化网络带来了全新的可能。 远创智控YC-DPM-TCP网关是如何实现这些功能的呢?首先,让我们来看看它的Profib…...

MySQL子查询
😇作者介绍:一个有梦想、有理想、有目标的,且渴望能够学有所成的追梦人。 🎆学习格言:不读书的人,思想就会停止。——狄德罗 ⛪️个人主页:进入博主主页 🗼专栏系列:进入MySQL专栏知…...
学IT上培训班有用吗?
在学习IT技术的过程中,你是否也被安利过各种五花八门的技术培训班?这些培训班都是怎样向你宣传的,你又对此抱有着怎样的态度呢?在培训班里学技术,真的有用吗? 首先,IT行业是一个充满机遇和挑战…...

BI如何对接金蝶云星空数据源?奥威BI SaaS平台有绝招
传统BI部署时需要大量硬件和软件支持,而SaaS BI不仅不需要,还能让企业的数据可视化分析变得更加简单便捷,因此已经渐渐成为数字化时代的BI新趋势。那么,SaaS BI平台是如何快速接入数据完成数据可视化分析的?下面就以奥…...
鼎镁科技冲刺A股上市失败,董事长涂季冰三年薪水超过6000万元
7月15日,上海证券交易所披露的信息显示,因鼎镁新材料科技股份有限公司(下称“鼎镁科技”)审核不通过,上海证券交易所终止其发行上市审核。这意味着,鼎镁科技此次上市之旅彻底失败。 据贝多财经了解…...
PostgreSQL【应用 02】扩展SQL之C语言函数(编写、编译、载入)实例分享
C语言函数 1.准备1.1 开发文档1.2 工具安装 2.开始2.1 编写C语言函数2.2 编译和链接动态载入的函数 通过使用 PostgreSQL 的 C 函数接口,我们可以编写用 C 语言实现的函数,并将其集成到数据库中。这些函数可以在 SQL 查询中像其他内置函数一样被调用&…...

day37-框架
0目录 框架 1.框架介绍 2. SSM三大框架简介 3.Mybatis 4.拓展 1.框架介绍 1.1 为什么使用框架? (1)框架效率高,成本低 (2)框架是别人写好的构建,我们只需学会如何使用它(可维护性…...

Rust学习(1)
声明:学习来源于 《Rust 圣经》 变量的绑定和解构 变量绑定 let a "hello world":这个过程称之为变量绑定。绑定就是把这个对象绑定给一个变量,让这个变量成为它的主人。 变量可变性 Rust 变量默认情况下不可变,可以通过 mut …...

第三讲 Linux进程概念
1. 冯诺依曼体系结构 我们买了笔记本电脑, 里面是有很多硬件组成的, 比如硬盘, 显示器, 内存, 主板... 这些硬件不是随便放在一起就行的, 而是按照一定的结构进行组装起来的, 而具体的组装结构, 一般就是冯诺依曼体系结构 1.1. 计算机的一般工作逻辑 我们都知道, 计算机的逻…...

基于dify的营养分析工作流:3分钟生成个人营养分析报告
你去医院做体检,需要多久拿到体检报告呢?医院会为每位病人做一份多维度的健康报告吗?"人工报告需1小时/份?数据误差率高达35%?传统工具无法个性化? Dify工作流AI模型的组合拳,正在重塑健康…...

微软重磅发布Magentic UI,交互式AI Agent助手实测!
微软重磅发布Magentic UI,交互式AI Agent助手实测! 何为Magentic UI? Magentic UI 是微软于5.19重磅发布的开源Agent助手,并于24日刚更新了第二个版本0.04版 从官方的介绍来看,目标是打造一款 以人为中心 的智能助手,其底层由多个不同的智能体系统驱动,能够实现网页浏览…...
嵌入式链表操作原理详解
嵌入式链表操作原理详解 链表是嵌入式软件开发中最基础的数据结构之一,其设计采用嵌入式链表节点的思想,实现了高度通用的链表管理机制。以下是核心原理和操作的全面解析: 一、基础数据结构 struct list_head {struct list_head *next, *pr…...
Oracle数据库学习笔记 - 创建、备份和恢复
Oracle数据库学习笔记 创建,备份和恢复 Oracle 版本基于11g 尽量不使用图形界面方式,操作适用于linux和windows 创建数据库 创建实例 # 步骤1:设置环境变量 export ORACLE_SIDmyorcl export ORACLE_HOME/u01/app/oracle/product/19.0.0/dbh…...

ChatterBox - 轻巧快速的语音克隆与文本转语音模型,支持情感控制 支持50系显卡 一键整合包下载
ChatterBox 是一个近期备受关注的开源语音克隆与文本转语音(TTS)模型,由 Resemble AI 推出,具备体积轻巧及超快的推理速度等特色。它也是首个支持情感夸张控制的开放源代码 TTS 模型,这一强大功能能让您的声音脱颖而出…...
next,react封装axios,http请求
import axios from axios;//声明一个基础接口变量1 let base_url; //配置开发环境 if (process.env.NODE_ENV development) {base_url "http://127.0.0.1/"; } // 配置生产环境 if (process.env.NODE_ENV production) {base_url "http://127.0.0.1/"; …...
for AC500 PLCs 3ADR025003M9903的安全说明
1安全说明 必须遵守特殊的环境条件(例如,由于爆炸性物质、重污染或腐蚀影响的危险区域)。必须在指定的技术数据和系统数据范围内处理和操作设备。该装置不含可维修部件,不得打开。除非另有规定,否则操作过程中必须关闭可拆卸的盖子。拒绝对不…...
【从0-1的CSS】第1篇:CSS简介,选择器以及常用样式
文章目录 CSS简介CSS的语法规则选择器id选择器元素选择器类选择器选择器优先级 CSS注释 CSS常用设置样式颜色颜色名称(常用)RGB(常用)RGBA(常用)HEX(常用)HSLHSLA 背景background-colorbackground-imagebackground-size 字体text-aligntext-decorationtext-indentline-height 边…...