在Html5中仿Matlab自定义色带生成实践

news2025/3/11 9:03:47

目录

前言

一、RGB的相关知识

1、RGB的基本原理

2、RGB的数值表示

3、应用场景

二、ColorMap生成实战

1、外部库介绍

2、相关API

3、实例生成

三、总结


前言

        在现代网页开发与数据可视化领域,色彩的表现力对于信息传达和视觉体验起着至关重要的作用。色带,作为一种有效的色彩组织和展示形式,广泛应用于科学研究、工程绘图、地理信息系统(GIS)以及商业数据展示等多个领域。它能够将数据值映射到特定的颜色,从而使得复杂的数据分布以直观的视觉形式呈现出来。如下图的应用:

        比如在常见的科研工具中,Matlab作为一款功能强大的科学计算与可视化软件,在色带生成与应用方面拥有成熟且便捷的工具集。其内置的多种色带模式以及灵活的自定义选项,为科研人员和工程师提供了高效的数据可视化解决方案。然而,随着互联网技术的发展和Web应用的普及,越来越多的数据可视化需求开始转向网页平台。Html5作为现代网页开发的核心标准,提供了丰富的绘图和渲染功能,使得在网页上实现复杂的图形和图像处理成为可能。

        在实践过程中,开发者可能会面临一些挑战。例如,Matlab和Html5在色彩处理和图形绘制方面存在一定的差异,如何准确地将Matlab的色带效果转化为Html5中的实现是一个需要解决的问题。此外,不同浏览器对Html5和CSS3特性的支持程度不一致,可能导致色带在某些浏览器中显示异常,需要进行充分的兼容性测试和优化。总之,在Html5中仿Matlab自定义色带生成实践,为网页数据可视化提供了一种新的思路和方法。通过深入理解Matlab色带的原理和巧妙运用Html5的绘图功能,开发者能够在网页上实现具有专业水准的色彩效果,满足多样化的数据展示需求。随着技术的不断进步和开发者的不断创新,这一领域的应用前景将更加广阔。本文即在此背景下产生,文章主要讲解如何在Html5中生成类似Matlab的色带应用,通过本文您可以熟悉并掌握生成方法,为下一步进行gis的空间自定义分类制图打下颜色制图的基础。

一、RGB的相关知识

        在数字媒体、计算机图形学以及现代显示技术等领域,RGB颜色模型作为色彩表示与呈现的核心手段,发挥着至关重要的作用。RGB颜色模型基于光的加色原理,通过红(Red)、绿(Green)、蓝(Blue)三种基本色光的强度组合,能够产生人类视觉所能感知的绝大多数颜色,为我们在屏幕上创造出丰富多彩的视觉体验提供了可能。

1、RGB的基本原理

        RGB颜色模型源于人类视觉系统对红、绿、蓝三种光的敏感性。这三种颜色被称为光的三原色,因为它们无法通过其他颜色的混合得到,但却可以组合生成其他各种颜色。在数字设备中,如显示器、手机屏幕等,每个像素点都由红、绿、蓝三种子像素组成,通过调整这三种子像素的亮度,就能控制该像素点最终显示的颜色。例如,当红、绿、蓝三种子像素的亮度都达到最大时,像素点呈现为白色;当三种子像素的亮度都为零时,像素点则为黑色。

2、RGB的数值表示

        在RGB颜色模型中,每种基本颜色的强度通常用0到255之间的整数来表示。0表示该颜色完全不发光,255表示该颜色以最大强度发光。因此,一个完整的RGB颜色值由三个数值组成,分别对应红、绿、蓝三种颜色的强度。例如,RGB(255,0,0)表示纯红色,RGB(0,255,0)表示纯绿色,RGB(0,0,255)表示纯蓝色。而RGB(255,255,255)则表示白色,RGB(0,0,0)表示黑色。这种数值表示方法使得计算机能够方便地存储、处理和传输颜色信息,为数字图像的处理和显示提供了基础。在Html网页中,我们可以打开颜色拾取器,通过颜色拾取器可以看到颜色的RGB值,查看方法如下:

        通过颜色拾取器就能实现。 如果当前您的网页是展示的是Hex表示的颜色,通过上下键可以切换不同的展示模式,通过切换后就可以实现RGB格式的颜色展示模式。

