Propozycja odchudzenia (optymalizacji) PHP-Fusion
|
zer0 |
Dodany dnia 28.08.2009 02:29:22
|
Bywalec
Postów: 343 Pomógł: 1
Data rejestracji: 29.07.2004 23:20
|
Nie wiedziałem w którym dziale założyć ten temat, więc od razu przepraszam administrację, że znajduje się on w tym dziale. Myślę, ze temat można uznać jako 'propozycję', gdyż tego co opiszę, brakuje PHP-Fusion od kilku lat.
Chodzi mi o wywalenie wszystkich tabelek, które są w kodzie, lokalnych styli css, niepotrzebnych <br>anów i <strong>menów. Bardzo dużo osób może sobie nie życzyć modyfikacji plików z uwagi na kolejne aktualizacje. Jednakże chciałbym zachęcić każdą osobę, która zna się na XHTML i CSS do takiego właśnie czynu. Nie jest to proste wyzwanie, lecz jeśli chociaż jedna osoba odchudzi jeden plik, to w szybkim tempie zaoszczędzimy kilkadziesiąt kilobajtów - nie wspomnę już o optymalizacji pod kontem marketingowym, czy miesięcznego transferu.
Plików także nie jest wiele.. :)
Przed chwilą odchudziłem plik news.php. Z 11Kb pomniejszył się do 10Kb. Przypuścimy, że teraz mamy 500 odsłon dziennie, co daje nam 500Kb dziennej oszczędności. Miesięcznie można dojść do 15Mb, co np. dla osób mających łącze bezprzewodowe jest niezmiernie ważne. Poza tym, nie ma to jak wdzięczność użytkowników, którym strona się szybciej ładuje.. :)
Więc tak wygląda plik news.php:<?php
/*-------------------------------------------------------+
| PHP-Fusion Content Management System
| Copyright (C) 2002 - 2008 Nick Jones
| http://www.php-fu...
+--------------------------------------------------------+
| Filename: news.php
| Author: Nick Jones (Digitanium)
+--------------------------------------------------------+
| This program is released as free software under the
| Affero GPL license. You can redistribute it and/or
| modify it under the terms of this license which you
| can read by viewing the included agpl.txt or online
| at www.gnu.org/licen... Removal of this
| copyright header is strictly prohibited without
| written permission from the original author(s).
+--------------------------------------------------------*/
require_once "maincore.php";
require_once THEMES."templates/header.php";
// Predefined variables, do not edit these values
if ($settings['news_style'] == "1") { $i = 0; $rc = 0; $ncount = 1; $ncolumn = 1; $news_[0] = ""; $news_[1] = ""; $news_[2] = ""; } else { $i = 1; }
// Number of news displayed
$items_per_page = $settings['newsperpage'];
add_to_title($locale['global_200'].$locale['global_077']);
if (!isset($_GET['readmore']) || !isnum($_GET['readmore'])) {
$rows = dbcount("(news_id)", DB_NEWS, groupaccess('news_visibility')." AND (news_start='0'||news_start<=".time().") AND (news_end='0'||news_end>=".time().") AND news_draft='0'");
if (!isset($_GET['rowstart']) || !isnum($_GET['rowstart'])) { $_GET['rowstart'] = 0; }
if ($rows) {
$result = dbquery(
"SELECT tn.*, tc.*, user_id, user_name FROM ".DB_NEWS." tn
LEFT JOIN ".DB_USERS." tu ON tn.news_name=tu.user_id
LEFT JOIN ".DB_NEWS_CATS." tc ON tn.news_cat=tc.news_cat_id
WHERE ".groupaccess('news_visibility')." AND (news_start='0'||news_start<=".time().") AND (news_end='0'||news_end>=".time().") AND news_draft='0'
ORDER BY news_sticky DESC, news_datestamp DESC LIMIT ".$_GET['rowstart'].",$items_per_page"
);
$numrows = dbrows($result);
if ($settings['news_style'] == "1") { $nrows = round((dbrows($result) - 1) / 2); }
while ($data = dbarray($result)) {
$news_cat_image = "";
$news_subject = "<a name='news_".$data['news_id']."' id='news_".$data['news_id']."'></a>".stripslashes($data['news_subject']);
if ($data['news_cat_image']) {
$news_cat_image = "<a href='news_cats.php?cat_id=".$data['news_cat_id']."'><img src='".get_image("nc_".$data['news_cat_name'])."' alt='".$data['news_cat_name']."' class='news-category' /></a>";
} else {
$news_cat_image = "";
}
$news_news = $data['news_breaks'] == "y" ? nl2br(stripslashes($data['news_news'])) : stripslashes($data['news_news']);
if ($news_cat_image != "") $news_news = $news_cat_image.$news_news;
$news_info = array(
"news_id" => $data['news_id'],
"user_id" => $data['user_id'],
"user_name" => $data['user_name'],
"news_date" => $data['news_datestamp'],
"news_ext" => $data['news_extended'] ? "y" : "n",
"news_reads" => $data['news_reads'],
"news_comments" => dbcount("(comment_id)", DB_COMMENTS, "comment_type='N' AND comment_item_id='".$data['news_id']."'"),
"news_allow_comments" => $data['news_allow_comments']
);
if ($settings['news_style'] == "1") {
if ($rows <= 2 || $ncount == 1) {
$news_[0] .= "<h3 class='tbl2 bold'>".$news_subject."</h3>\n";
$news_[0] .= "<div class='tbl1 justify'>".$news_news."</div>\n";
$news_[0] .= "<div class='tbl2 center small2'>\n";
$news_[0] .= THEME_BULLET." <a href='profile.php?lookup=".$news_info['user_id']."'>".$news_info['user_name']."</a> ".$locale['global_071'].showdate("longdate", $news_info['news_date'])." ·\n";
if ($news_info['news_ext'] == "y" || $news_info['news_allow_comments']) {
$news_[0] .= $news_info['news_ext'] == "y" ? "<a href='".FUSION_SELF."?readmore=".$news_info['news_id']."'>".$locale['global_072']."</a> ·\n" : "";
$news_[0] .= $news_info['news_allow_comments'] ? "<a href='".FUSION_SELF."?readmore=".$news_info['news_id']."'>".$news_info['news_comments'].($news_info['news_comments'] == 1 ? $locale['global_073b'] : $locale['global_073'])."</a> ·\n" : "";
$news_[0] .= $news_info['news_reads'].$locale['global_074']." ·\n";
}
$news_[0] .= "<a href='print.php?type=N&item_id=".$news_info['news_id']."'><img src='".get_image("printer")."' alt='".$locale['global_075']."' class='news-img' /></a>";
if (checkrights("N")) { $news_[0] .= " · <a href='".ADMIN."news.php".$aidlink."&action=edit&news_id=".$news_info['news_id']."'><img src='".get_image("edit")."' alt='".$locale['global_076']."' title='".$locale['global_076']."' class='news-img' /></a></span>\n"; } else { $news_[0] .= "\n"; }
$news_[0] .= "</div>\n";
if ($ncount != $rows) { $news_[0] .= "<img src='".get_image("blank")."' alt='' />\n"; }
} else {
if ($i == $nrows && $ncolumn != 2) { $ncolumn = 2; $i = 0; }
$row_color = ($rc % 2 == 0 ? "tbl2" : "tbl1");
$news_[$ncolumn] .= "<h3 class='tbl2 news-sep bold'>".$news_subject."</h3>\n";
$news_[$ncolumn] .= "<div class='tbl1 news-sep justify'>".$news_news."</div>\n";
$news_[$ncolumn] .= "<div class='tbl2 news-sep center small2'>\n";
$news_[$ncolumn] .= "".THEME_BULLET." <a href='profile.php?lookup=".$news_info['user_id']."'>".$news_info['user_name']."</a> ".$locale['global_071'].showdate("longdate", $news_info['news_date']);
if ($news_info['news_ext'] == "y" || $news_info['news_allow_comments']) {
$news_[$ncolumn] .= "<br />\n";
$news_[$ncolumn] .= $news_info['news_ext'] == "y" ? "<a href='".FUSION_SELF."?readmore=".$news_info['news_id']."'>".$locale['global_072']."</a> ·\n" : "";
$news_[$ncolumn] .= $news_info['news_allow_comments'] ? "<a href='".FUSION_SELF."?readmore=".$news_info['news_id']."#comments'>".$news_info['news_comments'].($news_info['news_comments'] == 1 ? $locale['global_073b'] : $locale['global_073'])."</a> ·\n" : "";
$news_[$ncolumn] .= $news_info['news_reads'].$locale['global_074']." ·\n";
} else {
$news_[$ncolumn] .= " ·\n";
}
$news_[$ncolumn] .= "<a href='print.php?type=N&item_id=".$news_info['news_id']."'><img src='".get_image("printer")."' alt='".$locale['global_075']."' class='news-img' /></a>\n";
if (checkrights("N")) { $news_[$ncolumn] .= " · <a href='".ADMIN."news.php".$aidlink."&action=edit&news_id=".$news_info['news_id']."'><img src='".get_image("edit")."' alt='".$locale['global_076']."' title='".$locale['global_076']."' class='news-img' /></a></span>\n"; } else { $news_[$ncolumn] .= "\n"; }
$news_[$ncolumn] .= "</div>\n";
if ($ncolumn == 1 && $i < ($nrows - 1)) { $news_[$ncolumn] .= "<div class='br'><img src='".get_image("blank")."' alt='' /></div>\n"; }
if ($ncolumn == 2 && $i < (dbrows($result) - $nrows - 2)) { $news_[$ncolumn] .= "<div class='br'><img src='".get_image("blank")."' alt='' /></div>\n"; }
$i++; $rc++;
}
$ncount++;
} else {
echo "<!--news_prepost_".$i."-->\n";
$i++;
render_news($news_subject, $news_news, $news_info);
}
}
if ($settings['news_style'] == "1") {
opentable($locale['global_077']);
echo "<div class='news100'>";
echo "<div class='news100'>".$news_[0]."</div>";
echo "<div class='news49'>".$news_[1]."</div>";
echo "<div class='news49'>".$news_[2]."</div>";
echo "</div>";
closetable();
}
if ($rows > $items_per_page) echo "<div class='center'>\n".makepagenav($_GET['rowstart'],$items_per_page,$rows,3)."\n</div>\n";
} else {
opentable($locale['global_077']);
echo "<div class='error'>\n".$locale['global_078']."\n</div>\n";
closetable();
}
} else {
include INCLUDES."comments_include.php";
include INCLUDES."ratings_include.php";
$result = dbquery(
"SELECT tn.*, user_id, user_name FROM ".DB_NEWS." tn
LEFT JOIN ".DB_USERS." tu ON tn.news_name=tu.user_id
WHERE news_id='".$_GET['readmore']."' AND news_draft='0'"
);
if (dbrows($result)!=0) {
$data = dbarray($result);
if (checkgroup($data['news_visibility'])) {
$news_cat_image = "";
if (!isset($_POST['post_comment']) && !isset($_POST['post_rating'])) {
$result2 = dbquery("UPDATE ".DB_NEWS." SET news_reads=news_reads+1 WHERE news_id='".$_GET['readmore']."'");
$data['news_reads']++;
}
$news_subject = $data['news_subject'];
if ($data['news_cat']) {
$result2 = dbquery("SELECT * FROM ".DB_NEWS_CATS." WHERE news_cat_id='".$data['news_cat']."'");
if (dbrows($result2)) {
$data2 = dbarray($result2);
$news_cat_image = "<a href='news_cats.php?cat_id=".$data2['news_cat_id']."'><img src='".get_image("nc_".$data2['news_cat_name'])."' alt='".$data2['news_cat_name']."' class='news-category' /></a>";
}
}
$news_news = stripslashes($data['news_extended'] ? $data['news_extended'] : $data['news_news']);
if ($data['news_breaks'] == "y") { $news_news = nl2br($news_news); }
if ($news_cat_image != "") $news_news = $news_cat_image.$news_news;
$news_info = array(
"news_id" => $data['news_id'],
"user_id" => $data['user_id'],
"user_name" => $data['user_name'],
"news_date" => $data['news_datestamp'],
"news_ext" => "n",
"news_reads" => $data['news_reads'],
"news_comments" => dbcount("(comment_id)", DB_COMMENTS, "comment_type='N' AND comment_item_id='".$data['news_id']."'"),
"news_allow_comments" => $data['news_allow_comments']
);
add_to_title($locale['global_201'].$news_subject);
echo "<!--news_pre_readmore-->";
render_news($news_subject, $news_news, $news_info);
echo "<!--news_sub_readmore-->";
if ($data['news_allow_comments']) { showcomments("N", DB_NEWS, "news_id", $_GET['readmore'], FUSION_SELF."?readmore=".$_GET['readmore']); }
if ($data['news_allow_ratings']) { showratings("N", $_GET['readmore'], FUSION_SELF."?readmore=".$_GET['readmore']); }
} else {
redirect(FUSION_SELF);
}
} else {
redirect(FUSION_SELF);
}
}
require_once THEMES."templates/footer.php";
?> Kliknij i zaczekaj na załadowanie kodu ... + style CSS, które należy dodać do własnego arkusza:/* NEWS.PHP */
h1, h2, h3, h4, h5 {margin:0;}
.bold {font-weight:bold}
.justify {text-align:justify}
.center {text-align:center;}
.news49 {float:left;width:50%;}
.news100 {width:100%;margin:0 0 10px 0;}
.news-sep {margin:0 5px 0px 5px;}
.news-img {vertical-align:middle;border:0;}
.br {margin:0 0 10px 0;}
Kliknij i zaczekaj na załadowanie kodu ... Różnica w wyglądzie jest niewielka i odważę się twierdzić, że nawet lepsza.. ;)
[EDIT] Jeśli komuś nie rozciągnie się ramka przy dwukolumnowym układzie newsów, tzn. że ma błędy we własnym Theme. Narażone są na to skóry wykonane przez Max Toball, którego skóry (nie wiem jakim cudem) są w paczkach PHP-Fusion.
No i co du więcej napisać: od Was inni mogą nauczyć się poprawnie kodować strony. Wtedy może jako jedyny naród ze społeczności PHP-Fusion będziemy pisali poprawnie. Tak jak poprawnie gramatycznie jest forum supportu PHP-Fusion.. :)
Zachęcam do optymalizacji!
Pozdro,
~ zer0
Edytowane przez zer0 dnia 28.08.2009 18:19:33
|
|
|
|
Wścibski Gość |
Dodany dnia 25.11.2024 16:15:24
|
Pan Kontekstualny
Postów: n^x
Data rejestracji: Zawsze
|
|
IP: localhost |
|
|
bartek124 |
Dodany dnia 28.08.2009 14:41:32
|
Weteran
Postów: 3264 Pomógł: 236
v7.02.06 Data rejestracji: 26.05.2007 12:25
|
Przejście na divy byłoby dobrym krokiem, ale raczej nie teraz. Nadal wiele stron ma wszystko na tabelkach, wielu webmasterów nie pojmuje divów, są z nimi kłopoty w różnych przeglądarkach no i jest z nimi dużo więcej pracy, a to raczej burzy ideę prostego CMS'a.
Ja wyjadę z optymalizacją PHP. Owszem, duże kroki w v7 nastąpiły, ale nadal niektóre części nieciekawie wyglądają. Przykład także z news.php, linia 59:
"news_comments" => dbcount("(comment_id)", DB_COMMENTS, "comment_type='N' AND comment_item_id='".$data['news_id']."'"),
Jedenaście newsów na stronie - jedenaście dodatkowych zapytań, bezsens.
Nie pomagam na komunikatorach oraz PW!
|
|
|
|
zer0 |
Dodany dnia 28.08.2009 15:21:51
|
Bywalec
Postów: 343 Pomógł: 1
Data rejestracji: 29.07.2004 23:20
|
bartek124 napisał/a:
Przejście na divy byłoby dobrym krokiem, ale raczej nie teraz. Nadal wiele stron ma wszystko na tabelkach, wielu webmasterów nie pojmuje divów, są z nimi kłopoty w różnych przeglądarkach no i jest z nimi dużo więcej pracy, a to raczej burzy ideę prostego CMS'a.
Nie wiem co rozumiesz poprzez "ideę prostego CMS'a"? :)
Subiektywna opinia:
Prosty CMS to taki, który jest zoptymalizowany. Zaglądając w źródło strony już widać co jest od czego (jeśli postawimy na DIV'ach). XHTML + CSS + DIV ma za zadanie przede wszystkim oddzielenie kodu od treści, więc i CMS stałby się prostszy - nie wspominając o robotach indeksujących. Fakt faktem, że jest wyzwaniem przekodowanie zawartości, lecz jest to ogromnie opłacalna inwestycja czasu.
To, że skóry są na <tabelkach> nic tutaj nie zmienia, gdyż z góry narzucone 'wnętrza' themesów zostałyby wypełnione DIV'ami. Są one wiele bardziej podatne na CSS i łatwiej można nimi manipulować. Chociażby 'position' czy 'z-index' - na tym nie zbuduje się <tabelkowego> (efektywnego) thema. Za pomocą tych wartości, nawet Panel Administracyjny zyskałby na efektywności (.admin-message). Ponadto, komunikaty na stronie wyglądałyby o wiele lepiej.. :)
Podaję zoptymalizowany user_info_panel:<?php
/*-------------------------------------------------------+
| PHP-Fusion Content Management System
| Copyright (C) 2002 - 2008 Nick Jones
| http://www.php-fu...
+--------------------------------------------------------+
| Filename: user_info_panel.php
| Author: Nick Jones (Digitanium)
+--------------------------------------------------------+
| This program is released as free software under the
| Affero GPL license. You can redistribute it and/or
| modify it under the terms of this license which you
| can read by viewing the included agpl.txt or online
| at www.gnu.org/licen... Removal of this
| copyright header is strictly prohibited without
| written permission from the original author(s).
+--------------------------------------------------------*/
if (!defined("IN_FUSION")) { die("Access Denied"); }
if (iMEMBER) {
openside($userdata['user_name']);
$msg_count = dbcount("(message_id)", DB_MESSAGES, "message_to='".$userdata['user_id']."' AND message_read='0'AND message_folder='0'");
echo "<ul class='ep-nav'>";
echo "<li><a href='".BASEDIR."edit_profile.php' class='side'>".$locale['global_120']."</a></li>\n";
echo "<li><a href='".BASEDIR."messages.php' class='side'>".$locale['global_121']."</a></li>\n";
echo "<li><a href='".BASEDIR."members.php' class='side'>".$locale['global_122']."</a></li>\n";
if (iADMIN && (iUSER_RIGHTS != "" || iUSER_RIGHTS != "C")) {
echo "<li><a href='".ADMIN."index.php".$aidlink."' class='side'>".$locale['global_123']."</a></li>\n";
}
echo "<li><a href='".BASEDIR."setuser.php?logout=yes' class='side'>".$locale['global_124']."</a></li>\n";
echo "</ul>";
if ($msg_count) { echo "<div class='center'><strong><a href='".BASEDIR."messages.php' class='side'>".sprintf($locale['global_125'], $msg_count).($msg_count == 1 ? $locale['global_126'] : $locale['global_127'])."</a></strong></div>\n"; }
} else {
openside($locale['global_100']);
echo "<div class='center'>\n";
echo "<form name='loginform' method='post' action='".FUSION_SELF."'>\n";
echo "<div>".$locale['global_101']."</div>\n<div><input type='text' name='user_name' class='textbox' /></div>\n";
echo "<div>".$locale['global_102']."</div>\n<div><input type='password' name='user_pass' class='textbox' /></div>\n";
echo "<div><input type='checkbox' name='remember_me' value='y' title='".$locale['global_103']."' style='vertical-align:middle;' />\n";
echo "<input type='submit' name='login' value='".$locale['global_104']."' class='button' /></div>\n";
echo "</form>\n";
if ($settings['enable_registration']) {
echo "<p>".$locale['global_105']."</p>\n";
}
echo $locale['global_106']."\n</div>\n";
}
closeside();
?> Kliknij i zaczekaj na załadowanie kodu ...
..zoptymalizowany navigation_panel:<?php
/*-------------------------------------------------------+
| PHP-Fusion Content Management System
| Copyright (C) 2002 - 2008 Nick Jones
| http://www.php-fu...
+--------------------------------------------------------+
| Filename: navigation_panel.php
| Author: Nick Jones (Digitanium)
+--------------------------------------------------------+
| This program is released as free software under the
| Affero GPL license. You can redistribute it and/or
| modify it under the terms of this license which you
| can read by viewing the included agpl.txt or online
| at www.gnu.org/licen... Removal of this
| copyright header is strictly prohibited without
| written permission from the original author(s).
+--------------------------------------------------------*/
if (!defined("IN_FUSION")) { die("Access Denied"); }
openside($locale['global_001']);
echo "<ul class='ep-nav'>\n";
$result = dbquery("SELECT * FROM ".DB_SITE_LINKS." WHERE link_position<='2' ORDER BY link_order");
if (dbrows($result)) {
while($data = dbarray($result)) {
if (checkgroup($data['link_visibility'])) {
if ($data['link_name'] != "---" && $data['link_url'] == "---") {
echo "<div class='side-label'><strong>".$data['link_name']."</strong></div>\n";
} else if ($data['link_name'] == "---" && $data['link_url'] == "---") {
echo "<hr class='side-hr' />\n";
} else {
$link_target = ($data['link_window'] == "1" ? " target='_blank'" : "");
if (strstr($data['link_url'], "http://") || strstr($data['link_url'], "https://")) {
echo "<li><a href='".$data['link_url']."'".$link_target." class='side tip' title='".$data['link_name']."'>".$data['link_name']."</a></li>\n";
} else {
echo "<li><a href='".BASEDIR.$data['link_url']."'".$link_target." class='side tip' title='".$data['link_name']."'>".$data['link_name']."</a></li>\n";
}
}
}
}
} else {
echo $locale['global_002'];
}
echo "</ul>";
closeside();
?> Kliknij i zaczekaj na załadowanie kodu ...
..zoptymalizowany online_users_panel:<?php
/*-------------------------------------------------------+
| PHP-Fusion Content Management System
| Copyright © 2002 - 2007 Nick Jones
| http://www.php-fu...
+--------------------------------------------------------+
| Filename: online_users_panel.php
| Author: Nick Jones (Digitanium)
+--------------------------------------------------------+
| This program is released as free software under the
| Affero GPL license. You can redistribute it and/or
| modify it under the terms of this license which you
| can read by viewing the included agpl.txt or online
| at www.gnu.org/licen... Removal of this
| copyright header is strictly prohibited without
| written permission from the original author(s).
+--------------------------------------------------------*/
if (!defined("IN_FUSION")) { die("Access Denied"); }
$result = dbquery("SELECT * FROM ".DB_ONLINE." WHERE online_user=".($userdata['user_level'] != 0 ? "'".$userdata['user_id']."'" : "'0' AND online_ip='".USER_IP."'"));
if (dbrows($result)) {
$result = dbquery("UPDATE ".DB_ONLINE." SET online_lastactive='".time()."' WHERE online_user=".($userdata['user_level'] != 0 ? "'".$userdata['user_id']."'" : "'0' AND online_ip='".USER_IP."'")."");
} else {
$result = dbquery("INSERT INTO ".DB_ONLINE." (online_user, online_ip, online_lastactive) VALUES ('".($userdata['user_level'] != 0 ? $userdata['user_id'] : "0")."', '".USER_IP."', '".time()."')");
}
$result = dbquery("DELETE FROM ".DB_ONLINE." WHERE online_lastactive<".(time()-60)."");
openside($locale['global_010']);
$result = dbquery(
"SELECT ton.*, tu.user_id,user_name FROM ".DB_ONLINE." ton
LEFT JOIN ".DB_USERS." tu ON ton.online_user=tu.user_id"
);
$guests = 0; $members = array();
while ($data = dbarray($result)) {
if ($data['online_user'] == "0") {
$guests++;
} else {
array_push($members, array($data['user_id'], $data['user_name']));
}
}
echo $locale['global_011'].": ".$guests."\n";
echo "<div>".$locale['global_012'].": ".count($members)."</div>\n";
echo "<ul class='ep-nav'>";
if (count($members)) {
$i = 1;
while (list($key, $member) = each($members)) {
echo "<li><a href='".BASEDIR."profile.php?lookup=".$member[0]."' class='side'>".$member[1]."</a></li>";
if ($i != count($members)) { echo ",\n"; } else { echo "\n"; }
$i++;
}
}
echo "</ul>";
echo "<div>".$locale['global_014'].": ".number_format(dbcount("(user_id)", DB_USERS, "user_status<='1'"))."</div>\n";
if (iADMIN && checkrights("M") && $settings['admin_activation'] == "1") {
echo THEME_BULLET." <a href='".ADMIN."members.php".$aidlink."&status=2' class='side'>".$locale['global_015']."</a>";
echo ": ".dbcount("(user_id)", DB_USERS, "user_status='2'")."<br />\n";
}
$data = dbarray(dbquery("SELECT user_id,user_name FROM ".DB_USERS." WHERE user_status='0' ORDER BY user_joined DESC LIMIT 0,1"));
echo "<div>".$locale['global_016'].": <a href='".BASEDIR."profile.php?lookup=".$data['user_id']."' class='side'>".$data['user_name']."</a></div>\n";
closeside();
?> Kliknij i zaczekaj na załadowanie kodu ...
+ CSS:.ep-nav {
margin:0;
padding:0 0 8px 0;
list-style-type: none;
}
Kliknij i zaczekaj na załadowanie kodu ...
Pozdro,
~ zer0
|
|
|
|
Gander |
Dodany dnia 28.08.2009 15:59:54
|
Bywalec
Postów: 720 Pomógł: 37
Data rejestracji: 22.05.2005 23:17
|
@zer0, a jak właściwie liczysz tą optymalizację? Zdajesz sobie sprawę że transferowany jest tylko wynikowy kod HTML a nie źródła PHP? Pamiętaj że plik PHP może mieć kilkaset kilobajtów a zwrócony kod - tylko kilka bajtów.
Przeprowadziłem test na stronie zawierającej kilka newsów:
- Układ dwukolumnowy: 36,88 KB
- Układ jednokolumnowy: 37,95 KB
- Twój układ jednokolumnowy: 38,02 KB
Edytowane przez Gander dnia 28.08.2009 16:00:40
|
|
|
|
zer0 |
Dodany dnia 28.08.2009 16:52:29
|
Bywalec
Postów: 343 Pomógł: 1
Data rejestracji: 29.07.2004 23:20
|
Gander napisał/a:
@zer0, a jak właściwie liczysz tą optymalizację? Zdajesz sobie sprawę że transferowany jest tylko wynikowy kod HTML a nie źródła PHP? Pamiętaj że plik PHP może mieć kilkaset kilobajtów a zwrócony kod - tylko kilka bajtów.
Nie tylko można optymalizować HTML - przecież także jest pełno niepotrzebnych odwołań do DB. Liczę także style CSS, które będą w cash'u, a nie w źródle ładowane za każdym razem, gdy ktoś odwiedzi naszą stronę. Zauważ proszę ile jest powstawianych style="" - tego można uniknąć oszczędzając na łączach userów. Dla mnie jest to niechlujstwo programistyczne, które wymaga optymalizacji. Ta sama sytuacja tyczy się <br>anów - możesz mieć poprawny XHTML, lecz umieszczając w nim pełno "nowych linijek" jest on tak samo błędem co pogrubianie tekstu <b> - walidator W3C <br /> akceptuje, chodź nie powinien.
[EDIT] Zapomniałbym o fix'ie <div class="floatfix"></div> - tak samo jest błędem co marginesy na minusie. Tego shit'u jest pełno w skórach opartych o DIV'y.. :/
Gander napisał/a:
Przeprowadziłem test na stronie zawierającej kilka newsów:
- Układ dwukolumnowy: 36,88 KB
- Układ jednokolumnowy: 37,95 KB
- Twój układ jednokolumnowy: 38,02 KB
Przeprowadź proszę jeszcze testy pod kątem botów - który kod jest dla nich lepiej przyswajalny.
Wrzuć stronę z <tabelkami> na http://www.golden...ww-grafik/ lub http://www.forum....izacja.com - zobaczymy, jak zareagują rzesze programistów. Nie są to jedyne miejsca, gdzie otrzymasz konkretny feedback.
Pozdro,
~ zer0
Edytowane przez zer0 dnia 28.08.2009 16:57:15
|
|
|
|
Gander |
Dodany dnia 28.08.2009 17:30:13
|
Bywalec
Postów: 720 Pomógł: 37
Data rejestracji: 22.05.2005 23:17
|
Masz rację. Chodziło mi jednak o to że twoja "odchudzona" wersja jest większa od oryginału. Gdyby wyrzucić style do zewnętrznego pliku, nadal oryginał byłby mniejszy. Optymalizacja kodu nie zawsze oznacza zmniejszenie jego rozmiaru. Chciałbym po prostu żebyś nie uzależniał wielkości pliku PHP od jego wydajności. Sam staram się robić jak najbardziej XHTML-ową wersję moich modułów, ale z powodu braków w umiejętności kodowania DIV-ów bardzo często, niestety, muszę korzystać z tabel.
Przeczytałem jednak kiedyś gdzieś, że znaczniki typu <h> lub <strong> mają znaczenie dla pajączków internetowych: na przykład zaznaczają jakieś ważniejsze elementy - tego font-weight:bold nie robi. |
|
|
|
jantom |
Dodany dnia 28.08.2009 18:05:26
|
Weteran
Postów: 3460 Pomógł: 123
Data rejestracji: 31.03.2005 20:10
|
Teraz zaczynacie dywagacje na temat oddzielania zawartości od wyglądu. To już wymaga odrobiny wprawy w pisaniu kodu HMTL, a co ciekawsze, jest różnorodnie interpretowane przez różnych webmasterów. Niektóre elementy z kodu zer0 (dokładniej przyjrzałem się tylko news.php, wybacz) napisałbym jeszcze inaczej, np. uważam, że odpowiedniejszym od <div class='tbl2 bold'>".$news_subject."</div> byłoby <h1 class='tbl2 bold'>".$news_subject."</h1>
Div uznawany jest tylko za pudełko, a tytuł newsa zdecydowanie bardziej zasługuje na formę nagłówka.
W v7.01 i tak tych zmian nie uda się teraz wprowadzić - wedle tego, co czytam, wydanie uznane jest za zamknięte, teraz tylko błędy poprawiają.
Edytowane przez jantom dnia 28.08.2009 18:07:32
|
|
|
|
zer0 |
Dodany dnia 28.08.2009 18:10:18
|
Bywalec
Postów: 343 Pomógł: 1
Data rejestracji: 29.07.2004 23:20
|
Gander napisał/a:
Masz rację. Chodziło mi jednak o to że twoja "odchudzona" wersja jest większa od oryginału. Gdyby wyrzucić style do zewnętrznego pliku, nadal oryginał byłby mniejszy. Optymalizacja kodu nie zawsze oznacza zmniejszenie jego rozmiaru. Chciałbym po prostu żebyś nie uzależniał wielkości pliku PHP od jego wydajności. Sam staram się robić jak najbardziej XHTML-ową wersję moich modułów, ale z powodu braków w umiejętności kodowania DIV-ów bardzo często, niestety, muszę korzystać z tabel.
OK - mój bład - przepraszam.
Kodowanie na DIV'ach, w brew pozorom, nie jest trudne - widziałem niejednokrotnie, że niektórzy idą pod górkę, a wystarczą dwie linijki CSS i wszystko śmiga. Najgorzej jak 'webmajsterzy' tną layout z Photoshop'a, lub z generatorów OnLine i myślą, że mają poprawny XHTML. To nie prawda. Photoshop i generatory dodają atrybuty 'position:absolute' co w ogóle jest niepotrzebne - wtedy DIV traci na elastyczności. Najłatwiej i najszybciej jest samemu napisać XHTML i dopisać do niego arkusz CSS + docinać w Photoshop'ie poszczególne elementy. Wtedy masz 100% pewność, że wszystko będzie jak należny.
Wystarczy:
//XHTML
<div class="ramka1">treść</div>
<div class="ramka2">treść</div>
<div class="ramka3">treść</div>
//CSS
.ramka1, .ramka2, .ramka1 {width:33%;float;left}
Kliknij i zaczekaj na załadowanie kodu ... ...i nie trzeba kombinacji z <tabelkami>
Gander napisał/a:
Przeczytałem jednak kiedyś gdzieś, że znaczniki typu <h> lub <strong> mają znaczenie dla pajączków internetowych: na przykład zaznaczają jakieś ważniejsze elementy - tego font-weight:bold nie robi. Tak to prawda - <h> jest potęgą SEO. Jednakże wolę użyć <h5> zamiast <strong> z uwagi na to, iż GoogleBot wpierw łapie <h> a później <strong>. A po co <strong>menami śmiecić w kodzie? :)
@jantom: masz rację!
Poprawiłem ten błąd i usunąłem wcześniejszy nagłówek <h3>, a 'pudełko' zastąpiłem tym samym H3 zamiast H1.. :)
<h1> - pozostawiłbym na LOGO
<h2> - na nazwy PANELI
<h3> - NEWSY, KATEGORIE galerii, linków itp
Pozdro,
~ zer0
Edytowane przez zer0 dnia 28.08.2009 18:36:25
|
|
|
|
jantom |
Dodany dnia 28.08.2009 18:19:05
|
Weteran
Postów: 3460 Pomógł: 123
Data rejestracji: 31.03.2005 20:10
|
zer0 napisał/a:
Gander napisał/a:
Przeczytałem jednak kiedyś gdzieś, że znaczniki typu <h> lub <strong> mają znaczenie dla pajączków internetowych: na przykład zaznaczają jakieś ważniejsze elementy - tego font-weight:bold nie robi. Tak to prawda - <h> jest potęgą SEO. Jednakże wolę użyć <h5> zamiast <strong> z uwagi na to, iż GoogleBot wpierw łapie <h> a później <strong>. A po co <strong>menami śmiecić w kodzie?
Teraz mamy do czynienia z tym, o czym chwilę wcześniej pisałem - różnorodne interpretacje użycia znaczników. Dla mnie nagłówek, to nagłówek - rzecz święta, która nie może pojawić się w tekście jako podkreślenie wagi czegoś - w przeciwieństwie do stronga. Przydałaby nam się jeszcze osoba, która miała do czynienia z przyglądarkami dla osób niewidomych (ze względu na interpretację głosową widzianego tekstu)/miałaby hopla na punkcie accessbilty.
Edytowane przez jantom dnia 28.08.2009 18:22:55
|
|
|
|
zer0 |
Dodany dnia 28.08.2009 18:21:17
|
Bywalec
Postów: 343 Pomógł: 1
Data rejestracji: 29.07.2004 23:20
|
jantom napisał/a:
Teraz przydałaby nam się jeszcze osoba, która miała do czynienia z przyglądarkami dla osób niewidomych/miałaby hopla na punkcie accessbilty.
Większej palpitacji dostałby od tych <tabelek>, niż od <h5>.
To samo się tyczy braku <label> w wielu miejscach.. ;)
[EDIT]
Wpadł mi do głowy OH, który po zalogowaniu użytkownika zmienia <h5> na <strong>.. :)
Pozdro,
~ zer0
Edytowane przez zer0 dnia 28.08.2009 18:33:22
|
|
|
|
Chemikpil |
Dodany dnia 28.08.2009 19:31:18
|
Bywalec
Postów: 999 Pomógł: 54
Data rejestracji: 04.05.2008 21:46
|
zer0 napisał/a:
Poprawiłem ten błąd i usunąłem wcześniejszy nagłówek <h3>, a 'pudełko' zastąpiłem tym samym H3 zamiast H1..
Tak dążąc już do doskonałości to między h3 a h1 jest różnica ale nie w wyglądzie. h1 to pierwszy tytuł, a kolejne numerki to jego kolejne podtytuły. To tak jak byś miał rozdział, podrozdział, itd. Jest to również zasada której W3C nie wytyka webmasterom, a oni dają h3 zamiast h1 dlatego że h1 jest za duże. No ale to tak już na marginesie.
|
|
|
|
zer0 |
Dodany dnia 28.08.2009 20:19:45
|
Bywalec
Postów: 343 Pomógł: 1
Data rejestracji: 29.07.2004 23:20
|
Chemikpil napisał/a:
Tak dążąc już do doskonałości to między h3 a h1 jest różnica ale nie w wyglądzie. h1 to pierwszy tytuł, a kolejne numerki to jego kolejne podtytuły. To tak jak byś miał rozdział, podrozdział, itd. Jest to również zasada której W3C nie wytyka webmasterom, a oni dają h3 zamiast h1 dlatego że h1 jest za duże. No ale to tak już na marginesie.
Przecież napisałem we wcześniejszym poście:
zer0 napisał/a:
<h1> - pozostawiłbym na LOGO
<h2> - na nazwy PANELI
<h3> - NEWSY, KATEGORIE galerii, linków itp
Mnie tego pisać nie musisz..
Pozdro,
~ zer0
|
|
|
|
Riklaunim |
Dodany dnia 29.08.2009 00:51:01
|
Początkujący
Postów: 244
Data rejestracji: 07.08.2004 10:53
|
bartek124 napisał/a:
Przejście na divy byłoby dobrym krokiem, ale raczej nie teraz. Nadal wiele stron ma wszystko na tabelkach, wielu webmasterów nie pojmuje divów, są z nimi kłopoty w różnych przeglądarkach no i jest z nimi dużo więcej pracy, a to raczej burzy ideę prostego CMS'a.
Nie zgadzam się z tym że:
- są problemy z obsługą DIVów i XHTML w przeglądarkach
- jest z nimi dużo więcej pracy
To nie stopień trudności nowoczesnych szablonów stron utrudnia ich przyswajanie przez młodych webmasterów, lecz skrypty stosujące przestarzałe rozwiązania, które przyuczają ich do starych rozwiązań.
Edytowane przez Riklaunim dnia 29.08.2009 00:51:44
|
|
|
|
Chemikpil |
Dodany dnia 29.08.2009 11:25:50
|
Bywalec
Postów: 999 Pomógł: 54
Data rejestracji: 04.05.2008 21:46
|
Nie chodzi o to że łatwiej je wstawić i usunąć. Bardziej chodzi o ich stylizacje, pozycjonowanie itp. W tabelkach stworzysz sobie wiersz i każda komórka będzie koło siebie, a w divach już trzeba bawić się z przyleganiem, co do teraz dla wielu jest utrapieniem. Spotkałem także takich co nie potrafią wyśrodkować diva, nie wspomnę tu o osobach które wciąż używają <center> ... eh. I chociaż nam to przychodzi z dziecinną łatwością to inni mają z tym wielkie problemy.
Proponuje jednak już wrócić do tematu, który dotyczy odchudzenia PF.
Edytowane przez Chemikpil dnia 29.08.2009 11:26:14
|
|
|