BizStruct - 商业架构

基于架构的富界面 Web 应用的可视化快速开发平台 www.BizStruct.cn

博客园 首页 新随笔 联系 订阅 管理
  5 Posts :: 0 Stories :: 97 Comments :: 0 Trackbacks

2006年9月12日 #

摘要: Javascript 是一种解释执行的脚本语言,主要应用于 Web 领域的客户端的浏览器中;由于 Javascript 解释执行的特性,代码必须明文下载到客户端,并且可以很容易的进行调试,使得 Javascript 代码的保护非常困难;

不同的人对 Javascript 代码的保护有不同的看法;有的人辛苦努力的代码,却可以被竞争对手轻易获得,他们就非常希望能有保护 Javascript 代码的方案,但现有的方案可能无法满足他们的要求;很多人认为 Javascript 语言很简单,Javascript 代码没有保护的价值,可能是他们的代码确实简单,或者他们并不了解 Javascript 语言强大的功能;还有的人认为现在都开源了,还保护代码干什么,当然开源的人是值得敬佩的,但对别人的代码的开源要求,却不是合理的。

为了提高用户的体验,出现了 Web 2.0 技术,并随着 AJAX 和富界面技术的发展,Javascript 在 Web 应用上的重要性越来越高,Javascript 代码的复杂性、功能和技术含量也越来越高,对Javascript 代码保护的需阅读全文
posted @ 2006-09-12 21:50 BizStruct 阅读(3727) 评论(7) 编辑

2006年5月29日 #

摘要: 分页算法,是Web开发人员很关心的一个问题,几乎每个数据库相关的应用都要涉及到分页算法,有很多人写过这方面的文档,似乎没有什么好讨论的了;但实际上换一种数据的表现形式,就可以采用一种更好的分页算法,那我们现在就看看还能不能做得更好。阅读全文
posted @ 2006-05-29 22:44 BizStruct 阅读(4102) 评论(54) 编辑

2006年5月22日 #


表头锁定可滚动的表格 - BizStruct 商业架构

基于架构的富界面Web应用的可视化快速开发平台

    浏览器里标准的表格展现方式比较简单,表格行数多时,页面会有滚动条,浏览数据不方便。

    一种解决方法是把表格数据全部显示,通过 DIV 来把表格固定在一个范围内,表格只能在这个范围内滚动;更进一步的是通过 javascript 或 css 把标题锁定在顶端。这种方式存在几个问题,一是不能确保显示完整的行,会有显示半行的情况; 二是因为所有的行都是显示在浏览器里的,行数过多时,会占用大量的资源;另外这种方式无法利用 AJAX 来动态下载表格数据。

    另一种解决方法是将表格数据缓存在内存中, 表格每次只显示一页的数据,通过分页浏览条或页码连接在分页之间切换;这种方式可以充分的利用 AJAX 来动态下载表格数据;存在的问题一是数据的展示和操作分离,不直观; 二是数据浏览不平滑,不能同时展示相邻页的数据。

    我们的解决方案采用了更复杂的实现技术,从而使表格有了更好的展现效果。将表格数据缓存在内存,每次只显示一页的数据,当表格的数据量很大时,也只占用较少的浏览器资源;通过滚动条操作,和表格一体化,操作很方便。

    通过浏览器提供的 DOM 模型,我们几乎可以对表格进行任意的操作,包括添加、删除、修改行或单元格。我们只要删除表头下面的一行,将新行添加到表格的底部,就可以实现表格的向下滚动;删除表格底部行,将新行添加到表头的下面一行,就可以实现表格的向上滚动;而同时表头又是锁定的。

    其中涉及到的几项技术,一是表格数据的缓存,XML 文档为我们提供了很大的便利,通过 XML 文档,我们可以很容易的保存、检索和读取表格数据。二是表格行的生成,如果完全通过 DOM,技术难度不大,但工作量大,运行效率较低;更好的方式是 XSLT 和 DOM 的组合,通过 表格的 XML 文档和 XSLT 生成表格行的 HTML,然后通过 DOM 插入到表格中。

   下面是我们表格的图示,您也可以访问我们的网站 www.BizStruct.cn,对我们演示的表格进行操作,

  

    通过滚动条的操作,可以实现向上一页,向上一行,向下一行,向下一页和托拽定位的操作。用鼠标左键点击表格标题,设置键盘的输入焦点后,通过键盘的PageUp,向上箭头, 向下箭头和PageDown,可以实现相同的操作。还可以按下 Ctrl + Home 或 End,跳转到整个数据的开始或结尾。支持鼠标滚轮的操作,将鼠标移动到表格内,滚动鼠标的滚轮,表格即可滚动。

    下一次,我们将介绍通过 AJAX 来动态下载表格数据。