3、应用场景

        RGB颜色模型在现代科技和日常生活中有着广泛的应用。在计算机显示器、电视屏幕、手机显示屏等电子设备上,RGB是默认的颜色标准,所有的图像、视频和用户界面元素都是基于RGB颜色模型来设计和显示的。在网页设计和网络媒体中,RGB颜色模型也是主要的颜色表示方式,通过HTML和CSS代码中的RGB值设置,可以精确控制网页元素的颜色,实现各种视觉效果。此外,在摄影、影视制作、数字绘画等领域,创作者们也依赖RGB颜色模型来呈现他们的作品,通过调整RGB值来实现理想的色彩效果和艺术风格。

二、ColorMap生成实战

        在介绍了有关于Html中RGB的颜色生成原理、数值表示以及应用场景之后。本节将中点来讲解如何基于Javascript的色带生成。这里需要使用一个外部的Javascript,这个是生成色带的关键代码。其次重点介绍这个API库,最后根据API生成相关的具体示例。通过这些实例的生成,让你对整个过程有更详细的了解。

1、外部库介绍

        生成色带的Javascript源码本身不复杂,这里直接将整个生成的源码库代码贴出来,

/**
 * Colormaps.js - a general set of utilities for dealing with colors and stuff
 * Author: Yue Zhang
 * */

function ColorScheme(name, minValue, maxValue, minr, maxr, ming, maxg, minb, maxb) {
    this.name = name;
    this.minValue = minValue;
    this.maxValue = maxValue;
    this.minr = minr;
    this.maxr = maxr;
    this.ming = ming;
    this.maxg = maxg;
    this.minb = minb;
    this.maxb = maxb;
}

function Color(r, g, b) {
    this.r = r;
    this.g = g;
    this.b = b;
}

Color.prototype.toString = function() {
    return "rgb("+parseInt(this.r)+","+parseInt(this.g)+","+parseInt(this.b)+")";
}

Color.prototype.toHex = function() {
    var r = parseInt(this.r);
    var g = parseInt(this.g);
    var b = parseInt(this.b);
}

function MultiColorScheme(name, minValue, maxValue, colors) {
    this.name = name;
    this.minValue = minValue;
    this.maxValue = maxValue;
    this.colors = colors;
    //colorStops is the locations of each color on the gradient.
    this.colorStops = [];
    for (var i = 0; i<this.colors.length; i++) {
        this.colorStops = 
            this.colorStops.concat(i*(maxValue-minValue)/(this.colors.length-1));
    }
}

/**
 * Given a value, and the min and max of that value, returns the color that
 * corresponds to that value for the given colorScheme.
 * */
function makeMultiColor(value, min, max, colorScheme) {
    var colors = colorScheme.colors;
    var colorStops = [];
    for (var i = 0; i<colorScheme.colors.length; i++) {
        colorStops = 
            colorStops.concat(min + i*(max - min)/(colors.length-1));
    }
    for (var i = 1; i<colorScheme.colors.length; i++) {
        if (value <= colorStops[i]+0.01 &&  value >= colorStops[i-1]) {
            var cMin = colorStops[i-1];
            var cMax = colorStops[i];
            var r = interpolate(value, cMin, cMax, colors[i-1].r, colors[i].r);
            var g = interpolate(value, cMin, cMax, colors[i-1].g, colors[i].g);
            var b = interpolate(value, cMin, cMax, colors[i-1].b, colors[i].b);
            return "rgb("+parseInt(r)+","+parseInt(g)+","+parseInt(b)+")";
        }
    }
    return "rgb(255,255,255)";
}

function HeatMap(name, values){
    this.name = name;
    this.values = values;
    this.colors = [];
    this.xpos = 0;
    this.ypos = 0;
}

function interpolate(pos1, min1, max1, min2, max2) {
    return (max2-min2)*(pos1-min1)/(max1-min1)+min2;
}

