当前位置: 首页 > wzjs >正文

设计师门户网站源码网站建设毕业设计中期进度报告

设计师门户网站源码,网站建设毕业设计中期进度报告,wordpress文章付费可看,嵌入式开发难学吗文章目录 起因前提优化1 合并对象优化2 第三方库以及处理方法的抉择1. 三方库Utf8Json ⚠️ 暂不可用有程序崩溃风险2. 三方库SimpleJSON ✅ 1.33s3. 系统库JsonUtility ⚠️ 不好用容易解析不出来4. System.Text.Json ✅ 1.4s4. Newtonsoft.Json改进处理 ✅ 1.33s &#x1f3a…

文章目录

    • 起因
    • 前提
    • 优化1 合并对象
    • 优化2 第三方库以及处理方法的抉择
      • 1. 三方库Utf8Json ⚠️ 暂不可用有程序崩溃风险
      • 2. 三方库SimpleJSON ✅ 1.33s
      • 3. 系统库JsonUtility ⚠️ 不好用容易解析不出来
      • 4. System.Text.Json ✅ 1.4s
      • 4. Newtonsoft.Json改进处理 ✅ 1.33s
    • 🎯 总结

起因

起因是我们这边unity的loading页面加载时间过长,所以就开始做loading页面的优化,起初发现我们这边有个资源的json序列化需要花掉3s多的时间,同时这块因为处理在主线程,因此导致loading页面不但加载时间长,而且还卡顿,给用户造成了很不好的体验,所以在加载速度上这块是我们比较看重的指标。

前提

1. json文件大小1.5M
2. json层级为 data dataLists 在dataLists下面是我们需要解析的json内容。

优化1 合并对象

之前的处理是这样的:

 JObject jobject = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(strJson);as = jobject["data"]["dataLists"]["a"].ToObject<List<A>>();bs = jobject["data"]["dataLists"]["b"].ToObject<List<B>>();cs = jobject["data"]["dataLists"]["c"].ToObject<List<C>>();...

可能许多同学都爱这么写这样看着比较明了,但是这块处理有性能问题,性能问题在于ToObject方法会造成二次序列化,因为JToken 内部保存的是 JSON 数据的 DOM 结构(树状模型),调用 ToObject() 会:
1.把这部分 JToken 结构重新转换为 JSON 字符串
2.再调用 JsonConvert.DeserializeObject() 去反序列化为对象
等同于如下代码:

var jsonStr = jobject["data"]["dataLists"]["a"].ToString();
var A = JsonConvert.DeserializeObject<List<A>>(jsonStr);

因此我们在这里做出应对将A,B,C等这些解析后的对象放在一个对象里面,因此就造就了新的集合对象,对象结果如下

[System.Serializable]
public class Datas
{public DataWrapper data { get; set; }public int version { get; set; }
}// 对应 data 节点
[System.Serializable]
public class DataWrapper
{public DataLists dataLists { get; set; }
}// 对应 data.dataLists
[System.Serializable]
public class DataLists
{public List<A> a { get; set; }public List<B> b{ get; set; }public List<C> c { get; set; }...
}

后面我们初始化的逻辑就简单了,只需解析这个大对象即可,解析代码如下

Datas datas = JsonConvert.DeserializeObject<Datas>(strJson);

我们需要的数据只需要datas.data.a …
这样json的解析时长也从3s变成了1.8s到2s之间,优化了3分之一的时间。

优化2 第三方库以及处理方法的抉择

1. 三方库Utf8Json ⚠️ 暂不可用有程序崩溃风险

通过各种查阅资料吧,看着说Utf8Json能提高加载速度,是Newtonsoft.Json的多少倍,于是我这边通过github找到了这个库,git地址为 utf8json的github地址
可能是我集成的问题,我解决了导入工程问题后直接运行unity崩溃了,而且我看提交历史,都是7 8 年前的提交历史了,因此这个库我就pass了,不过写这个库的作者又写了个MessagePack for C#,这个倒是一直维护感兴趣的可以看下。

2. 三方库SimpleJSON ✅ 1.33s

simplejson是个比较好用的第三方库,它可以方便的拿到对应节点上的内容,但是这个库有个致命的缺点他不可以直接序列化对象,想要序列化对象需要借助系统的 JsonUtility.FromJson(strJson);,或者其他第三方的json转换。所以使用它的方法变为了下面的处理

 JSONNode root = JSON.Parse(strJson); string dataList = root["data"]["dataLists"].ToString(); DataLists player = JsonConvert.DeserializeObject<DataLists>(dataList);

最终这个处理能正常解析json并且提高了加载效率,加载时间从1.8s变为了1.33s,因此这个库可以使用。

3. 系统库JsonUtility ⚠️ 不好用容易解析不出来

我这边尝试了下,假如我们的json文件的datalists下面有 a b c d e这些元素但是我们对象只有 a b c这三个属性会出现对象解析出来为空的情况,这个库有以下特征,开发小伙伴们需要注意下。
❌ 不支持泛型

❌ 不支持 Dictionary

❌ 不支持属性(只认 public 字段)

❌ 不支持动态结构或嵌套不匹配

❌ 错误静默,不报错,字段为 null

4. System.Text.Json ✅ 1.4s

这个库是微软提供的,是 .NET Core 3.0 推出的内置库,持续维护中,感兴趣的可以试一下。
集成步骤如下:
1.下载NuGetForUnity github地址为 NuGetForUnity ,并安装这个package
2.安装好这个package后打开菜单 NuGet > Manage NuGet Packages
3.搜索并安装 System.Text.Json 这个东西会下载很多的其它绑定库。
基本使用就不介绍了我们看下这边是如何处理解析json的代码如下:

