Prestanda, PHP-sidor och HTML-sidor
Det började som en frågeställning när jag gjorde mitt första WordPress tema och jag såg att PHP startades, och stängdes av och gick över till HTML för att sedan gå tillbaka till PHP vilket jag ser som ytterst ineffektivt. Vad är då mest effektivt? Att enbart göra hela sidan i PHP eller växla fram och tillbaka?
Anledningen till frågan är att jag läste en bloggpost som skrev att A PHP script will be served at least 2-10 times slower than a static HTML page by Apache. Try to use more static HTML pages and fewer scripts.
Visst jag kan köpa detta, men när jag lärde mig PHP så var det så att för varje gång man körde en start- och sluttagg så initierades respektive avslutades PHP-modulen vilket betyder att man bör minimera start och avslut för att effektivisera och öka prestandan.
Vad är då snabbare av kodning-sätten:
[code language="php"]
<?php $comment_type = get_comment_type(); ?>
<?php if($comment_type == 'comment') { ?>
<?php if ($i%2) { echo '
<div class="comment-even">'; } else { echo '
<div class="comment-odd">'; } ?>
<?php echo get_avatar( $comment, 42 ); ?>
<span><?php comment_author_link() ?> tycker ... </span>
<div><?php comment_text() ?></div>
</div>
<br class="dirtyLittleTrick" />
<?php } else { $trackback = true; } /* End of is_comment statement */ ?>
<?php endforeach; /* end for each comment */ ?>
Eller:
[code language="php"]
<?php $comment_type = get_comment_type();
if($comment_type == 'comment') {
if ($i%2) { echo '
<div class="comment-even">'; } else { echo '
<div class="comment-odd">'; }
echo get_avatar( $comment, 42 );
echo '<span>'.comment_author_link().' tycker ... </span>
<div>'.comment_text() .'</div>
</div>
<br class="dirtyLittleTrick" />';
} else { $trackback = true; }
endforeach; ?>
Exemplet är från ett WordPress tema och jag föredrar den sista, men är det den rätta vägen att gå?
Typografera dina förkortningar med CSS och PHP
Enligt Typografisk Handbok (Hellmark) så kan versala ord se ut som fläckar i din text. Detta kan avhjälpas genom att spärra dem smått och sätta de i kapitäler. Jag tänkte gå igenom ett snabbt tips hur man enkelt kan lösa detta med hjälp av PHP och CSS.
Flera versaler efter varandra i löpande text blir ofta påträngande […]. Det kan avhjälpas genom att man sätter versalerna en punkt mindre än den övriga texten och spärrar dem lite […].
För det första är denna koden ganska generell och det reguljära uttrycket är på inget sätt optimerat då mina kunskaper inom det fortfarande är ganska låga, det finns säkert en smartare sträng som löser uppgiften.
Först antar vi att din text är i en string:
[code language="php"]$str = "Hej en förkortning kan se ut som detta CSS eller HTML-kod samt PHP";
Sen behöver vi reguljära uttryck och en replace på de förkortningar som finns:
[code language="php"]$pattern = array(
"/s([A-Z][A-Z0-9]{2,})s/",
"/s([A-Z][A-Z0-9]{2,}+)/"
);
$replace = array(
" $1 ",
" $1"
);
$str = preg_replace( $pattern, $replace, $str);
Detta byter ut alla förekomster av förkortningar med tre tecken eller mer i den löpande texten. Att vi har två reguljära uttryck är eftersom en förkortning kan finns som ensamstående, HTML, eller som del av ett ord, HTML-koden.
Det som är kvar är att sätta en stilmall på den nya layouten:
[code language="css"]abbr {
letter-spacing: 0.1em;
font-variant: small-caps;
font-size: 11px;
}
Att vi väljer dessa regler är ganska enkelt. En förkortning ska enligt Hellmark spärras med ungefär 10%, alltså blir det 0.1em. Istället för att använda versaler som ser konstigt ut så kan man istället använda kapitäler som har samma x-höjd som resterande text. Det kan också vara en bra idé att minska textstorleken med 1pixel (eller punkt i print) för att linjera texten ytterligare.
Sammanfattning
[code language="php"]$str = "Hej en förkortning kan se ut som detta CSS eller HTML-kod samt PHP";
$pattern = array(
"/s([A-Z][A-Z0-9]{2,})s/",
"/s([A-Z][A-Z0-9]{2,}+)/"
);
$replace = array(
" $1 ",
" $1"
);
$str = preg_replace( $pattern, $replace, $str);
Och CSS:
[code language="css"]
abbr {
letter-spacing: 0.1em;
font-variant: small-caps;
font-size: 11px;
}

