Auslesen einer Webseite beschleunigen

C

ChrisMobile

Stammgast
83
Hallo zusammen,

ich hab einen standard-Block, den ich in meinen Apps nutze um etwas von einer Webseite auszulesen.
Der Code funktioniert an sich sehr gut, nur leider läuft das Auslesen meiner Meinung nach sehr langsam.

Ich hab nun ein bisschen rumgebastelt und nach Alternativen gesucht aber irgendwie war noch nichts dabei, was wirklich spürbar schneller geht.

Code:
    /**
     * Liefert die angegebene Webseite als String zurück.
     *
     * @return HTML der Webseite.
     */
    private String getSourceCode() {
        URL url = null;
        try {
            url = new URL(wantedURL);
        } catch (MalformedURLException e) {
            writeErrorLogOnSD(e);
            e.printStackTrace();
        }
        URLConnection conn = null;
        try {
            conn = url.openConnection();
        } catch (IOException e) {
            writeErrorLogOnSD(e);
            e.printStackTrace();
        } catch (NullPointerException e) {
            writeErrorLogOnSD(e);
            e.printStackTrace();
        }
        // editText.getText().toString()
        BufferedReader rd = null;
        try {
            rd = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
        } catch (IOException e) {
            writeErrorLogOnSD(e);
            e.printStackTrace();
        } catch (NullPointerException e) {
            writeErrorLogOnSD(e);
            e.printStackTrace();
        }

        String line = "";
        String oldLine = "";
        if (rd != null) {
            System.out.println("Got Line");
            try {
                while ((line = rd.readLine()) != null) {
                    oldLine = oldLine + line;
                }
            } catch (IOException e) {
                writeErrorLogOnSD(e);
                e.printStackTrace();
            }
            try {
                rd.close();
            } catch (IOException e) {
                writeErrorLogOnSD(e);
                e.printStackTrace();
            }
        } else {
            System.out.println("No Line");
            error = true;
        }

        return oldLine;
    }

Wäre cool, wenn ihr ein paar Geheim-Tipps in der Hinterhand habt, oder gibt es wirklich nichts, dass "deutlich" schneller ist?

Viele Grüße
Chris
 
StringBuilder einsetzen (tut sonst der Compiler führ dich, aber ineffizient. Der erstellt dann nämlich im Schleifenrumpf jedes mal einen neuen).
 
Danke für den Tipp, das Herunterladen der Daten geht nun im Schnitt 4x schneller!

Hab die beiden Funktionen gerade direkt verglichen und auf der selben Webseite dauert es mit dem Code ohne StringBuilder ca. 4000ms (mehrfach getestet) und mit dem StringBuilder nur noch ca. 1000ms (teilweise sogar nur 800ms).

Hier kommt nochmal der neue Code für die Nachwelt:
Code:
                /*
                while ((line = rd.readLine()) != null) {
                    oldLine = oldLine + line;
                }
                */
                StringBuilder sb = new StringBuilder();
                while ((line = rd.readLine()) != null) {
                    //oldLine = oldLine + line;
                    sb.append(line);
                }
                oldLine =  sb.toString();

Viele Grüße
Chris
 
Wem die Ursachen für das "Phänomen" interessieren, dem empfehle ich einen Blick auf diesem Blog-Artikel zu werfen.
Lohnt sich! Performance ist nun mal ein wichtiger Nennwert bei der User-Experience und entscheidet nicht selten ob eine Applikation beim Benutzer ankommt oder aber direkt deinstalliert wird.
 
  • Danke
Reaktionen: Tom299 und ChrisMobile

Ähnliche Themen

H
Antworten
2
Aufrufe
1.309
Hcman
H
D
  • Data2006
Antworten
14
Aufrufe
486
jogimuc
J
H
Antworten
0
Aufrufe
931
HoustonWeHaveAProblem
H
Zurück
Oben Unten