Небольшое приложение, занимающее время для загрузки - PullRequest
0 голосов
/ 25 мая 2011

У меня есть небольшое веб-приложение, разработанное с использованием Icefaces 1.8.2 и jsf 1.1, которое развернуто на 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 ]

1 голос
/ 26 мая 2011

Лучше использовать разбиение на страницы в конце базы данных, а не извлекать все записи одновременно.Конечный пользователь будет видеть не более 10-20 записей одновременно на экране и, вероятно, будет игнорировать большинство результатов.

Также вы можете ввести сортировку по определенным столбцам, чтобы пользователь мог лучше находить результаты.Позвольте пользователю перейти на конкретную страницу результатов непосредственно из всех найденных страниц результатов, не просматривая каждую страницу результатов.

Это уменьшит выборку ненужных записей из базы данных и может повысить производительность при доступе многих пользователей.

0 голосов
/ 09 июня 2011

Я улучшил производительность приложения до удовлетворительного уровня, переписав некоторый код и SQL-операторы.

Спасибо всем за помощь.

0 голосов
/ 25 мая 2011

Вы пробовали тестировать на другом сервере приложений?Я не использовал Oracle Application Server, но я видел значительно более медленный запуск приложения, работающего на Jetty, по сравнению с тем же приложением, запущенным на Tomcat.Я предлагаю попробовать Tomcat.Даже если это нереальный вариант для вас, это должно помочь диагностике.

...