/**
* Given a value and the min and max possible values for that value,
* returns a color that represents the color in the color scheme.
* */
function makeColor(value, min, max, colorScheme) {
    if (colorScheme instanceof MultiColorScheme) {
        return makeMultiColor(value, min, max, colorScheme);
    }
    else {
        var colorR = interpolate(value, min, max,
        colorScheme.minr, colorScheme.maxr);
        var colorG = interpolate(value, min, max,
        colorScheme.ming, colorScheme.maxg);
        var colorB = interpolate(value, min, max,
        colorScheme.minb, colorScheme.maxb);
        //Colors have to be ints
        return "rgb("+parseInt(colorR)+","+parseInt(colorG)+","+
        parseInt(colorB)+")";
    }
}

/**
* Given a heat map without colors
*  and a color scheme, gives the heat map colors.
* */
function makeColors(heatMap, colorScheme) {
    for (var i = 0; i<heatMap.values.length; i++) {
        if (LOGARITHMIC) {
            heatMap.values[i] = Math.log(heatMap.values[i])/Math.log(2);
        }
        var value = heatMap.values[i];
        var color = makeColor(value, colorScheme.minValue, colorScheme.maxValue,
        colorScheme);
        //if the value is not positive, the color is white.
        if (value <= 0) {
            heatMap.colors = heatMap.colors.concat("rgb(255,255,255)");
        }
        else {
            //Colors have to be ints
            heatMap.colors = heatMap.colors.concat(color);
        }
    }
}

/**
* Draws a color map for the given color scheme onto the given canvas.
* */
function drawColorMap(canvas, colorScheme, maxValue, minValue) {
    var context = canvas.getContext('2d');
    context.clearRect(0, 0, canvas.width, canvas.height);
    var width = canvas.width;
    var height = canvas.height;
    var gradient = context.createLinearGradient(0, 0, width, 0);
    if (colorScheme instanceof MultiColorScheme) {
        for (var i = 0; i<colorScheme.colorStops.length; i++) {
            gradient.addColorStop(colorScheme.colorStops[i]/colorScheme.maxValue, 
                colorScheme.colors[i].toString());
        }
    }
    else {
        gradient.addColorStop(0, makeColor(0, 0, width, colorScheme));
        gradient.addColorStop(1, makeColor(width, 0, width, colorScheme));
    }
    context.fillStyle = gradient;
    //context.fillRect(0, 0, width, height/2);
	context.fillRect(0, 0, width, height);
    //writing text
    context.fillStyle = "rgb(0,0,0)";
}

//GLOBAL color schemes
//Red is high, green is low
var GREEN_RED_SCHEME = new ColorScheme('redGreen', 0, 1000, 0, 255, 255, 0, 0, 0);
//Red is high, blue is low
var BLUE_RED_SCHEME = new ColorScheme('blueRed', 0, 1000, 0, 255, 0, 0, 255, 0);
//Red is high, yellow is low
var YELLOW_RED_SCHEME = new ColorScheme('yellowRed', 0, 1000, 255, 255, 255, 0, 0, 0);
//Blue is high, white is low
var WHITE_BLUE_SCHEME = new ColorScheme('whiteBlue', 0, 1000, 255, 0, 255, 0, 255, 255);
//Green is high, blue is low
var BLUE_GREEN_SCHEME = new ColorScheme('blueGreen', 0, 1000, 0, 0, 0, 255, 255, 0);
//White, yellow, red, black color scheme
var YELLOW_RED_BLACK_SCHEME = new MultiColorScheme('', 0, 1000, 
    [new Color(255,255,0),
    new Color(255,0,0),
    new Color(0,0,0)]);
var BLUE_WHITE_RED_SCHEME = new MultiColorScheme('', 0, 1000,
        [new Color(255, 0, 0),
        new Color(255, 255, 255),
        new Color(0, 0, 255)]);
var BLUE_GREEN_YELLOW_RED_SCHEME = new MultiColorScheme('', 0, 1000,
    [new Color(0, 0, 255),
    new Color(0, 255, 255),
    new Color(0, 255, 0),
    new Color(255,255,0),
    new Color(255,0,0)]);

