`
kobexing933
  • 浏览: 120379 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

通过合理的设计下拉列表来调整页面显示性能!

阅读更多

如何设计下拉列表直接关系着页面显示的性能。

在应用程序设计的过程中,有很多的可选项,在通常的设计中这些可选项

会被设计为主表(Master Table),这些表中通常有三个字段:ID,名字,和说明。

有些时候为了区分先后顺序会追加一个字段用来表示排序的先后。

在使用这些主表中的内容的时候,需要从数据库中查询获得数据库中主表的最新内容,

之后这些内容作为options在页面上显示。

在通常情况下一个画面会涉及到两个业务操作的类,一个用来初始化页面的信息,另一个

用来处理画面的操作,将这些数据更新到数据库中。

在画面表示的时候,有些可选的内容,通常会从数据库中取得(通常是第一个业务操作类),之后显示。

如果某个应用程序中的这种内容非常多,那么每个页面显示的时候都需要从数据库中多次查询主表(Master Table)。

这样画面显示的时间就会非常的长。

那么可不可以将这些内容直接写入代码呢,主表中的内容虽然变更的不是很频繁,但是还是汇编更的。

所以将这些主表的内容写入到代码中是很不明智的,为了能够及时的反映主表的变更,所以这些内容必须

每次从数据库中取得。

那么有没有什么好的方法呢?

我们先从Web应用程序的内存驻留特点讲起。每一个应用程序启动的时候都会有一个叫做ApplicationContext

的上下文环境变量被创建,这个环境变量中存储着一些共同信息,例如Strut上的配置文件内容,Spring的配置文件

的内容。每次用户和服务器建立一个会话链接,服务器会为该用户创建一个Session Context的上下文环境,这个上下文

环境中放置着这个用户的一些信息,例如用户ID,用户名,所属部门等。每次用户向服务器发送一个请求,服务器都会将这个

请求构造成HttpRequest Context这样的上下文环境,将用户请求的信息放在其中。

降低页面显示时间的一个方法是,将数据库中的这些主表的信息放在内存中,每次页面显示的时候,不从数据库中取数据。

那么可以将这些数据放在哪里呢?很显然Application Context 和 SessionConext中都可以,但是考虑到主表内容通常

是所有用户多需要使用的,所以通常放在Application Context中即可。

那么什么时候将这些数据放在Application Context中呢?

Web Application中有一个特殊的接口,所有实现这个接口的类通过合理的配置将会在应用程序装载的时候执行,这个接口

就是:ApplicationContextListener

package com.jpleasure.util;

import java.util.Map;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MasterContextListener implements ServletContextListener {

@Override
public void contextDestroyed(ServletContextEvent arg0) {
// nothing
}

@Override
public void contextInitialized(ServletContextEvent ctxEnt) {
// load master records here
Map masters = loadMaster();
ctxEnt.getServletContext().setAttribute("master", masters);
}

private Map loadMaster() {
// load master rocoreds here
return null;
}

}

只需要在contextInitialized方法中将主表的数据放在其中即可。

在web.xml中配置:

<listener>
<listener-class>com.jpleasure.util.MasterContextListener</listener-class>
</listener>

如何从Application Context中取得数据呢?

package com.jpleasure.util;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

public class MasterReader {

public static List getMasterList(String key, HttpServletRequest request) {
Map masters = (Map)request.getSession().getServletContext().getAttribute("master");
List list = (List)masters.get(key);
return list;
}
}

有些时候为了方便使用,在MasterReader中添加一个静态变量对ServletContext的引用,在MasterContextListener

初始化的时候关联,在之后使用的过程中可以去掉request这个变量,毕竟不是哪里都可以得到这个变量的引用的。例如:

@Override
public void contextInitialized(ServletContextEvent ctxEnt) {
// load master records here
Map masters = loadMaster();
ServletContext ctx = ctxEnt.getServletContext();
MasterReader.setCtx(ctx);
ctx.setAttribute("master", masters);
}

package com.jpleasure.util;

import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

public class MasterReader {
private static ServletContext ctx = null;

public static ServletContext getCtx() {
return ctx;
}

public static void setCtx(ServletContext ctx) {
MasterReader.ctx = ctx;
}

public static List getMasterList(String key ) {
Map masters = (Map)ctx.getAttribute("master");
List list = (List)masters.get(key);
return list;
}
}

这个时候就需要关心一个问题了:数据库中的内容变更了怎么办?

一种方法是,增加一个Reresh方法,每次Master放生变更的时候,调用即可:

package com.jpleasure.util;

import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

public class MasterReader {
private static ServletContext ctx = null;

public static ServletContext getCtx() {
return ctx;
}

public static void setCtx(ServletContext ctx) {
MasterReader.ctx = ctx;
}

public static List getMasterList(String key ) {
Map masters = (Map)ctx.getAttribute("master");
List list = (List)masters.get(key);
return list;
}

public static List refresh(String key) {
//reload the master table associated with current key.
// then return the new master list
return getMasterList(key);
}
}

另外一种方法是使用一些定时工具每隔一定的时间自动调用所有的更新即可。

自动的方法可以使用Timer对象也可以使用蕾西Quartz这样的JOB Scheduler工具。

分享到:
评论

相关推荐

    带下拉列表的导航条

    这种设计允许用户通过点击主菜单项来展开下拉列表,显示更具体的子选项,从而提高用户体验和导航效率。 1. **下拉列表**: 下拉列表(Dropdown List)是一种选择控件,通常用于节省页面空间。在网页设计中,它被...

    三款漂亮的下拉列表 select

    在网页设计中,下拉列表(Select)是用户界面中常见的一种交互元素,它用于提供一组可选项供用户选择。本文将详细介绍三款美观...同时,合理运用CSS进行样式调整,使下拉列表既能满足功能需求,又能符合页面美学标准。

    JavaScript动态级联下拉列表框

    9. 响应式设计:对于移动设备,可能需要调整下拉列表的布局和交互,使其更适合触摸操作。 通过掌握以上知识点,你可以构建一个功能完善的JavaScript动态级联下拉列表框。在实际项目中,结合具体的业务需求和用户...

    三级下拉列表.rar

    在Web开发中,三级下拉列表通常用于构建...通过学习和实践这个"三级下拉列表"示例,你可以深入了解Web开发中的交互设计、JavaScript编程以及前端性能优化等重要概念。这个资源对于提升你的Web开发技能将会非常有帮助。

    JS4级菜单,select下拉列表样式

    在网页设计中,创建一个四级菜单的下拉列表可以极大地提升用户体验,特别是在处理大量分类信息时。这样的设计可以使用户更方便地浏览和选择所需内容,而不会被过多的层次所困扰。JS4级菜单,结合了JavaScript的强大...

    jquery实现的下拉列表树插件源码.zip

    在页面加载完成后,我们需要调用插件的初始化函数,将元素转化为下拉列表树。这通常通过jQuery的选择器找到元素,然后调用自定义的方法完成。例如: ```javascript $(document).ready(function() { $('#mySelect')....

    jQuery实现的多级级联下拉列表

    在网页设计中,级联下拉列表是一种常见的交互元素,它允许用户在多个下拉菜单之间建立关联,根据前一个菜单的选择动态更新后一个菜单的内容。这种功能在数据过滤、地区选择、分类导航等场景中非常实用。本教程将深入...

    jQuery手机端招聘网站下拉列表筛选菜单

    这可能包括调整字体大小、按钮样式、下拉列表的显示与隐藏等。 3. **jQuery事件绑定**:通过`$(document).ready()`函数确保页面加载完成后,使用`.on('change', function() {...})`事件监听下拉列表的选择变化。当...

    Ext扩展控件-------可以通过下拉列表框选择每页的分页条数

    "Ext扩展控件-------可以通过下拉列表框选择每页的分页条数"就是为了解决这个问题而设计的。 这个扩展控件提供了下拉列表选项,用户可以根据需要选择每页显示的记录条数。这样,用户不再局限于预设的几个选项,可以...

    ASP.NET+jquery实现AJAX滚动滚动条加载数据的下拉列表控件

    2. **CSS样式**:通过CSS调整下拉列表的高度,使其超出实际数据,以便触发滚动。 3. **jQuery监听**:使用jQuery的`$(window).scroll()`事件监听滚动条位置。当滚动到底部时,触发加载更多数据的函数。 4. **AJAX...

    特效下拉菜单

    合理使用CSS3动画和避免不必要的DOM操作可以提高页面性能。 "特效下拉菜单"的实现涉及多方面的技术,包括HTML5、CSS3和JavaScript,设计师和开发者可以通过结合这些技术创造出吸引人的交互体验。在提供的`index....

    jQ - select(下拉列表)

    在网页设计中,`&lt;select&gt;`元素经常用于创建下拉列表,它允许用户从一组预定义的选项中选择一个。然而,原生的HTML下拉列表样式可能在不同浏览器间存在差异,且功能有限,不便于自定义。在这种情况下,使用jQuery来...

    页面滚动分页---iScroll实例:下拉刷新,滚动翻页

    同时,还可以通过调整配置项来优化滚动性能,例如设置`scrollbars`控制滚动条的显示,设置`mouseWheel`控制鼠标滚轮的滚动行为。 5. **与后端交互**:在实际应用中,下拉刷新和滚动分页通常需要与后端API进行通信,...

    分页代码ASP.NET自动设置每页显示数目、跳转到指定页面、用户自定义控件

    可以通过CSS媒体查询来调整布局和样式,确保在不同设备上都能良好地显示和操作。 总之,实现ASP.NET中的分页功能需要结合服务器端和客户端的逻辑,通过设置控件属性、处理事件来完成。通过用户自定义控件,可以...

    列表下拉加载更多

    总的来说,"列表下拉加载更多"是一个提升应用性能和用户体验的重要特性,通过合理地利用现有的开源库,结合自己的业务需求,可以轻松地实现这一功能。在这个项目中,开发者不仅实现了基本的下拉刷新,还加入了上拉...

    ASP技术常遇问题解答-改动一下关闭〈OPTION〉标记就会加快页面显示速度吗?.zip

    因此,优化`&lt;option&gt;`标记可以提高页面性能。 1. **减少`&lt;option&gt;`数量**:如果下拉列表中有许多不常用或重复的选项,考虑精简它们。只保留必要的、最常见的选项,这样可以减少HTTP响应的大小,进而加快页面加载...

    jsp/html 实现下拉复选框

    总之,"jsp/html 实现下拉复选框"是一个基础但实用的前端功能,通过合理的HTML结构、CSS样式和JavaScript脚本,我们可以创建出既美观又易用的下拉复选框组件,满足用户在网页上的多选项选择需求。在实际应用中,还...

    bootstrap增删改查页面

    这个“bootstrap增删改查页面”显然与使用Bootstrap来设计和实现数据管理界面有关,通常包括添加、编辑、删除和查询等功能。下面我们将深入探讨Bootstrap在构建这种页面时的关键知识点。 1. **响应式布局**:...

    jquery-带搜索框的下拉

    在网页开发中,jQuery 是一个广泛使用的 JavaScript 库,它简化了 DOM 操作、事件处理、动画效果以及异步交互等功能。"jquery-带搜索框的下拉" ...通过合理的设计和优化,可以大大提高用户在网页上的操作效率和满意度。

Global site tag (gtag.js) - Google Analytics