powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / долгая генерация html по xslt схеме из xml
22 сообщений из 22, страница 1 из 1
долгая генерация html по xslt схеме из xml
    #38772213
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день !

Каким образом можно ускорить пройцесс создания отчета по xslt схеме ( сейчас это время порядка 100 ms)

может перенести все на клиента? и делать xslt преобразование средствами браузера ?

что есть : Спринг + jsp + TransformerFactory
Спринг : контроллер - в него приходят параметры :

ReportParams - набор полей из формы для получения отчета.
transformerService transform - возвращает данные в виде xml ( наш отчет)
Код: java
1.
2.
3.
4.
5.
6.
 @RequestMapping(value = "/getreports") 
    public void getTerminalReports(@ModelAttribute("ReportParams") ReportParams params, HttpServletRequest request,      HttpServletResponse response) throws Exception { 
        String result = transformerService.transform(params);
        request.setAttribute("responseBody", result);
        request.getRequestDispatcher(PagesUrl.report).forward(request, response);
    }



jsp PagesUrl.report

Метод getBody - преобразует html в xml и это самый долгий процесс ~100ms

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
<%@page import="javax.xml.transform.stream.StreamResult"%>
<%@page import="java.io.ByteArrayOutputStream"%>
<%@page import="java.io.ByteArrayInputStream"%>
<%@page import="javax.xml.transform.stream.StreamSource"%>
<%@page import="java.io.InputStream"%>
<%@page import="javax.xml.transform.TransformerFactory"%>
<%@page import="javax.xml.transform.TransformerException"%>
<%@page import="java.io.IOException"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%!
private  String getBody(String report) throws TransformerException, IOException {
        TransformerFactory tFactory = TransformerFactory.newInstance();
        InputStream input = getServletContext().getResourceAsStream("/WEB-INF/reports/xsl/rep.xsl");
        StreamSource ss = new StreamSource(input);

        javax.xml.transform.Transformer transformer = tFactory.newTransformer(ss);

        InputStream inputStream = new ByteArrayInputStream(report.getBytes());
        StreamSource source = new javax.xml.transform.stream.StreamSource(inputStream);

        ByteArrayOutputStream stream = new ByteArrayOutputStream(1024);
        StreamResult streamResult = new javax.xml.transform.stream.StreamResult(stream);

        transformer.transform(source, streamResult);
        String result = stream.toString();

        return result;
    }
%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <%
            long time = System.currentTimeMillis();
            String responseBody = (String) request.getAttribute("responseBody");
            if(responseBody!=null){
        %>
        <div class="report">
                    <%= getBody(responseBody)%>
        </div>
       <%} else {%>
              ошибка;
        <%}%>
        <!-- <%="Generated in "+(System.currentTimeMillis()-time)+" ms" %>-->
    </body>
</html>
...
Рейтинг: 0 / 0
долгая генерация html по xslt схеме из xml
    #38772233
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,
зачем ускорять?
У тебя картинки\фон будет грузится в 100 раз дольше
...
Рейтинг: 0 / 0
долгая генерация html по xslt схеме из xml
    #38772235
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1Каким образом можно ускорить пройцесс создания отчета по xslt схеме ( сейчас это время порядка 100 ms)
может перенести все на клиента? и делать xslt преобразование средствами браузера ?

Самый адекватный вариант это отказаться от XML и XSLT. Перейти на бины и любые Java шаблоны.
А так, да. Перенести на клиента. Найти реализацию XSLT пошустрее. Купить железку и делать XSLT на hardware.
...
Рейтинг: 0 / 0
долгая генерация html по xslt схеме из xml
    #38772246
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Atum1,
зачем ускорять?
У тебя картинки\фон будет грузится в 100 раз дольше
Чтобы уменьшить нагрузку на сервер.
...
Рейтинг: 0 / 0
долгая генерация html по xslt схеме из xml
    #38772249
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123 ,

Сама генерация отчета - это порядка 1 ms .(отработка контроллера и метода transformerService.transform).