var colorSchemes = {'GREEN_RED_SCHEME':GREEN_RED_SCHEME, 'BLUE_RED_SCHEME':BLUE_RED_SCHEME,
'YELLOW_RED_SCHEME':YELLOW_RED_SCHEME, 'WHITE_BLUE_SCHEME':WHITE_BLUE_SCHEME,
'BLUE_GREEN_SCHEME':BLUE_GREEN_SCHEME,
'YELLOW_RED_BLACK_SCHEME':YELLOW_RED_BLACK_SCHEME,
'BLUE_GREEN_YELLOW_RED_SCHEME':BLUE_GREEN_YELLOW_RED_SCHEME,
'BLUE_WHITE_RED_SCHEME': BLUE_WHITE_RED_SCHEME};

2、相关API

        在上面的方法中,有几个地方是重点需要注意的。第一个是通过RGB来构建Color对象。在Javascript代码中传入RGB值构建的代码如下:

function Color(r, g, b) {
    this.r = r;
    this.g = g;
    this.b = b;
}

        其次是根据自定义的颜色及分区来构建渐变的色带,关键方法如下:

function MultiColorScheme(name, minValue, maxValue, colors) {
    this.name = name;
    this.minValue = minValue;
    this.maxValue = maxValue;
    this.colors = colors;
    //colorStops is the locations of each color on the gradient.
    this.colorStops = [];
    for (var i = 0; i<this.colors.length; i++) {
        this.colorStops = 
            this.colorStops.concat(i*(maxValue-minValue)/(this.colors.length-1));
    }
}

        需要注意的是,这里传入的colors数组即是前面通过RGB值构建出来的颜色数组,生成之后就是我们期望的色带值。 为了直观的展示色带的生成效果,我们在Html5中将根据色带的渐变色去填充canvas,以此来进行效果的展示。使用色带来填充canvas的方法如下:

/**
* Draws a color map for the given color scheme onto the given canvas.
* */
function drawColorMap(canvas, colorScheme, maxValue, minValue) {
    var context = canvas.getContext('2d');
    context.clearRect(0, 0, canvas.width, canvas.height);
    var width = canvas.width;
    var height = canvas.height;
    var gradient = context.createLinearGradient(0, 0, width, 0);
    if (colorScheme instanceof MultiColorScheme) {
        for (var i = 0; i<colorScheme.colorStops.length; i++) {
            gradient.addColorStop(colorScheme.colorStops[i]/colorScheme.maxValue, 
                colorScheme.colors[i].toString());
        }
    }
    else {
        gradient.addColorStop(0, makeColor(0, 0, width, colorScheme));
        gradient.addColorStop(1, makeColor(width, 0, width, colorScheme));
    }
    context.fillStyle = gradient;
	context.fillRect(0, 0, width, height);
    context.fillStyle = "rgb(0,0,0)";
}

3、实例生成

        最后我们新建一个Html,在这个Html中将使用一个Table表格,然后在页面加载的时候,通过调用预制的色带对象来进行页面渲染,同时我们还演示了一个自定义的颜色区间生成。实例代码如下:


<!DOCTYPE html>
<html>
<head>
  <title>colormap自定义色带生成实战</title>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <script src="./colormaps.js"></script>
  <style type="text/css">
    body {
       margin: 0;
       padding: 0;
    }
	
	table {
		border-collapse: collapse;
		width: 95%;
		margin: 10px auto;
	}
	th, td {
		border: 1px solid black;
		padding: 3px;
		text-align: left;
	}
	th {
		background-color: #f2f2f2;
	}
    
  </style>
