Bio-logisch: PHP verlängert Ladezeit?

Hallo,
ich habe im Head meines HTML-Dokumentes folgenden PHP-Code eingebaut:

<head><title>Test</title><?php  
// Rückgabe bei keinem IE: -1  
function ieversion() {  
  $match=preg_match('/MSIE ([0-9]\.[0-9])/',$_SERVER['HTTP_USER_AGENT'],$reg);  
  if($match==0)  
    return -1;  
  else  
    return floatval($reg[1]);  
}  
  
//Das Skript lädt je nach Browsertyp und -version eine unterschiedliche CSS-Datei  
$Version = ieversion();  
switch ($Version) {  
    case 5:  
        echo "<link rel='stylesheet' media='screen' type='text/css' href='/ie.css' > ";  
  
    case 5.5:  
        echo "<link rel='stylesheet' media='screen' type='text/css' href='/ie.css' > ";  
  
    case 6:  
        echo "<link rel='stylesheet' media='screen' type='text/css' href='/ie.css' > ";  
  
    case 4:  
        echo "<link rel='stylesheet' media='screen' type='text/css' href='/ie.css' > ";  
  
    default:  
       echo "<link rel='stylesheet' media='screen' type='text/css' href='/stylesheet.css' > ";  
}  
  
?></head>

