首页 > 其他分享 >ofd轻阅读超大文件优化方案

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

时间:2024-07-30 18:50:01浏览次数:9  
标签:canvas 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内容,就会发现有如下特点:

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

 

标签:canvas,ofd,绘制,占用,内存,优化,超大,加载
From: https://www.cnblogs.com/yuanchenhui/p/18332948/ofd-web-optimize

相关文章

  • Jmeter+Ant生成优化HTML的接口测试报告
    为什么要这么做?在实际测试场景遇到这样一种情况,开发重构了接口实现逻辑,该接口主要用于查询操作,接口的入参有上千种可能,查询出来的内容很多,需要与原来接口比对,检查是否一致那此时,单纯用jmeter跑一遍的话,很难直观的看到测试之后的结果,所以就需要这样一种报告来展示,供开发修改在这......
  • HTTP/1.1 优化
    避免发送HTTP请求对于一些具有重复性的HTTP请求,比如每次请求得到的数据都一样的,我们可以把这对「请求-响应」的数据都缓存在本地,通过缓存技术减少请求次数。客户端会把第一次请求以及响应的数据保存在本地磁盘上,其中将请求的URL作为key,而响应作为value,两者形成映射关系......
  • 前端实现【 批量任务调度管理器 】demo优化
    一、前提介绍我在前文实现过一个【批量任务调度管理器】的demo,能实现简单的任务批量并发分组,过滤等操作。但是还有很多优化空间,所以查找一些优化的库,主要想优化两个方面,上篇提到的:针对3,其实可以自己手写一个,也可以依靠如什么来实现。针对2,最难的是根据【当前系统负......
  • 回归预测|基于灰狼优化BP神经网络的多特征输入单输出的数据回归预测Matlab程序GWO-BP
    文章目录一.灰狼优化BP神经网络基本原理二.灰狼优化BP神经网络Matlab程序2.1实验结果2.2Matlab程序一.灰狼优化BP神经网络基本原理灰狼优化(GreyWolfOptimization,GWO)结合BP神经网络进行数据回归预测是一种结合了优化算法和神经网络的方法,适用于多......
  • 优化 GitHub 体验的浏览器插件「GitHub 热点速览」
    上周,GitHub有个“安全问题”——CFOR(CrossForkObjectReference)冲上了热搜,该问题的表现是:远程仓库的提交内容任何人可以访问,即使已被删除。只需要拿到commitID+源/Fork的项目地址,任何人都能访问之前提交到远程仓库的内容。下面有3个演示,可以复现该问题:演示一:Fork项目......
  • 如何进行PHP性能优化?
    PHP性能优化是一个复杂且多方面的过程,涉及从代码层面到服务器配置的多个方面。以下是一些关键的优化技巧和最佳实践:选择合适的数据结构(如数组、对象等)可以显著提高程序的运行效率。缓存是提升PHP性能的有效手段之一。可以通过页面缓存、数据缓存、内存缓存等方式来减少重复计......
  • 提高 z3 优化问题的求解器速度
    我正在尝试使用Z3(Python)解决包含线性整数模理论的SMT问题。该问题类似于Knuth的可满足性书第14f页上的“学习布尔函数”示例。我的问题有一组布尔值公式(数百个),每个公式包含要求解的同一组未知整数和布尔变量(数十个),优化目标是最大化真实公式的数量作为这些公式的函数未......
  • 好用的开源免费录屏工具|OBS录屏参数设置|OBS录屏参数优化|录屏工具科普|OBS如何设置
    背景/引言我的需求相信这也是大多数用户的录屏需求。选择一款开源免费的PC录屏软件(开源意味着可能需要了解一些参数概念以及如何设置,设置多少的问题,灵活性带来入门门槛的问题,但是相应的也会掌握一些视频相关的知识,也非坏事),不是直播录制,而是录制屏幕即可;关键的需求,录制的视......
  • JCR一区级 | Matlab实现SO-Transformer-LSTM多变量回归预测(蛇群算法优化)
    JCR一区级|Matlab实现SO-Transformer-LSTM多变量回归预测(蛇群算法优化)目录JCR一区级|Matlab实现SO-Transformer-LSTM多变量回归预测(蛇群算法优化)效果一览基本介绍程序设计参考资料效果一览基本介绍1.【JCR一区级】Matlab实现SO-Transformer-LSTM多变量......
  • html中javascript点击事件后显示或隐藏某些元素时需要点击两次才生效的原因分析和优化
    html中javascript点击事件后显示或隐藏某些元素时需要点击两次才生效的原因分析和优化。原来的代码如下:<divclass="cardcardcol-sm-6col-md-4col-xl-2col-lg-2justify-content-centerbg-secondary-subtle"id="tools-trigger"><ahref="javascript:vo......