</head>
<body>
	
  
	<table>
        <tr>
            <th width="20%">色带值</th>
            <th width="80%">色带效果</th>
        </tr>
        <tr>
            <td>GREEN_RED_SCHEME</td>
            <td>
				<canvas id="myCanvas" width="1024" height="40" ></canvas>
			</td>
        </tr>
        <tr>
            <td>BLUE_RED_SCHEME</td>
            <td>
				<canvas id="myCanvas1" width="1024" height="40" ></canvas>
			</td>
        </tr>
        <tr>
            <td>YELLOW_RED_SCHEME</td>
            <td>
				<canvas id="myCanvas2" width="1024" height="40" ></canvas>
			</td>
        </tr>
        <tr>
            <td>WHITE_BLUE_SCHEME</td>
            <td>
				<canvas id="myCanvas3" width="1024" height="40" ></canvas>
			</td>
        </tr>
        <tr>
            <td>YELLOW_RED_BLACK_SCHEME</td>
            <td>
				<canvas id="myCanvas4" width="1024" height="40" ></canvas>
			</td>
        </tr>
		<tr>
            <td>YELLOW_RED_SCHEME</td>
            <td>
				<canvas id="myCanvas5" width="1024" height="40" ></canvas>
			</td>
        </tr>
        <tr>
            <td>WHITE_BLUE_SCHEME</td>
            <td>
				<canvas id="myCanvas6" width="1024" height="40" ></canvas>
			</td>
        </tr>
        <tr>
            <td>YELLOW_RED_BLACK_SCHEME</td>
            <td>
				<canvas id="myCanvas7" width="1024" height="40" ></canvas>
			</td>
        </tr>
		
		<tr>
            <td>自定义1</td>
            <td>
				<canvas id="myCanvas8" width="1024" height="40" ></canvas>
			</td>
        </tr>
        <tr>
            <td>自定义2</td>
            <td>
				<canvas id="myCanvas9" width="1024" height="40" ></canvas>
			</td>
        </tr>
        <tr>
            <td>自定义3</td>
            <td>
				<canvas id="myCanvas10" width="1024" height="40" ></canvas>
			</td>
        </tr>
    </table>
</body>
</html>

        然后在页面中调用色带对象进行canvas的绑定,代码如下:

<script>
		window.onload = function() {
			console.log(colorSchemes);
			drawColorMap( document.getElementById('myCanvas'), GREEN_RED_SCHEME, 100, 0);
			drawColorMap( document.getElementById('myCanvas1'), BLUE_RED_SCHEME, 1000, 0);
			drawColorMap( document.getElementById('myCanvas2'), YELLOW_RED_SCHEME, 1000, 0);
			drawColorMap( document.getElementById('myCanvas3'), WHITE_BLUE_SCHEME, 1000, 0);
			drawColorMap( document.getElementById('myCanvas4'), BLUE_GREEN_SCHEME, 1000, 0);
			drawColorMap( document.getElementById('myCanvas5'), YELLOW_RED_BLACK_SCHEME, 1000, 0);
			drawColorMap( document.getElementById('myCanvas6'), BLUE_WHITE_RED_SCHEME, 1000, 0);
			drawColorMap( document.getElementById('myCanvas7'), BLUE_GREEN_YELLOW_RED_SCHEME, 1000, 0);
			
			drawColorMap( document.getElementById('myCanvas8'), new ColorScheme('diy1', 0, 1000, 0, 35, 2, 50, 61, 90), 1000, 0);
			drawColorMap( document.getElementById('myCanvas9'), new ColorScheme('diy2', 0, 1000, 190, 255, 50, 50, 61, 0), 1000, 0);
			drawColorMap( document.getElementById('myCanvas10'), new MultiColorScheme('', 0, 1000,[new Color(190, 27, 231),
																	new Color(7, 229, 96),
																	new Color(207, 10, 37)]), 1000, 0);
		}
  </script>

         最后呈现出来的就是如下的实际效果:

        在实际开发当中,如果想从色带中获取指定值的颜色,可以通过以下方法:

        通过这个方法就可以返回该值对应的RGB颜色:

makeColor(260,0,1000,GREEN_RED_SCHEME);
'rgb(66,188,0)'

三、总结

        以上就是本文的主要内容,文章主要讲解如何在Html5中生成类似Matlab的色带应用,通过本文您可以熟悉并掌握生成方法,为下一步进行gis的空间自定义分类制图打下颜色制图的基础。博文首先讲解了RGB的相关知识,它的数值表示以及使用场景。然后重点介绍了ColorMap的生成库及其相关的API方法,最后基于colormap构建了一个色带生成的实例,以及如何来自动生成色带。相信通过博文的内容讲解,大家对如何在Html页面中生成色带有了进一步的了解。行文仓促,定有不当之处,恳请各位专家学者博友在评论区留下宝贵的意见,万分感激。

        相关源码传送门:在Html5中生成仿Matlab色带效果源码。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

