加载需要时间的小型应用程序



我有一个使用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>

感谢您的帮助。感谢

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

此外,您还可以引入对特定列的排序,以便用户能够更好地找到结果。让用户直接迁移到找到的总结果页面中的特定结果页面,而无需遍历每个结果页面。

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

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

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

感谢大家的帮助。

相关内容

  • 没有找到相关文章

最新更新