posted @ 2006-05-22 19:14 BizStruct 阅读(1478) 评论(5) 编辑

2006年5月15日 #

    有的时候我们的 Web 应用程序在本机测试的时候,速度很快,可放在局域网上测试的时候,却会发现存在性能问题;甚至有时在局域网速度正常的应用,在广域网上还会发现问题。这些问题一般都是应用中的疏忽或错误,并不涉及到系统架构,通过真实环境的调试和测试都能找到问题所在并解决。
    今天我们所要说的是通过改善架构来从根本上提高 ASP.Net 应用程序的性能。
    我们先来对 ASP.Net 的几个简单的应用做一下测试。
    测试环境:AthlonXP 3200+,DDR400 512M,WindowsXP SP2,本机的SQL Server 2000,中文 Northwind 数据库(从Access导入)的产品表,约70条记录。

测试序号 程序类型 测试方法 测试结果
(每秒请求数)
SQLServer
所占用资源
ASP.Net
所占用资源
1 Web服务 用产品表填充DataSet,并返回记录数 250次 100% -
2 Web服务 用产品表填充DataSet,并返回 DataSet 138次 54% 46%
3 Web应用程序 用产品表填充DataSet,并绑定 DataGrid 70次 28% 72%

说明:不同系统的测试结果可能不同,但测试结果的相对比例应该差别不大。

    在第一个测试里,Web 服务只是从数据库读取记录填充到 DataSet,并返回记录数(注意不是返回记录),所占用的系统资源很少,假设系统资源完全被SQLServer 占用,并且对结论不会有负面影响。
    在第二个测试中,Web 服务将 DataSet 返回,每秒请求数就降低了几乎一半, 这一半的系统资源,被ASP.Net 用于将 DataSet 序列化。
    在第三个测试中,Web 应用程序将 DataSet 绑定到 DataGrid,并返回页面,每秒请求数几乎降低了四分之三,这些系统资源被 ASP.Net 用于将 DataSet 绑定到 DataGrid,并将页面序列化。

    从以上测试中我们可以看到,DataGrid 的绑定和序列化会占用大量的系统资源,如果要提高系统性能,需要通过改善架构来实现。

    一、将对数据库的操作,从页面中分离出来,放到独立的持久层。
    这样在客户端通过 DOM 或 XSLT 将数据展现为表格,来代替服务器端 DataGrid 的绑定工作,大大减轻了服务器的压力。并且客户端通过 AJAX 从持久层获取数据,会提高用户的使用体验。
    二、将页面从数据中彻底独立出来,以便利用缓存。
    有的应用了 AJAX 的页面还是会读取初始数据,这样的话页面就不能缓存。这些页面一般比较复杂,会比普通页面占有更多的资源,如果能够利用缓存,将进一步提高系统的性能。

    通过以上两点,ASP.Net 的性能,几乎能够提高一倍。

    您可以自己作一下测试,或者访问我们的示例 www.BizStruct.cn。 

    以下是对本文档的一个说明,及对回复的答复。

    我们开发这个架构的本意是提高用户的体验和开发的效率,在开发完成后进行性能测试的时候才发现这个架构对性能有很大的提高,本来还担心对性能有负面影响的,也算无心插柳。写本文的目的是和大家分享自己的发现,很多人可能和我原来一样,没想到测试结果会是这样的。

    @kiler
    分页读取数据显示是最基本的要求,而我们所说的改善是更进一步的,即使分了页,还是能大大提高性能的。

    @Boler Guo 
    一个好的架构,不仅仅能提高性能,还能提高开发效率和可维护性;

    @维生素C.NET
    我所说的架构对性能的提高,与数据量是无关的,因为不论数据量大小,不同步骤占用资源的比例是不变的。通过架构可以减少步骤,从而提高性能。

    @双鱼座
    每个系统规模不一样,对性能要求都是不一样的,你的系统没有性能问题当然好;单就你的描述,这个架构还是能大大提高性能的,当然对你的系统可能不需要。
    还有 AJAX 带来的客户体验的提高,我看过很多系统都做得很好,不知道为什么你不认可,你可以看看我们的演示,不知道会不会对 AJAX 有一个新的认识。

    @极地银狐.NET
    这位老兄说的太虚,我倒觉得有些东西了解的再深还不如做做测试,测试以前没有想到仅仅是序列化,ASP.Net 就要占用那么多资源。

    @風語者·疾風
    每个工具都有他的优势,PHP性能可能很高,但至少他的开发效率比不过ASP.Net,每个人选择开发工具的时候,都会自己均衡的。