贪心算法--

1.柠檬水找零 link:860. 柠檬水找零 - 力扣&#xff08;LeetCode&#xff09; code class Solution { public:bool lemonadeChange(vector<int>& bills) {// 贪心算法&#xff0c; 优先花出大面额bill&#xff0c; 尽可能保护小面额billint five 0, ten 0;// 不…

如何选择国产串口屏?

目录 1、迪文 2、淘晶驰 3、广州大彩 4、金玺智控 5、欣瑞达 6、富莱新 7、冠显 8、有彩 串口屏&#xff0c;顾名思义&#xff0c;就是通过串口通信接口&#xff08;如RS232、RS485、TTL UART等&#xff09;与主控设备进行通信的显示屏。其核心功能是显示信息和接收输入…

matlab慕课学习3.1

3.1顺序结构程序 于20250306 3.1.1程序和程序设计 程序是用某种计算机能够理解并且能够执行的语言来描述的解决问题的方法和步骤。 3.1.2程序的三种基本结构 1.顺序结构 2.选择结构 3.循环结构 3.1.3脚本文件和函数文件 脚本文件是可在命令行窗口直接执行的文件&#xff0…

cesium地图设置3d,2d,2.5d动态切换

通过修改cesium实例vw的scene的显示模式&#xff0c;来切换最终的显示模式。 Cesium.SceneMode总共有四个变量值&#xff0c;分别如下&#xff1a;NameTypeDescriptionMORPHINGnumber在3d与2d之间切换变体 between mode, e.g., 3D to 2D.COLUMBUS_VIEWnumber2.5d模式&#xff0…

【数据结构】二叉搜索树、平衡搜索树、红黑树

二叉搜索树&#xff08;Binary Search Tree&#xff09; 二叉搜索树是一种特殊的二叉树&#xff0c;它用来快速搜索某个值&#xff0c;对于每个节点都应该满足以下条件&#xff1a; 若该节点有左子树&#xff0c;那么左子树中所有节点的值都应该小于该节点的值。若该节点有右…

密码学(终极版)

加密 & 解密 备注&#xff1a;密码学领域不存在完全不能破解的密码&#xff0c;但是如果一个密码需要很久很久&#xff0c;例如一万年才能破解&#xff0c;就认为这个密码是安全的了。 对称加密 非对称加密 公钥加密、私钥解密 私钥签名、公钥认证 非对称的底层原理是…

经销商管理系统选型解析:8款产品详评

本文主要介绍了以下8款经销商管理系统&#xff1a;1.纷享销客&#xff1b; 2.用友T6经销商管理系统&#xff1b; 3.金蝶经销商管理系统&#xff1b; 4.鼎捷经销商管理系统&#xff1b; 5.浪潮经销商管理系统&#xff1b; 6.销售易&#xff1b; 7.SAP Business One Distributor …

【C++】函数重载与nullptr

1、函数重载 C支持在同一个作用域中出现同名函数&#xff0c;但是要求这些同名函数的形参不同&#xff0c;可以是形参个数不同或者类型不同。这样C函数调用就表现出了多态行为&#xff0c;使用更灵活。C语言是不支持同一作用域中出现同名函数的。 代码&#xff1a; 形参类型不…

处理动态分页:自动翻页与增量数据抓取策略-数据议事厅

一、案例场景 Lily&#xff08;挥舞着数据报表&#xff09;&#xff1a;“用户反馈我们的股票舆情分析总是缺失最新跟帖&#xff01;这些动态分页像狡猾的狐狸&#xff0c;每次抓取都漏掉关键数据&#xff01;” 小王&#xff08;调试着爬虫代码&#xff09;&#xff1a;“传…

用android studio模拟器,模拟安卓手机访问网页,使用Chrome 开发者工具查看控制台信息

web 网页项目在安卓手机打开时出现问题&#xff0c;想要查看控制台调试信息。记录一下使用android studio 模拟器访问的方式。 步骤如下&#xff1a; 1.安装android studio&#xff0c;新增虚拟设备&#xff08;VDM- virtual device manager) 点击Virtual Device Manager后会…

【Linux内核系列】:深入理解缓冲区

