Альтернатива Jsoup.метод parse()

я использую Jsoup.parse() для разбора данные. Все работает хорошо, но занимает много времени.

например, эти данные занимают 20 сек. для разбора. Есть ли другие решения для моих нужд?

код:

rezult = Jsoup.parse(res.parse().outerHtml(), "UTF-8").text();

здесь res это текст ссылке.

=========== обновление =============

я отделяю эту переменную от Jsoup.parse() и понял, что это источник проблема. Это занимает 20 секунд, а не Jsoup.parse().

String tmp = res.parse().outerHtml();

и это занимает всего 1 сек.:

rezult = Jsoup.parse(tmp, "UTF-8").text();

я использую этот код для получения данных по этой ссылке. Я использую Jsoup.parse() потому что без него у меня что-то вроде этого:

<html>
    <head></head>
    <body>
    {&quot;success&quot;:true,&quot;currentUser&quot;:43743,&quot;careTypes&quot;:[{&quot;id&quot;:1,&quot;name&quot;:&quot;u0421u0442u0438u0440u043au0430&quot;,&quot;description&quot;:&quot;u041eu043fu0438u0441u0430u043du0438u0435 u0441u0442u0438u0440u043au0438 u043fu043eu044fu0432u0438u0442u0441u044f u0437u0434u0435u0441u044c, u043au0430u043a u0442u043eu043bu044cu043au043e u0432u044b u0432u044bu0431u0435u0440u0435u0442u0435 u0440u0435u043au043eu043cu0435u043du0434u0443u0435u043cu044bu0439 u0440u0435u0436u0438u043c.&quot;},{&quot;id&quot;:2,&quot;name&quot;:&quot;u041eu0442u0431u0435u043bu0438u0432u0430u043du0438u0435&quot;,&quot;description&quot;:&quot;u041eu043fu0438u0441u0430u043du0438u0435 u043eu0442u0431u0435u043bu0438u0432u0430u043du0438u044f u043fu043eu044fu0432u0438u0442u0441u044f u0437u0434u0435u0441u044c, u043au0430u043a u0442u043eu043bu044cu043au043e u0432u044b u0432u044bu0431u0435u0440u0435u0442u0435 

вместо этого:

{"success":true,"currentUser":43743,"careTypes":[{"id":1,"name":"u0421u0442u0438u0440u043au0430","description":"u041eu043fu0438u0441u0430u043du0438u0435 u0441u0442u0438u0440u043au0438 u043fu043eu044fu0432u0438u0442u0441u044f u0437u0434u0435u0441u044c, u043au0430u043a u0442u043eu043bu044cu043au043e u0432u044b u0432u044bu0431u0435u0440u0435u0442u0435 u0440u0435u043au043eu043cu0435u043du0434u0443u0435u043cu044bu0439 u0440u0435u0436u0438u043c."},{"id":2,"name":"u041eu0442u0431u0435u043bu0438u0432u0430u043du0438u0435","description":"u041eu043fu0438u0441u0430u043du0438u0435 u043eu0442u0431u0435u043bu0438u0432u0430u043du0438u044f u043fu043eu044fu0432u0438u0442u0441u044f u0437u0434u0435u0441u044c, u043au0430u043a u0442u043eu043bu044cu043au043e u0432u044b u0432u044bu0431u0435u0440u0435u0442u0435 

но теперь главная проблема состоит в том, чтобы изменить res.parse() метод для чего-то другого с меньшим временем выполнения.

=========== обновление 2 =============

 long t2 = System.currentTimeMillis();
        try {
            Connection connection = Jsoup.connect(url)
                    .method(Connection.Method.POST)
                    .cookies(cookies)
                    .timeout(30000)
                    .ignoreContentType(true);
            if (data != null) {
                connection.data(data);
            }

            res = connection.execute();

            Logger.d(System.currentTimeMillis() - t2 + " = connection.execute");

            long t6 = System.currentTimeMillis();
            String tmp = res.parse().outerHtml();
            Logger.d(System.currentTimeMillis() - t6 + " = res.parse().outerHtml()");

            long t4 = System.currentTimeMillis();
            rezult = Jsoup.parse(tmp, "UTF-8").text();
            Logger.d(System.currentTimeMillis() - t4 + " = Jsoup.parse");

и что я получил в Logcat:

1588 = connection.execute
16150 = res.parse().outerHtml()
1466 = Jsoup.parse

2 ответов


использовать eval(). Кроме того, убедитесь, что источник eval() безопасно. eval() попытается оценить любой оператор и, таким образом, может потенциально выявить проблемы безопасности не используется должным образом


Я нашел решение этой проблемы.

есть другой метод в Jsoup lib для получения содержимого страницы без разбора.

решение заключается в изменении этой строки:

String tmp = res.parse().outerHtml();

на эту строку:

String tmp = res.body();

Это действительно быстрее в 20 раз. Может быть, они делают другую работу, но в моих нуждах это то же самое.