Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / долгая генерация html по xslt схеме из xml / 22 сообщений из 22, страница 1 из 1
09.10.2014, 18:06
    #38772213
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
долгая генерация html по xslt схеме из xml
Добрый день !

Каким образом можно ускорить пройцесс создания отчета по 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
09.10.2014, 18:14
    #38772233
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
долгая генерация html по xslt схеме из xml
Atum1,
зачем ускорять?
У тебя картинки\фон будет грузится в 100 раз дольше
...
Рейтинг: 0 / 0
09.10.2014, 18:17
    #38772235
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
долгая генерация html по xslt схеме из xml
Atum1Каким образом можно ускорить пройцесс создания отчета по xslt схеме ( сейчас это время порядка 100 ms)
может перенести все на клиента? и делать xslt преобразование средствами браузера ?

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

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

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

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

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

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

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

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



может сделать метод статический или что то как-то упростить? :)?
...
Рейтинг: 0 / 0
09.10.2014, 18:45
    #38772266
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
долгая генерация html по xslt схеме из xml
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
09.10.2014, 19:10
    #38772286
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
долгая генерация html по xslt схеме из xml
Atum1 по поводу . Перейти на бины и любые Java шаблоны. - я что то не понял , поясните , пожалуйста .

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

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

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


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


Basil A. Sidorov,

ок. Спасибо! учту.
...
Рейтинг: 0 / 0
10.10.2014, 09:54
    #38772673
0FD
0FD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
долгая генерация html по xslt схеме из xml
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
14.10.2014, 17:44
    #38776510
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
долгая генерация html по xslt схеме из xml
тут есть нормальное решение
...
Рейтинг: 0 / 0
14.10.2014, 17:44
    #38776513
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
долгая генерация html по xslt схеме из xml
...
Рейтинг: 0 / 0
14.10.2014, 17:49
    #38776517
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
долгая генерация html по xslt схеме из xml
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
14.10.2014, 18:47
    #38776599
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
долгая генерация html по xslt схеме из xml
Atum1 . А можешь показать rep.xsl ?
...
Рейтинг: 0 / 0
14.10.2014, 20:10
    #38776661
WGA
WGA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
долгая генерация html по xslt схеме из xml
Atum1,

Сложно назвать нормальным решение, завязанное на одну платформу...
Хотя хозяин - барин.
...
Рейтинг: 0 / 0
15.10.2014, 11:54
    #38777110
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
долгая генерация html по xslt схеме из xml
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
15.10.2014, 13:17
    #38777256
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
долгая генерация html по xslt схеме из xml
Atum1, я мог бы взять Apache Digester и переписать эту логику почти хард-кодом.
Будет быстро. Но возникает вопрос. Тебя устраивает любое быстрое решение.

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

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

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

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

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

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

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

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

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

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

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

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

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

да все верно .

так и делаю.


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

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

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


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