Kann es sein, dass durch dieses Skript die Ladezeit verlängert wird?
Gruß,
Euer Bio-logisch

  1. Hi, Bio-logisch!

    Natürlich verlängert PHP die Ladezeit. Selbst wenn FastCGI oder mod_php und Techniken wie XCache verwendet werden, ist es immer noch wesentlich komplizierter und speicheraufwendiger als das Ausliefern einer statischen Seite - und lustigerweise würde diese ausreichen, um Deine Anforderungen zu erfüllen, sofern Du Dir mit Conditional Comments (selber googeln hilft, bin gerade zu faul, einen Link zu suchen) behilfst.

    Gruß, LX

    --
    RFC 1925, Satz 2: Egal, wie fest man schiebt, ganz gleich, wie hoch die Priorität ist, man kann die Lichtgeschwindigkeit nicht erhöhen.
  2. Hi,

    //Das Skript lädt je nach Browsertyp und -version eine unterschiedliche CSS-Datei

    Du solltest Dein Konzept überdenken. Diese Herangehensweise ist Quark.

    Kann es sein, dass durch dieses Skript die Ladezeit verlängert wird?

    Jedes Script ist langsamer als statisches html - allerdings dürfte das bei Deinem Script kaum messbar sein.

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
    1. Hi,

      //Das Skript lädt je nach Browsertyp und -version eine unterschiedliche CSS-Datei
      Du solltest Dein Konzept überdenken. Diese Herangehensweise ist Quark.

      Naja. Das weiß ich auch. Das Problem ist, ich habe für die Standardkonformen Browser viele Elemente ohne Breite und Höhe angegeben, dafür aber mit top, bottom, left & right. Bei den IE-Versionen nach IE 6 schafft der IE das auch. Eben nicht bei IE6. Und wie soll ich dann nalle Eigenschaften für den IEW setzten. Ich hab's mit dem Star-Hack probiert. Das Problem ist, dass ich fast alle Eigenschaften neu setzen muss ==> rießige CSS-Datei.
      Was soll ich tun?
      Bei ConditionalComments tritt ja das glecihe Problem auf, dass ich z.B: bei vielen Elementen erst mal position: ....; auf "Default" setzten muss.
      Viele Grüße
      Bio-logisch

      1. Was soll ich tun?

        Conditional Comments oder Hacks verwenden.

        Bei ConditionalComments tritt ja das glecihe Problem auf, dass ich z.B: bei vielen Elementen erst mal position: ....; auf "Default" setzten muss.

        "default ist keine gültiger Wert für die position-Eigenschaft.

        1. "default ist keine gültiger Wert für die position-Eigenschaft.

          Nein. Aber wenn ich nichts angebe (=> Das brauche ich) ist es standardmäßig relative. Jrtzt sind meine Elemente aber z.T: mit abolut positioniert. Für den IE, der das nicht braucht, muss ich jetzt jedesmal erst relative; setzten. Das war mit Default gemeint.

          1. "default ist keine gültiger Wert für die position-Eigenschaft.
            Nein. Aber wenn ich nichts angebe (=> Das brauche ich) ist es standardmäßig relative.

            Auch "nichts" stellt keinen ungültigen Wert dar und wird folgerichtig ignoriert:

            #foo {  
              position: absolute;  
            }  
              
            #foo {  
              position: ;  
            }  
            
            

            hier wird "absolute" weiterhin der gültige Wert sein, da die zweite Deklaration ignoriert wird.

            Jrtzt sind meine Elemente aber z.T: mit abolut positioniert. Für den IE, der das nicht braucht, muss ich jetzt jedesmal erst relative; setzten. Das war mit Default gemeint.

            relative ist aber üblicherweise nicht der Vorgabewert, der Position-Eigenschaft.

            Und "jedes mal" einen anderen Wert setzen ist immer noch wesentlich weniger arbeit als ein vollständig redundantes CSS-File zu verfassen.

            allgemein.css

            #foo {  
              background: blue;  
              color: green;  
              /* 20 weitere Eigenschaften */  
            }
            

            ie6.css

            #foo {  
              background: red;  
              color: green;  
              /* 20 weitere Eigenschaften */  
            }
            

            oder doch lieber das hier

            #foo {  
              background: red;  
            }
            
  3. Mahlzeit Bio-logisch,

    Kann es sein, dass durch dieses Skript die Ladezeit verlängert wird?

    Ja.(*)

    Warum aber verlässt Du Dich überhaupt auf eine vom Browser bzw. dessen Benutzer beliebig manipulierbare Angabe wie den HTTP_USER_AGENT, um zu bestimmen, um welchen Browser es sich handelt?

    Schreibe *ein* sauberes, valides Stylesheet, das bei validem HTML-Code in allen standardkonformen Browsern das gewünschte Ergebnis erzeugt:

    <link rel="stylesheet" media="screen" type="text/css" href="/stylesheet.css">

    Gib *anschließend* die für die von Dir unterstützten Versionen des IE erforderlichen Ausnahmen und Sonderregeln als CSS-Hacks an - je nach Vorliebe entweder direkt in dem einen Stylesheet ... oder z.B. als weiteres Stylesheet, das per <http://de.selfhtml.org/css/layouts/browserweichen.htm#alternative@title=Conditional Comment> eingebunden wird (und natürlich *nur* die Ausnahmen enthält!):

    <!--[if IE]>  
    <link rel="stylesheet" media="screen" type="text/css" href="/ie.css">  
    <![endif]-->
    

    Mir persönlich gefällt die letztere Variante gut: so belästige ich "normale" Browser nicht mit den für IE erforderlichen CSS-Hacks - und mir persönlich ist es egal, ob ein IE jetzt ein oder zwei Stylesheets anfordert ... wer einen mangelhaften Browser benutzt, muss eben damit leben, dass er ein paar Millisekungen länger braucht.

    Du wirst hier im Forum aber speziell zu diesem Thema diverse Meinung hören. Mein Tipp: lass' Dich nicht besabbeln - probiere die verschiedenen Alternativen aus und entscheide, was für Dich am Besten geeignet ist.

    (*) Schließlich muss der PHP-Code ja erst ausgeführt werden, bevor das Ergebnis an den Browser geliefert werden kann. Du kannst ja mal versuchen zu messen, wieviele Milli- oder Mikrosekunden die Ausführung dauert.

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  4. Ganz unabhängig von den berechtigt vorgetragenen Einwänden der Vorposter: Dein Skript an sich hat ein Designproblem, bekanntlicherweise grast der Interpreter ab dem ersten erkannten Case alle darauf folgenden Cases ab und führt den notierten Code aus.

    Im schlimmsten Fall (IE 5, der Fall ist wirklich schlimm) hättest du also:

    <link rel='stylesheet' media='screen' type='text/css' href='/ie.css' > <link rel='stylesheet' media='screen' type='text/css' href='/ie.css' > <link rel='stylesheet' media='screen' type='text/css' href='/ie.css' > <link rel='stylesheet' media='screen' type='text/css' href='/ie.css' > <link rel='stylesheet' media='screen' type='text/css' href='/stylesheet.css' >

    als Ausgabe.
    Ein break hilft hier Wunder.

    Dieses Verhalten kann man sich auch Zunutzen machen, gerade in deinem Fall:

      
    $Version = ieversion();  
    switch ($Version) {  
         case 5:  
         case 5.5:  
         case 6:  
         case 4:  
             echo "<link rel='stylesheet' media='screen' type='text/css' href='/ie.css' > ";  
             break;  
         default:  
            echo "<link rel='stylesheet' media='screen' type='text/css' href='/stylesheet.css' > ";  
    }  
    
    
    --
    for your security, this text has been encrypted by ROT13 twice.
  5. Wenn ich die Seite mit dem einen Browser besuche und speichere und dann mit einem anderen Browser anschauen möchte passiert was? Genau.