Auslesen einer Webseite beschleunigen

C

ChrisMobile

Stammgast
Threadstarter
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
 
Fr4gg0r

Fr4gg0r

App-Anbieter (Werbung)
StringBuilder einsetzen (tut sonst der Compiler führ dich, aber ineffizient. Der erstellt dann nämlich im Schleifenrumpf jedes mal einen neuen).
 
C

ChrisMobile

Stammgast
Threadstarter
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
 
F

funcoder

Fortgeschrittenes Mitglied
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.
 
Oben Unten