posted @ 2006-05-15 14:59 BizStruct 阅读(1544) 评论(14) 编辑

2006年4月27日 #


BizStruct - 商业架构 - 基于架构的富界面 Web 应用的可视化快速开发平台

介绍

   互联网在发展的初期,主要局限于高校和科研机构的象牙塔里,随着Web技术的出现,互联网才开始了爆炸性的发展。

   早期的 Web 技术由于存在开发效率低、可维护性差、用户操作不便捷和性能不高等缺点,主要应用于广域网这个全新的领域,相对于传统的 C/S 应用在内部网领域还不普及。

   但随着 Web 技术的发展,Web 应用相对于 C/S 应用的优势越来越明显,应用的范围也越来越广。 对早期 Web 技术不足之处,各种 Web 新技术都找到了相应的解决之道;但各种 Web 新技术采用的策略是对某一方面特别重视,从而建立起在该方面的优势, 但相对而言,其他方面则处于一定的劣势;有的技术重视可视化的开发方式,大大提高了开发的效率; 有的技术重视系统架构,抽象出了业务逻辑层,提高了系统的可维护性;还有的系统实现了富界面的客户端,提高了用户操作的便捷性; 但几乎没有技术能在各方面取得均衡,即在保持优势的同时,在其他方面也没有相对的劣势。

   我们的目标是建立一个各方面相对均衡的开发平台;基于架构是指采用了轻量级的面向数据的持久层,提高了系统的稳定性和可维护性;采用可视化的快速开发方式,提高了系统的开发效率,降低了开发的难度;富界面的 Web 客户端,在保持了 Web 应用的各项特性的同时,提高了用户操作的便捷性。这个平台适合于面向数据的、要求开发快速、部署便利和用户操作便捷的中小型系统。