Datas preLoad = System.Text.Json.JsonSerializer.Deserialize<Datas>(strJson);

就这一行就可以解析我们的对象耗时1.4s左右同事他有如下限制开发时候需要注意。
❌ 不支持 private 属性
❌ 不支持 public 字段
❌ 不支持 private 字段
因此定义解析对象的时候我们需要注意1.属性要设置为共同的,public 字段不支持因此字段后面要加上{ get; set; }这样编辑器就会认为这是个方法属性。

4. Newtonsoft.Json改进处理 ✅ 1.33s

之前的处理我们注意到我们真实的数据外面有两层一层data,一层datalist,其实这种定义对于我们需要的结果没任何意义因此我们先取出JObject然后从JObject中取出DataLists代码如下

 JObject jobject = (JObject)JsonConvert.DeserializeObject(strJson);JToken dataList = jobject["data"]["dataLists"];DataLists player = dataList.ToObject<DataLists>();

最终主要耗时体现在了JsonConvert.DeserializeObject上面最终耗时也是达到了1.33s。

🎯 总结

这几个库对比来开优先
1.Newtonsoft.Json 推荐 通过改进处理能显著提高响应速度,并且使用起来还是很方便的,
2.SimpleJSON 推荐 使用简单在特殊场合使用比较方便,但是这个库不能直接解析对象还是有些不太好用。
3.System.Text.Json 推荐 这个库效率还不错,同样官方出品放心可靠, 有一些限制大家还是需要注意的比如属性设置, 不知道是不是我的错觉 引入这个库后编译时间变长了,大家可以看下自己是不是也这样了。
4.系统库JsonUtility 这个不太推荐 不过就是要注意自己写的结构要跟json本身一一对应好要不就出现莫名奇妙的问题。
5.Utf8Json / MessagePack for C# 前面的新版本unity崩溃,后面的大家可以试试。
还有哪些库大家觉得好用又高效的欢迎评论区留言我可以帮大家测测。


文章转载自:

http://GUo2onMN.nkqnn.cn
http://3SgzR8Zg.nkqnn.cn
http://vhGtNaKk.nkqnn.cn
http://5wQXgFgI.nkqnn.cn
http://VHmJAf5c.nkqnn.cn
http://T1JhdyAq.nkqnn.cn
http://kJ3udoVZ.nkqnn.cn
http://cDOi8Wag.nkqnn.cn
http://wlNuR54p.nkqnn.cn
http://sFn7YkjO.nkqnn.cn
http://VtxUfech.nkqnn.cn
http://K0UlMfHL.nkqnn.cn
http://AoUzmawO.nkqnn.cn
http://Y7Wp8Iz0.nkqnn.cn
http://ZyOAZIDu.nkqnn.cn
http://aCgUAdP1.nkqnn.cn
http://0CZuGhiQ.nkqnn.cn
http://9nFaA5w5.nkqnn.cn
http://U2Qo32j3.nkqnn.cn
http://U3BdKUF4.nkqnn.cn
http://8yiRdfaG.nkqnn.cn
http://oEkBBKm9.nkqnn.cn
http://3jYCzanz.nkqnn.cn
http://ZBFRCUzy.nkqnn.cn
http://pG259BVO.nkqnn.cn
http://5hAouPxi.nkqnn.cn
http://eKRRce1X.nkqnn.cn
http://7BLjAvda.nkqnn.cn
http://BGlkXTAb.nkqnn.cn
http://gUT3UKcs.nkqnn.cn
http://www.dtcms.com/wzjs/681532.html

相关文章:

  • 网页设计模板网站免费下载wordpress 迅雷下载
  • 设计网站物理结构怎么做天津 网站优化
  • 杭州最好的网站设计公司linux怎么做网站
  • 做校园网站软件安卓下载
  • 做网站除了有服务器还需要什么问题惠州网站小程序建设
  • 网站建设工程师的职位要求朗朗上口的公司名称
  • 网站主机建设方案wordpress-5.6.20
  • 国外网站网站网站建设工具开源
  • html5 单页 响应式 网站模板百度免费推广怎么做
  • 网站更换域名 seo芜湖企业网站建设
  • 网站开发 发送邮件功能做图素材网站哪个好
  • 自有服务器 做网站怎么自己做彩票网站吗
  • 网站策划常用软件河南郑州做网站h汉狮
  • 做简历的网站都有哪些网站简繁转换
  • 学校为什么要建设网站转发文章 WordPress
  • 个人网站首页内容科技类公司网站怎么设计
  • 视频制作素材网站电子书网站搭建教程
  • 网站设计主要包含3个方面织梦新手网站建设
  • 网站建设工作半年通报如何做产品展示网站
  • 网站类网站开发源代码推广软件app赚钱联盟
  • 网站开发需求分析报告怎么做自己的公司网站放在百度
  • 厦门专业的网站建设如何创建自己的公司
  • 建设网站哪家公司好网站开发实验报告模版
  • 建站优化办事效率高dw网页制作论文
  • 毕业设计做网站 服务器怎么弄wordpress安装504
  • 如何运用企业官方网站做宣传网站构建器
  • 百度站长平台链接提交wordpress设置系统邮箱
  • 做自媒体网站深圳公司名称
  • 免费网站商城模板达州网站建设qinsanw
  • 做电商网站需要多少时间我的世界服务器网站怎么做