если его отдавать как @ResponseBody - то время генерации - порядка 1ms ( время если убрать вызов, а отдавать как есть getBody )

таких jsp - с набором форматтеров -с xstl схем достаточно много - и нагрузка в час пик достаточно большая (много пользователей хотят кучи вяких отчетов в разной форме с разными данныеми)...

задача сервера быстро отдавать данные ,а не отрисовывать их красиво .

вот я и думаю как поступить :

либо перенести на клиента , либо есть что то более быстрое.

Blazkowicz ,
по поводу . Перейти на бины и любые Java шаблоны. - я что то не понял , поясните , пожалуйста .



может сделать метод статический или что то как-то упростить? :)?
...
Рейтинг: 0 / 0
долгая генерация html по xslt схеме из xml
    #38772266
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1
Код: java
1.
2.
3.
4.
5.
6.
7.
// Закэшировать шаблон в байтовый массив и брать поток ввода из этого массива
        InputStream input = getServletContext().getResourceAsStream("/WEB-INF/reports/xsl/rep.xsl");
// Не использовать возврат (потенциально больших) строк. В крайнем случае - возвращать StringBuilder
        transformer.transform(source, streamResult);
        String result = stream.toString();
// Возвращать OutputStream/Writer, чтобы преобразование шло "в темпе записи на клиента"
        return result;
...
Рейтинг: 0 / 0
долгая генерация html по xslt схеме из xml
    #38772286
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1 по поводу . Перейти на бины и любые Java шаблоны. - я что то не понял , поясните , пожалуйста .

У вас в XML структура. Данные для отчета. Если заменить из на Java структуру. Будет быстрее чем парсить XML в шаблоне.
...
Рейтинг: 0 / 0
долгая генерация html по xslt схеме из xml
    #38772567
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1Добрый день !

Каким образом можно ускорить пройцесс создания отчета по xslt схеме ( сейчас это время порядка 100 ms)

может перенести все на клиента? и делать xslt преобразование средствами браузера ?


Да!
И вообще сделать "Service" который отдает либо XML, либо JSON.
Ну а на клиенте JS принимать ответ и "рисовать".
...
Рейтинг: 0 / 0
долгая генерация html по xslt схеме из xml
    #38772614
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше создавать transformer через Templates<-Factory.newTemplates(один раз), который к тому же threadsafe.
...
Рейтинг: 0 / 0
долгая генерация html по xslt схеме из xml
    #38772640
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1много пользователей хотят кучи вяких отчетов
разве не для этого существуют report-server\print-server.
Разве Java не предпочитает масштабировать нагрузку по горизонтали? Вместо погони за миллисекундами?
И переписывания кода?
Приведи цифры отклика отчёта при параметрах сервера и юзверей.
...
Рейтинг: 0 / 0
долгая генерация html по xslt схеме из xml
    #38772661
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0FD,
поясните кодом , что то не понял .


Basil A. Sidorov,

ок. Спасибо! учту.
...
Рейтинг: 0 / 0
долгая генерация html по xslt схеме из xml
    #38772673
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<%!
private Template template;

void jspInit() {
  TransformerFactory tFactory = TransformerFactory.newInstance();
  InputStream input = getServletContext().getResourceAsStream("/WEB-INF/reports/xsl/rep.xsl");
  StreamSource ss = new StreamSource(input);
  template = tFactory.newTemplates(ss) 
}


private  String getBody(String report)
  ...
  Transformer  transformer=	template.newTransformer();
  ...
}
%>
...
Рейтинг: 0 / 0
долгая генерация html по xslt схеме из xml
    #38776510
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тут есть нормальное решение
...
Рейтинг: 0 / 0
долгая генерация html по xslt схеме из xml
    #38776513
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
долгая генерация html по xslt схеме из xml
    #38776517
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,
или даже так :

http://www.w3schools.com/xsl/xsl_transformation.asp

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Link the XSL Style Sheet to the XML Document
Add the XSL style sheet reference to your XML document ("cdcatalog.xml"):

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
<catalog>
  <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
  </cd>
