【fabric.js】toDataURL 性能问题、优化
必要解释:最好看完。。省流版的话,toDataURL 的 multiplier参数不要设置超过500;
情景:在做某些功能的时候涉及到图形的预览,预览的时候是导出为40*40 像素的图片,当碰到某些图形非常小的时候,例如该图形是0.01宽/0.01高,那么如果想要得到该图形40*40大小的图片则需要放大非常大的倍数 multiplier,从而导致 toDataURL 一个函数就需要执行1秒(根据放大倍数而定),且放大的倍数 multiplier 有一个临界值,当multiplier的值超过xxx时,multiplier每提高一段倍数,所需的时间更长。例如multiplier800是1秒,multiplier1200是2秒 (当时情况已经忘了,所以只是打个比方,感兴趣的自己测下就知道了)。。
吐槽:当时解决大量图形的性能瓶颈,解决完虚拟化列表后,自测时还是发现某些情况下(某些素材)加载时、操作时有性能问题,当时找了半天最后才发现是 toDataURL 导致的性能问题;
解决方案:
宽||高超过40的就是缩小了,不存在性能问题;
0.01*0.01的图形放大至40的时候,40/0.01就会得到4000的倍率,而且这么这么小的图形即使放大,也看不清,故而采取措施为将该图形不进行图片提取,反正拿到图片你也看不见这图形,不如不拿就完事了。。
本文其实就是讲解思路和问题点所在,代码案例写不写无所谓,没啥复杂的,但也分享下自己案例的相关片段;
val.clone(async (newShape: fabric.Object) => {const options = {strokeWidth: 1,} as any;if (newShape.stroke) {options.stroke =newShape.processMode === ProcessMode.cut? newShape.originStrokeForCut: newShape.originStroke;}const w = newShape.width && 30 / (newShape.width * (newShape.scaleX as number));const h = newShape.height && 30 / (newShape.height * (newShape.scaleY as number));const multiplier = Math.min((w || h) as number, (h || w) as number);e.base64 = '';if (multiplier < 500) {multiplier < 1 && (options.strokeWidth = (1 / multiplier) * 1.5);newShape.set(options);e.base64 = newShape.toDataURL({multiplier,});}});
相关文章:
【fabric.js】toDataURL 性能问题、优化
必要解释:最好看完。。省流版的话,toDataURL 的 multiplier参数不要设置超过500; 情景:在做某些功能的时候涉及到图形的预览,预览的时候是导出为40*40 像素的图片,当碰到某些图形非常小的时候,…...
基于Grafana+Prometheus搭建可视化监控系统实践
基本介绍 Grafana:一个监控仪表系统,可以根据提供的监控数据,生产可视化仪表盘,同时也具有告警通知功能。这里的监控数据来源,目前主要以Prometheus为主(也支持其它数据源),每次展现…...
选择排序(堆排序和topK问题)
选择排序 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。 如果我们用扑克牌来举例,那么选择排序就像是提前已经把所有牌都摸完了,而再进行牌…...
webpack tree shaking 摇树原理
Tree-shaking 是指在打包过程中通过静态分析,识别并删除未使用的代码,以减小最终输出文件的大小。Webpack 通过内置的 UglifyJS 插件或者 Terser 插件来实现 Tree-shaking。下面是简要的 webpack Tree-shaking 的原理: 标记未使用的代码&…...
开源模型应用落地-业务整合篇(三)
一、前言 在之前的两篇文章中,我们学习了如何构建基本的即时消息(IM)功能。今天,我们将进一步将IM模块与AI服务进行连接,实现用户提问并由模型进行回答,最后将结果展示在用户界面上。 二、术语 2.1. Spring Boot 是一个用于快速构建基于Spring框架的Java应用程序的开源框…...
js打地鼠
文章目录 1实现效果2代码实现 1实现效果 游戏难度:简单,一般,困难,噩梦(控制setInterval的time参数) 按钮功能:结束(可以通过修改gameScore的值来修改判定结束的分数)&am…...
计算机网络体系架构认知--网络协议栈
文章目录 一.计算机网络分层架构各协议层和计算机系统的联系从整体上理解计算机网络通信计算机网络通信的本质 二.Mac地址,IP地址和进程端口号三.局域网通信与跨局域网通信局域网通信跨局域网通信全球互联的通信脉络 四.网络编程概述 一.计算机网络分层架构 实现计算机长距离网…...
Ubuntu 22.04 安装tomcat
tomcat是常用的Java服务容器,这篇文章我们就来讲讲如何安装它。 更新软件包 首先是更新软件包,这是最常规的操作 sudo apt update 然后是开始安装,不多一会就可以安装好了 sudo apt install tomcat9 然后看一下状态 sudo systemctl status tomcat9 发现虽然启动了,但…...
记录:Ubuntu 18.04 X86 上通过CMake 指定编译器工具链交叉编译。
最好是通过 cmake 命令行来设置,要不然你只有在 CMakeFiles.txt 里面自己写判断语句了。 要用 cmake 交叉编译,必须设置连接器,要不然会使用当前系统的 ld,就是 /usr/bin/ld。 但是其它平台是不会ld上的,elf格式都不…...
requests,js逆向练习
自上而下排除jquery源码,点进去utils 发现第一次请求是getTime 再次运行此断点才是登录,这个时候密码已经被加密了 查看上级js页面,发现加密函数 进去看函数加密过程 得到结果RSA python代码 import base64 import jsonimport requests f…...
Chrome 插件调试
http://blog.haoji.me/chrome-plugin-develop.html#te-bie-zhu-yi-background-de-bao-cuo 手把手:Chrome浏览器开发系列(四):调试我们开发的插件 - 掘金...
云轴科技ZStack成为交通运输业上云用云推进中心首批成员单位
近日,中国信息通信研究院、中国交通运输协会信息专业委员会联合发起成立“交通运输业上云用云推进中心”,上海云轴信息科技有限公司(简称云轴科技ZStack)凭借优秀的产品技术创新能力和在交通运输领域的实践经验成为首批成员单位并…...
代码随想录算法训练营31期day4,力扣24+19+02.07+142
24,动指针 class Solution { public:ListNode* swapPairs(ListNode* head) {//建立虚拟头结点auto dummynew ListNode(-1);dummy->nexthead;for(auto pdummy;p->next&&p->next->next;){auto ap->next;auto ba->next;p->nextb;a->n…...
eNSP学习——利用单臂路由实现VLAN间路由
目录 原理概述 实验内容 实验目的 实验步骤 实验拓扑 实验编址 配置步骤 创建VLAN并配置Access、Trunk接口 配置路由器子接口和IP地址 配置路由器子接口封装VLAN 测试结果 原理概述 在以太网中,通常会使用VLAN技术隔离二层广播域来减少广播的影响&#…...
ISO27001认证:企业与个人发展的必备之选
ISO27001认证,对于企业和个人来说,都具有极高的价值和重要性。作为国际权威的信息安全管理体系标准,它为企业提供了保障信息安全、防范风险和提升竞争力的有力工具。 💼对企业的价值: ISO27001认证可以帮助企业满足国家…...
SpringBoot使用druid
SpringBoot使用druid 一、前言二、配置1、pom依赖2、配置文件yml3、配置类 一、前言 Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池。 Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C…...
TongWeb8交流常见问答集
问题1:今后用到你们TongWeb产品该联系谁? 答复: 1. 商务问题,如:报价、license授权、合同等请联系销售。 2. TongWeb技术问题,未签项目联系售前,已签项目联系售后。有指定项目经理的项目&…...
GBASE南大通用分享-mysql中的load data infile用法
GBASE南大通用分享 mysql中的load data infile用法 LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE file_name.txt [REPLACE | IGNORE] INTO TABLE tbl_name [FIELDS [TERMINATED BY \t] [OPTIONALLY] ENCLOSED BY ] [ESCAPED BY \\ ]] [LINES TERMINATED BY \n] [IGNORE number L…...
Ubuntu18编译jdk8源码
环境 系统 ubuntu18 Linux ubuntu 5.4.0-150-generic #167~18.04.1-Ubuntu SMP Wed May 24 00:51:42 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux jdk源码openjdk-8u41-src-b04-14_jan_2020.zip bootJdk jdk-8u391-linux-x64.tar.gz ps -e|grep ssh sudo apt-get install ssh…...
《开始使用PyQT》 第01章 PyQT入门 02 安装Python3和PyQT6
02 安装Python3和PyQT6 《开始使用PyQT》 第01章 PyQT入门 02 安装Python3和PyQT6 So that all readers are on the same page, let’s begin by installing or updating your version of Python. 为了让所有读者都能理解,让我们从安装或更新 Python 版本开始。 …...
免费LLM API资源全攻略:从开源模型到工程化实践
1. 项目概述:一个汇集免费LLM API资源的宝藏仓库 如果你正在开发一个需要集成大语言模型(LLM)的应用,无论是聊天机器人、内容生成工具,还是数据分析助手,第一个拦路虎往往就是API成本。OpenAI、Anthropic这…...
强化学习如何优化城市洪水管理?哥本哈根项目揭示数据驱动规划新范式
1. 项目概述:当强化学习遇见城市洪水管理如果你是一位城市规划师或水务工程师,面对日益频发的极端降雨和城市内涝,传统的静态规划模型是否让你感到力不从心?气候变化带来的不确定性,让“一次性”的工程解决方案风险陡增…...
别再瞎调了!OpenCV手动曝光参数CAP_PROP_EXPOSURE与快门时间换算表(附Python/C++代码)
OpenCV曝光参数与快门时间实战指南:从原理到精准控制 在计算机视觉项目中,摄像头曝光控制往往是影响图像质量的关键因素之一。许多开发者在使用OpenCV的CAP_PROP_EXPOSURE参数时,都会遇到一个共同的困惑:为什么设置的值是-13而不…...
从虚拟到物理:电子系统原型设计的工程化策略与实战解析
1. 原型设计全景:从概念到实物的工程化思维 在电子系统设计领域,尤其是面对航空航天、汽车电子、通信设备这类高复杂、高可靠性要求的项目时,“原型”这个词的分量远超一个简单的模型。它不是一个可有可无的步骤,而是连接创意与产…...
电子测试安全:示波器浮地测量与隔离变压器应用全解析
1. 项目概述:一次关于测试测量安全的深度探讨又到了周五,对于很多工程师来说,这可能是最想摸鱼但又不得不处理手头棘手问题的一天。想象一下这个场景:你面前摆着一台直接从市电取电的设备,它的某个测试点对地可能有高达…...
搞AI的你踩坑了吗?Ubuntu更新后GPU突然‘失联’的排查与修复实录
搞AI的你踩坑了吗?Ubuntu更新后GPU突然‘失联’的排查与修复实录 凌晨三点的实验室,显示器泛着冷光,训练了72小时的模型即将收敛。你按下回车键查看进度,却看到一行刺眼的报错:NVIDIA-SMI has failed because it could…...
Vivado里FIFO IP核的Standard和FWFT模式到底怎么选?一个波形对比就懂了
Vivado中FIFO IP核模式选择:Standard与FWFT的深度解析与实战指南 在FPGA开发中,数据缓冲是几乎所有高速数据处理系统不可或缺的一环。作为Xilinx工具链中的核心IP之一,FIFO Generator提供了灵活的数据缓冲解决方案。但当面对Standard FIFO和F…...
机器人接触式操作:混合式轨迹优化与策略学习
1. 机器人接触式操作的核心挑战与解决方案在机器人操作领域,接触式任务(如物体翻转、装配、精密放置)一直是最具挑战性的问题之一。这类任务要求机器人频繁建立和断开与物体的接触,同时需要精确控制接触力和运动轨迹。哪怕几毫米的…...
AI技能gate-of-oss:智能海巡GitHub,高效开源项目选型
1. 项目概述:一个帮你“海巡”GitHub的AI技能在软件开发这个行当里,我敢说,几乎每个开发者都经历过这样的时刻:为了解决一个具体问题,或者想给项目引入一个新功能,一头扎进GitHub的汪洋大海,试图…...
【Midjourney Tempera风格终极指南】:20年AI绘画专家亲授3大参数黄金配比与5类易踩翻车点
更多请点击: https://intelliparadigm.com 第一章:Tempera风格的本质解构与历史溯源 Tempera(蛋彩画)作为一种古老而精密的绘画媒介,其技术逻辑与现代前端渲染范式存在深层隐喻关联——尤其在“分层合成”“介质绑定”…...
