zoukankan      html  css  js  c++  java
  • 信息系统开发平台OpenExpressApp - 性能相关

      性能是很重要的一个质量属性,架构中都会考虑性能,目前OpenExpressApp主要实现了对象懒加载、传输压缩等一些性能优化,后续还需要不断完善和改进。本篇主要讲一下目前与性能相关的一些问题,由于框架是面向对象的,所以会有一些使用面向对象的一些特定的方面,也欢迎大家多提问题和方案。

    已实现

    WCF传输压缩

      传输优化是网络产品考虑性能的主要点之一,OpenExpressApp使用了WCF的一个压缩通道,基于CSLA开发,压缩率可以达到20倍,源码在 【OpenSource】目录下的CompactMessageEncoder_src.zip,参考文档在CompactMessageEncoder

    根对象懒加载-单据模块懒加载列表记录

      根对象如果是单据样式模 块,根对象需要实现【MergeOldObject】把点击列表后取得的对象合并到列表对象中,实现单据模块懒加载对象功能。在 OpenExpressApp.Module.WPF项目的单据模块模板控制器ListDetailFormController.cs代码中,当点击列 表获取记录后会把获取的对象同步到列表中。

    代码
    public ListDetailFormController(IWindowTemplate windowTemplate)
    :
    base(windowTemplate)
    {
    detailViewController = new DetailViewController(View.DetailView, new EventHandler(DetaiDataChanged));
           ...
         }
    代码

    复杂子对象属性懒加载

      如果一个对象的子对象比较大的时候,可以懒加载这个子对象列表属性,代码如下:

    代码
    private static PropertyInfo<ContractBudgets> ContractBudgetsProperty =
    RegisterProperty(
    new PropertyInfo<ContractBudgets>("ContractBudgets"));
    [Association]
    public ContractBudgets ContractBudgets
    {
    get
    {
    if (!FieldManager.FieldExists(ContractBudgetsProperty))
    {
    if (IsNew)
    LoadProperty(ContractBudgetsProperty, ContractBudgets.NewChild());
    else
    LoadProperty(ContractBudgetsProperty, ContractBudgets.Get(
    this));
    }
    return GetProperty(ContractBudgetsProperty);
    }
    }

      UI层支持子对象属性懒加载方式为:给业务根对象赋值时,把子对象清空,当选择子对象对于的Tab页签时再绑定属性值到Data中

    代码

    CSLA差异保存

      CSLA目前通用做法是整个对象在网络上传输,客户端更新时不管是更新了多少内容,它会把整个对象返回到服务器端。如果这个对象有几千条记录,而只更新了一两条记录,那么回传整个对象无疑是一个很大的浪费。在业务逻辑不需要整个对象的情况下,我们可以做增量更新,只回传增加、更新或删除的数据到服务器端。

      信息系统开发平台OpenExpressApp - 支持差异更新

    CSLA保存后不回传对象

      CSLA目前对象保存时会从服务器端传回一个对象,如果更新后回传的对象和本地的完全一样,则我们可以不必要回传这个对象,通过差异保存的Command实现此功能,回传会来的只是更新的对象

    查询对象懒加载

      查询模块支持同一查询对象查询多个对象,OEA总是先加载当前页签的查询对象,切换到相应页签时才获取这个页签对应的查询对象的数据,避免了一次性获取所有对象。

    待实现

    业务对象的引用对象缓存

      业务对象的引用对象很多都是类似字典类可以缓存的数据,现在这类数据在每个业务对象获取数据时也是从数据库获取,并且保留在对象中一并传到客户端,这样与数据库交互以及网络传输量都增大了,后续遇到这类性能问题时将着重解决

    服务器对象缓存

      业务对象缓存,减少与数据库服务器的交互次数

    客户端对象缓存

         C/S结构时,可以把业务对象缓存到客户端本地来减少网络交互次数

    更多内容: 开源信息系统开发平台之OpenExpressApp框架.pdf

  • 相关阅读:
    【设计】概要设计-详细设计-到底需要输出什么???
    【Java】Eclipse代码格式化-代码模板
    【Scala】Scala学习资料
    【Java】阿里巴巴Java开发手册(纪念版)
    【Storm】学习笔记
    【HBase】学习笔记
    【Hadoop】Combiner的本质是迷你的reducer,不能随意使用
    【Hadoop】mapreduce采用多进程与spark采用多线程比较
    【ES】elasticsearch学习笔记
    【MySQL】MySQL统计NULL字段处理
  • 原文地址:https://www.cnblogs.com/zhoujg/p/1613826.html
Copyright © 2011-2022 走看看