07-ArcGIS For JavaScript--隐藏参数qualitySettings(memory和lod控制)

目录

1、综述

先上重点,SceneView.qualitySettings为隐藏对象参数,该对象的memoryLimit和lodFactor等值,可以修改当前可见区域加载的内存大小,并且可以修改当前场景中加载的模型的lod的层级(控制相同视角下的模型的粗糙度)。

对于ArcGIS For JavaScript,只能从SceneViewPerformanceInfo对象下图参数中看到与内存相关的内容:

对于这些内存的内容,我们能够了解到当前场景中使用的内存大小,以及能够允许的最大内存,但是却不能去直接设置当前场景可加载的内存大小。

通过下面代码,可以打印一下SceneView对象的信息。

javascript 复制代码
const view = new SceneView({
        container: "viewDiv",
        map: map,
      });

      view.when(function () {
        console.log(view)
      })

在我们常用的qualityProfile下面有一个qualitySettings的参数,这个就是我们今天要降到的隐藏参数。

2、sceneview.qualitySettings

对于qualitySettings的研究后,目前有可见效果的参数有以下几个:

  1. memoryLimit:设置当前可见区域内的最大加载内存
  2. lodFactor:设置当前场景中模型的lod级别
  3. additionalCacheMemory:设置缓存本地的内存大小。
    下面分别介绍这几个参数。

2.1、sceneview.qualitySettings.memoryLimit

我们知道SceneView场景中qualityProfile参数设置为high, medium 和low的时候,其对应的memoryLimit的值是不一样的,如下:

这个memoryLimit其实就是限制了当前可见区域的数据加载的对大值,例如,当讲sceneview.qualitySettings.memoryLimit值设置为50MB的时候,出现如下情况。

  1. 模型再拖动的时候出现缺块问题。
  2. 后台报内存溢出。



    这个缺块就是因为当前可见区域内存太小,导致加载其他数据时会先删除之前加载的缓存,再去加载新的,删除的时候就会导致缺块问题。

因此当遇到后台报内存错误问题,或者页面在加载的时候出现缺块问题,可以通过调整sceneview.qualitySettings.memoryLimit去解决。

2.2、lodFactor

lodFactor主要是修改当前模型限制的lod级别,默认为1,当设置为0.5的时候,模型限制的比较粗糙,当设置为2的时候,模型限制的比较精细。

sceneview.qualitySettings下有个sceneService对象,下面可以看到有integratedMesh(倾斜模型)、object(3d object模型)、point(点模型)、pointCloud(点云模型)等对象。

用倾斜举例,可以看到integratedMesh下面有个lodFactor的值。

默认情况:

lodFactor=0.1时:

javascript 复制代码
view.qualitySettings.sceneService['integratedMesh'].lodFactor = 0.1;

lodFactor=2时

javascript 复制代码
view.qualitySettings.sceneService['integratedMesh'].lodFactor = 2;

因此,当需要在特定场景对模型的精细度要求比较严格的时候,可以通过调整lodFacrtor的值进行修改。

2.3 additionalCacheMemory

additionalCacheMemory主要是设置当前页面缓存到本地硬盘的大小的变量,可以将需要预览的数据提前缓存到本地,下次浏览的时候提升加载速度。但是这种情况再页面刷新后会本清除。

3、结论

  1. 当模型数据比较大的时候,模型加载出现缺块问题,可通过修改memoryLimit值进行测试。但是大小不能太大,需要考虑浏览器的压力。
  2. 当场景在不同情况下对模型的精度要求很严格的时候,或者需要降低模型质量去提升加载效率的时候,可通过修改lodFactor。
  3. additionalCacheMemory主要是设置当前页面缓存到本地硬盘的大小的变量,可以将需要预览的数据提前缓存到本地,下次浏览的时候提升加载速度。但是这种情况再页面刷新后会本清除。
相关推荐
一粒黑子1 小时前
【实战解析】阿里开源 PageAgent:纯前端 GUI Agent,一行JS让网页支持自然语言操控
前端·javascript·开源
IT枫斗者1 小时前
前端部署后如何判断“页面是不是最新”?一套可落地的版本检测方案(适配 Vite/Vue/React/任意 SPA)
前端·javascript·vue.js·react.js·架构·bug
九转成圣2 小时前
Java 性能优化实战:如何将海量扁平数据高效转化为类目字典树?
java·开发语言·json
Beginner x_u2 小时前
链表专题:JS 实现原理与高频算法题总结
javascript·算法·链表
SmartRadio2 小时前
ESP32-S3 双模式切换实现:兼顾手机_路由器连接与WiFi长距离通信
开发语言·网络·智能手机·esp32·长距离wifi
laowangpython2 小时前
Rust 入门:GitHub 热门内存安全编程语言
开发语言·其他·rust·github
我叫汪枫2 小时前
在后台管理系统中,如何递归和选择保留的思路来过滤菜单
开发语言·javascript·node.js·ecmascript
_.Switch2 小时前
东方财富股票数据JS逆向:secids字段和AES加密实战
开发语言·前端·javascript·网络·爬虫·python·ecmascript
软件技术NINI2 小时前
webkit简介及工作流程
开发语言·前端·javascript·udp·ecmascript·webkit·yarn
Brendan_0012 小时前
JavaScript的Stomp.over
开发语言·javascript·ecmascript