.
.
</catalog>
If you have an XSLT compliant browser it will nicely transform your XML into XHTML.
...
Рейтинг: 0 / 0
долгая генерация html по xslt схеме из xml
    #38776599
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1 . А можешь показать rep.xsl ?
...
Рейтинг: 0 / 0
долгая генерация html по xslt схеме из xml
    #38776661
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Atum1,

Сложно назвать нормальным решение, завязанное на одну платформу...
Хотя хозяин - барин.
...
Рейтинг: 0 / 0
долгая генерация html по xslt схеме из xml
    #38777110
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html>
  <body>
  <h2>My CD Collection</h2>
  <table border="1">
    <tr bgcolor="#9acd32">
      <th>Title</th>
      <th>Artist</th>
    </tr>
    <xsl:for-each select="catalog/cd">
    <tr>
      <td><xsl:value-of select="title"/></td>
      <td><xsl:value-of select="artist"/></td>
    </tr>
    </xsl:for-each>
  </table>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>




Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
  <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
  </cd>
.
.
</catalog>
...
Рейтинг: 0 / 0
долгая генерация html по xslt схеме из xml
    #38777256
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1, я мог бы взять Apache Digester и переписать эту логику почти хард-кодом.
Будет быстро. Но возникает вопрос. Тебя устраивает любое быстрое решение.

Или тебе принципиально важно чтобы логика извлечения catalog/cd/title, catalog/cd/artist
была во внешнем скрипте?
...
Рейтинг: 0 / 0
долгая генерация html по xslt схеме из xml
    #38777278
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Проблема классическая - данные я получаю в виде xml - их отдает база.
следовательно нужно эти данные отразить на клиенте в виде ему приятном (табличка).

Вопрос как это делать?

чтобы не писать - свой парсер xml во что то еще (jaxb или json) , потом получать объекты и класть из в jsp итд ...

или сразу отдать на клиента готовый отчет ?!

я думаю что лучше сразу отдать отчет - и пусть его см клиент и формирует .

т.е. у меня есть xml - я пишу под него xslt - и это все отдаю клиенту - а он уже средствами браузера формирует себе отчет в нормальном виде.
...
Рейтинг: 0 / 0
долгая генерация html по xslt схеме из xml
    #38777388
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1или сразу отдать на клиента готовый отчет ?!
я думаю что лучше сразу отдать отчет

тоже думаю, что клиенту лучше отдать готовый отчет
Atum1и пусть его см клиент и формирует .

т.е. у меня есть xml - я пишу под него xslt - и это все отдаю клиенту - а он уже средствами браузера формирует себе отчет в нормальном виде.

IMHO странно это как-то
Приходите Вы в Макдональдс, заказываете гамбургер, а Вам выдают: кусок булки, котлету, огурец, лук, майонез... клиенту отдали, пусть он и формирует.

Честно говоря, проблема не понятна. Если отчеты отдаются часто и реально грузят сервер, профилировать и оптимизировать.

Как я помню, в XSLT есть две стадии - компиляция XSLT-шаблона и собственно его применение к данным. Если один раз при инициализации скомпилировать XSLT-шаблон, а потом его просто применять, AFAIK все достаточно быстро. Как минимум, за счет такой оптимизации можно ускорить минимум в 2 раза. Вроде (не уверен), XSLT работает через SAX-парсер. Т.е. достаточно быстро и оптимально.

Если данные редко меняются (и/или не меняются), можно просто кешировать уже готовый результирующий файл. Тогда скорость отдачи будет равна скорости оперативной памяти.
...
Рейтинг: 0 / 0
долгая генерация html по xslt схеме из xml
    #38777419
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

да все верно .

так и делаю.


Если браузер поддерживает xslt преобразование - то лучше делать как описано на http://www.w3schools.com/xsl/xsl_transformation.asp

отдавать сразу из контроллера в виде тела :
и добавлять в шапку ссылку на xsl шаблон.

в браузере будет отображаться уже готовая страница отчета.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / долгая генерация html по xslt схеме из xml
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]