&#x1f525; 本文专栏&#xff1a;Linux &#x1f338;作者主页&#xff1a;努力努力再努力wz ★★★ 本文前置知识&#xff1a; 文件系统以及相关系统调用接口 输入以及输出重定向 那么在此前的学习中&#xff0c;我们了解了文件的概念以及相关的系统调用接口&#xff0c;并…

【互联网性能指标】QPS/TPS/PV/UV/IP/GMV/DAU/MAU/RPS

&#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》&#xff08;基础篇&#xff09;、&#xff08;进阶篇&#xff09;、&#xff08;架构篇&#xff09;清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、…

【微知】如何根据内核模块ko查看所依赖其他哪些模块?(modinfo rdma_ucm |grep depends)

背景 有些情况下查看某个模块被哪些模块依赖可以用lsmod看到后面的列表&#xff0c;但是反向查看就要麻烦一些&#xff0c;比如某个模块依赖哪些其他模块&#xff1f;通过modinfo xxx.ko获取里面的depends相关信息 方法 modinfo rdma_ucm |grep depends实操 实操前先看依赖…

Linux安装ComfyUI

Linux安装ComfyUI 1. ComfyUI2. 放置模型文件3. 创建python虚拟环境3.1 删除 Conda 虚拟环境 4. python虚拟环境&#xff0c;安装PyTorch5. 安装依赖6. 运行7. 打开8. 下载模型 移动到路径 1. ComfyUI # cat /etc/issue Ubuntu 20.04.6 LTS \n \lmkdir comfyUI cd comfyUI/git…

订阅指南:用关键指标驱动业务增长

分析订阅业务远非看似简单。仅仅增加订阅数可能并不比维持一批忠实用户更有利可图。深入分析订阅数据及其背后的运作机制&#xff0c;将帮助您优化产品决策、预测收入并促进增长。本文将为您解读关键订阅指标的实际意义&#xff0c;并展示如何通过订阅宝这一专业工具&#xff0…

【开发学习】如何使用deepseek创建记录事件时间的PC应用程序

本文记录了尝试使用deepseek创建应用程序的过程&#xff0c;实现记录事件&时间的PC应用程序&#xff0c;包括创建代码、测试及调整。 目的&#xff1a;创建一个应用&#xff0c;用户输入文本提交&#xff0c;应用记录下时间和文本&#xff0c;数据留存在excel和应用程序中。…

OSPF-单区域的配置

一、单区域概念&#xff1a; 单区域OSPF中&#xff0c;整个网络被视为一个区域&#xff0c;区域ID通常为0&#xff08;骨干区域&#xff09;。所有的路由器都在这个区域内交换链路状态信息。 补充知识点&#xff1a; OSPF为何需要loopback接口&#xff1a; 1.Loopback接口的…

【2025力扣打卡系列】0-1背包 完全背包

坚持按题型打卡&刷&梳理力扣算法题系列&#xff0c;语言为python3&#xff0c;Day5 0-1背包【目标和】 有n个物品&#xff0c;第i个物品的体积为w[i], 价值为v[i]。每个物品至多选一个&#xff0c;求体积和不超过capacity时的最大价值和常见变形 至多装capacity&#x…

分布式锁—Redisson的同步器组件

1.Redisson的分布式锁简单总结 Redisson分布式锁包括&#xff1a;可重入锁、公平锁、联锁、红锁、读写锁。 (1)可重入锁RedissonLock 非公平锁&#xff0c;最基础的分布式锁&#xff0c;最常用的锁。 (2)公平锁RedissonFairLock 各个客户端尝试获取锁时会排队&#xff0c;按照队…

OpenEuler24.x下ZABBIX6/7实战1:zabbix7.2.4安装及zabbix-agent安装

兰生幽谷&#xff0c;不为莫服而不芳&#xff1b; 君子行义&#xff0c;不为莫知而止休。 1 安装及准备 先决条件&#xff1a;建议使用CentOS8以上的操作系统。 CentOS8.5.2111内核版本为 图1- 1 华为OpenEuler24(以后简称OE24)的内核为 [rootzbxsvr ~]# uname -r 5.10.0-…