轻量级的面向数据的持久层

   基于架构(Architecture)是相对于基于组件(Component,也称构件)而言的;COM是基于组件开发的代表,这种方式是对系统的纵向的划分,组件是相对独立的,依赖性小,具备完善的功能;组件是代码驱动的,每增加一个组件,需要编写大量的代码,即使可视化的开发可以自动生成大量的代码,但对这些代码维护的难度和工作量仍然很大;基于架构是对系统的横向的划分,将系统分为多层,每层只实现特定的功能,需要各层之间的相互配合才能实现完整的业务;架构是配置驱动的,增加新的功能时,只要对配置的数据进行添加即可。持久层是系统架构的核心。

   面向对象持久层的发展已经有很多年了,已有一些成熟的产品。面向对象的持久层为了实现业务逻辑,需要将数据封包为对象,性能上会有一定的损失;并且面向对象的持久层产品功能相对独立,不能满足快速开发和富界面的一些特殊要求;为此需要新开发一个满足以下要求的持久层。

   能够实现基于表格、SQL语句和存储过程的业务对象。业务对象是对数据库的屏蔽和抽象,持久层以外只能看到业务对象,看不到数据库。

   业务对象能够配置成员及成员属性,包括所对应的数据库的字段和数据类型等。为了实现快速开发和富界面,需要对业务对象及其成员进行较复杂的设置。业务对象的配置采用了 XMLSchema 标准,XMLSchema 是 XML 系列标准中关于类型定义的标准,通用性好,功能强大,可以对数据类型实现复杂的约束;通过私有的命名空间可以对 XMLSchema 进行了扩充,以满足快速开发和富界面的需要。

   能够对业务对象的记录进行分页。在业务对象的记录较多时,一次读取会带来持久层、网络和客户端较大的负载,甚至阻塞;所以持久层要支持客户端,只读取需要显示给用户的记录。

   能够一次批量的对业务对象的记录进行增加、修改和删除操作。将对业务对象指定记录的增删改操作影射到数据库表指定记录的相应操作。 持久层的接口采用 WebService 服务,可视化开发和富界面客户端都会对持久层进行调用。

富界面的Web客户端

   传统的 C/S 应用因为是胖客户端,所以也都是富界面的,用户操作很便捷。而因为是瘦客户端,所以绝大多数 Web 应用都不是富界面的,用户在每个页面只能作较少的操作,需要频繁的和服务器交互,并刷新页面,在操作较多时,效率很低。

   Internet Explorer 浏览器日益成熟,功能强大,占领了绝大多数的市场份额,特别是在企业内的桌面办公领域;所以我们不必为了浏览器的兼容性,而束缚住自己的手脚,不能施展。为此,我们在基于 Internet Explorer 浏览器的Web应用中,充分利用 Internet Explorer 的强大功能,借鉴了传统的 C/S 应用的客户端,实现了 Web 应用的富界面,提高了用户操作的便利性。

    采用 XML 文档格式的数据结构,来实现业务对象的统一存储;将业务对象存储为树型结构,实现了业务对象之间的关系;利用 XMLHTTP 技术在后台从持久层异步获取业务对象的记录,并实现了自动分页的功能,一次只获取富表格所能显示的数据;XMLHTTP 是 Microsoft 在 1999 年推出的一项异步数据访问的技术,近年,一些开放组织以 AJAX 的名称重新推出,使该技术有了更广泛的应用。

    富表格借鉴了胖客户端的数据表格,以表格的形式展现业务对象的数据,在表格内可以直接对业务对象数据进行添加、修改和删除;并根据数据的不同类型,将编辑的方式自动展现为编辑框、下拉列表框或标记框。在富表格之外,还可以对业务对象的成员进行单独的展示和编辑。

可视化的快速开发

   传统的 C/S 开发工具基本上都是采用可视化快速开发的方式,但直到Microsoft .Net的出现才真正有了Web应用的可视化快速开发。

   Visual Studio.Net提供了功能强大的控件开发能力,本系统就是通过开发控件,从而利用Visual Studio.Net实现了可视化的快速开发,而没有自己设计开发一个独立的可视化开发工具。

   本系统的开发方式就是在Visual Studil.Net下利用以下控件开发Aspx页面。

   利用业务对象控件配置需要从持久层获取的业务对象,可以设置业务对象的权限,设置业务对象之间的关系;可以选择需要下载的对象成员。

   利用富表格控件配置需要展现为数据表格的业务对象,可以设置富表格的外观属性,可以设置富表格需要显示的对象成员。

   利用对象成员控件配置需要在富表格之外,展现为可编辑控件的业务对象成员。

演示

   www.BizStruct.cn
posted @ 2006-04-27 10:52 BizStruct 阅读(1567) 评论(17) 编辑