小型应用需要时间加载

时间:2011-05-25 08:24:14

标签: web-applications jsf icefaces

我有一个使用Icefaces 1.8.2和jsf 1.1开发的小型Web应用程序,它部署到Oracle Application Server 10.1.3。我注意到最初加载应用程序需要一段时间,一旦加载速度令人满意。

如何改善应用程序的初始加载时间?

更新1

我的查询在后端需要2-3秒,但是当我在前端渲染相同时,它需要将近7秒。行数仅为1080.我在数据表中呈现这些记录。这可能是什么原因?

更新2

的web.xml

<web-app xmlns="http://java.sun.com/xml/ns/j2ee/web-app_2_3.xsd">
    <context-param>
        <param-name>com.icesoft.faces.debugDOMUpdate</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>server</param-value>
        <description>State saving method: "client" or "server" (= default) See JSF Specification
                     2.5.2</description>
    </context-param>
    <context-param>
        <param-name>com.icesoft.faces.concurrentDOMViews</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>com.icesoft.faces.synchronousUpdate</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>com.icesoft.faces.connectionTimeout</param-name>
        <param-value>100000</param-value>
    </context-param>
    <context-param>
        <param-name>com.icesoft.faces.standardRequestScope</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>org.apache.myfaces.redirectTracker.POLICY</param-name>
        <param-value>org.apache.myfaces.custom.redirectTracker.policy.FullRedirectTrackPolicy</param-value>
    </context-param>
    <context-param>
        <param-name>webAppRootKey</param-name>
        <param-value>app1</param-value>
    </context-param>
    <!-- Faces Servlet -->
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
        <servlet-name>Persistent Faces Servlet</servlet-name>
        <servlet-class>com.icesoft.faces.webapp.xmlhttp.PersistentFacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
        <servlet-name>Blocking Servlet</servlet-name>
        <servlet-class>com.icesoft.faces.webapp.xmlhttp.BlockingServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!-- extension mapping -->
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Persistent Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Persistent Faces Servlet</servlet-name>
        <url-pattern>*.jspx</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Persistent Faces Servlet</servlet-name>
        <url-pattern>*.iface</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Persistent Faces Servlet</servlet-name>
        <url-pattern>/xmlhttp/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Blocking Servlet</servlet-name>
        <url-pattern>/block/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>10000</session-timeout>
    </session-config>
    <!-- Welcome files -->
    <welcome-file-list>
        <welcome-file>index.jsf</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
    <listener>
        <listener-class>com.icesoft.faces.util.event.servlet.ContextEventRepeater</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!-- Spring Security -->
    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

的applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:security="http://www.springframework.org/schema/security"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd   http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.2.xsd">    
    <security:authentication-manager alias="_authenticationManager" />   
    <bean id="authenticationProvider"
          class="com.icesoft.icefaces.security.UserDetailsAuthenticationProvider">
        <security:custom-authentication-provider/>
        <property name="userDetailsService" ref="userDetailsService"/>
    </bean>
    <bean id="userDetailsService" class="com.icesoft.icefaces.security.UserDetailsServiceImpl">      
         <constructor-arg ref="userRepository"/>
    </bean>
    <bean id="userRepository"
          class="com.icesoft.icefaces.security.UserDaoImpl"/>
    <bean id="ntlmFilter" class="org.springframework.security.ui.ntlm.NtlmProcessingFilter">
        <security:custom-filter position="NTLM_FILTER"/>
        <property name="stripDomain" value="true"/>
    <property name="defaultDomain" value="XYZ"/>
    <property name="authenticationManager" ref="_authenticationManager" />
    </bean>
    <bean id="ntlmEntryPoint"
          class="org.springframework.security.ui.ntlm.NtlmProcessingFilterEntryPoint">
        <property name="authenticationFailureUrl" value="/accessDenied.jspx"/>
    </bean>
    <bean id="exceptionTranslationFilter"
          class="org.springframework.security.ui.ExceptionTranslationFilter">
        <property name="authenticationEntryPoint" ref="ntlmEntryPoint"/>
    </bean>
    <security:http access-denied-page="/denied.xhtml" entry-point-ref="ntlmEntryPoint"
                   servlet-api-provision="false">
        <security:intercept-url pattern="/accessDenied.jspx" filters="none"/>
        <security:intercept-url pattern="/**" access="ROLE_USER"/>
    </security:http>
</beans>

感谢任何帮助。 感谢

3 个答案:

答案 0 :(得分:1)

最好在数据库端使用分页,而不是一次获取所有记录。最终用户将在屏幕上一次看到最多10-20条记录。可能会忽略大部分结果。

您还可以在特定列上引入排序,以便用户可以更好地查找结果。让用户直接迁移到找到的总结果页面的特定结果页面,而无需浏览每个结果页面。

这将减少从数据库中获取不必要的记录。许多用户访问时可能会提高性能。

答案 1 :(得分:0)

您是否尝试过在其他应用服务器上进行测试?我没有使用过Oracle应用服务器,但是我发现与在Tomcat上运行的同一个应用程序相比,在jetty上运行的应用程序的启动要慢得多。 我建议尝试Tomcat。即使这不是您的实际部署选项,这至少应该有助于诊断。

答案 2 :(得分:0)

通过重写一些代码和sql语句,我已经将应用程序的性能提高到了令人满意的程度。

感谢所有人的帮助。