ofd轻阅读超大文件优化方案

本人使用Typescript开发了一款ofd 阅读器,参见文章《ofd轻阅读》。
web端实现阅读功能有两种方案: ofd转svg;使用h5 canvas。

两种方案各有优劣,本人采用了canvas方案,

劣势:开发难点较大,需要处理更多的细节(比如:文字选中)。

优势:对细节掌控能力更强,能满足用户更苛刻的需求。

打开超大文件时,需要对内存作优化,否则占用内存就会急剧上升,有导致程序崩溃的风险。

:本文所指超大文件是指文件页数特别多,多达上千页。

 

阅读器内存占用分为两个来源:

  1.  ofd文件本身:xml解析、图片资源、嵌入字体等,都会占用内存。
  2.  canvas占用:canvas的个数、大小等都会影响内存占用。 

 本文只针对第二种内存占用情况作优化分析。

 

本人分析发现canvas占用内存有以下几个特点

  1. canvas的宽度、高度越大(即面积越大),占用内存越多。(显而易见)
  2. 如果不在canvas上做任何绘制,canvas占内存较少。(下文会证明这个结论)

测试文件页数:500页。

ofd未加载前 占用内存:

 

 加载ofd,不绘制,占用内存:

 

  加载ofd,绘制,占用内存:

 

三种情况占用内存分别为:276M、500M、7.4G。得出结论:绘制的canvas占用内存较大。

 

 基于上述结论,阅读器加载ofd文件处理步骤

1 快速加载前几页,如果当前页可见,就绘制。

2 对后续的页,使用占位(placeholder)canvas。即只设置canvas的宽和高,使文档的滚动条正常显示。

3 监控页面是否可见,如果可见就显示(生成canvas并绘制);如果不可见,将canvas从dom中移除。

查看生成的html内容,就会发现有如下特点:

后记:本文分析了阅读器占用内存的来源,提出了对应的优化方案。本文提出的方案能解决内存占用的大部分问题;如遇特殊情形,采用具体问题具体分析的方法,解决起来并非难事。

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

笔记:从Aurora 8b/10b 到Aurora 64b/66b (一):Aurora 8b/10b

参考: https://www.xilinx.com/products/intellectual-property/aurora8b10b.html#documentation https://docs.amd.com/r/en-US/pg046-aurora-8b10b https://docs.amd.com/v/u/en-US/aurora_8b10b_ds797 https://mp.weixin.qq.com/s/gT4QUgvoFF6UI0PAhfEPvQ 补丁: Aurora 系…

矩阵指数的定义

人就像是被蒙着眼推磨的驴子,生活就像一条鞭子;当鞭子抽到你背上时,你就只能一直往前走,虽然连你也不知道要走到什么时候为止,便一直这么坚持着。

虚树【学习笔记】

为什么要用虚树? 例题 在某些树上问题中,对于某次询问,我们并不需要用到全部的树上的点: 例如,例题中:总点数 \(n \le 2.5\times10^5\) 询问次数 \(m \le 5\times10^5\) 询问的点数 \(\sum k_i \le 5\times10^5\)我们可以发现其实每次询问均摊下来的询问点数k并不多,但如…

组合机床与自动化加工技术的网站开发

这两天一直在学习如何排版,开发一个网站,我运用了前几天所学的vue基本语法将网站的大致模样copy下来这期间我查找了不少知识 比如照片如何在网页中不变性的缩放,通过研究我运用class固定结构和class="container"属性将组件固定形成此网页

火山引擎VeDI数据技术分享:两个步骤,为Parquet降本提效

本文将介绍字节跳动基于Parquet格式降本增效的技术原理和在具体业务中的实践,首先介绍了Parquet格式在字节跳动的应用,然后将结合具体的应用场景:小文件合并和列级TTL ,从问题产生的背景和解决问题的技术方案出发,介绍如何基于Parquet格式实现降本增效的目标。更多技术交流…

图片预加载和懒加载

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣图片预加载和图片懒加载是网页优化的两种常见技术,它们可以提升用户体验并改善网页性能。 图片预加载(Image Preloading): 图片预加载是指在页面加载时提前加载图片,使其缓存在浏览器中,当用户需要查看这些图片时,…

P4062 Yazid 的新生舞会

谨以此文纪念一场灾难 来给这位善良的人的人点点赞首先 题面中所指的众数为 绝对众数(绝对众数是指在一组数据中出现次数 \(超过\) 总数一半的数值。), 下文的所有众数也指绝对众数。 有以下性质任意一个区间的绝对众数的数值唯一如果\(x\)是区间\([l,r]\)的众数,那么对于\…

KubeSphere 部署向量数据库 Milvus 实战指南

作者:运维有术星主Milvus 是一个为通用人工智能(GenAI)应用而构建的开源向量数据库。它以卓越的性能和灵活性,提供了一个强大的平台,用于存储、搜索和管理大规模的向量数据。Milvus 能够执行高速搜索,并以最小的性能损失扩展到数百亿向量。其分布式架构确保了系统的高可用…

利用DYNAMIXEL智能伺服舵机从《传送门2》中打造一个更优质的动画机器人小麦克利(Wheatley)

原文链接:https://www.youtube.com/watch?v=OEn9hZ-Tw1E这段视频由ROBOTIS提供! 大家好,我想给大家推荐一个精彩视频,在视频中展示了如何制作《传送门2》中的动画机器人小麦克利(Wheatley)。看看是如何利用DYNAMIXEL智能伺服系统让小麦克利活起来的。对于那些可能想设计…

GIS视效升级!零代码添加环境效果,支持多种GIS影像协议

在当今的数字化时代,GIS(地理信息系统)不再仅仅只能通过一些二维示意图或简陋的三维地形图表示,它可以通过专业的软件简单升级视效。想象一下,在你的GIS场景中,阳光明媚的天气、突如其来的暴风雨、缭绕的晨雾,统统都可以通过零代码的操作轻松实现,而这个效果我是使用一…

HomeServer平台选择,介绍常用功能

​​ 平台选择 HomeServer 的性能要求不高,以下是我的硬件参数,可供参考: ‍ 硬件:平台:旧笔记本 CPU:i5 4210u 内存 8G 硬盘:128G 固态做系统盘,1T+1T 机械盘组 RAID1 做存储。 硬盘柜:盘位不足使用硬盘柜做拓展,硬盘柜一定要有散热风扇。‍ 待机功耗:笔记本 + 三块…

waf 应用防火墙部署配置

部署方法: 这里拓扑如下:透明部署: 采用接口对的形式部署 从一个口进 从另一个口出 不存在路由交换 可以将设备看做一条线路 这里使用迪普科技的设备进行演示: 首先创建接口对: 基本》接口管理》组网配置》透明模式此时只需要串联设备到线路中即可 这种配置方式不支持负载…