Changes and tweaks for speed.

Because every microsecond counts! :P
These changes are based on information from:
http://phpbench.com/
http://stackoverflow.com/questions/482202/is-there-a-performance-benefit-single-quote-vs-double-quote-in-php
This commit is contained in:
green-ponies (jgen) 2012-01-11 15:08:27 -05:00
parent 0b03f91f1c
commit ea15574226
3 changed files with 47 additions and 42 deletions

View File

@ -292,17 +292,17 @@ class Database {
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db_proto = $this->db->getAttribute(PDO::ATTR_DRIVER_NAME); $db_proto = $this->db->getAttribute(PDO::ATTR_DRIVER_NAME);
if($db_proto == "mysql") { if($db_proto === "mysql") {
$this->engine = new MySQL(); $this->engine = new MySQL();
} }
else if($db_proto == "pgsql") { else if($db_proto === "pgsql") {
$this->engine = new PostgreSQL(); $this->engine = new PostgreSQL();
} }
else if($db_proto == "sqlite") { else if($db_proto === "sqlite") {
$this->engine = new SQLite(); $this->engine = new SQLite();
} }
else { else {
die("Unknown PDO driver: $db_proto"); die('Unknown PDO driver: '.$db_proto);
} }
if(isset($cache_dsn) && !empty($cache_dsn)) { if(isset($cache_dsn) && !empty($cache_dsn)) {
@ -345,8 +345,8 @@ class Database {
return $stmt; return $stmt;
} }
catch(PDOException $pdoe) { catch(PDOException $pdoe) {
print "Message: ".$pdoe->getMessage(); print 'Message: '.$pdoe->getMessage();
print "<p>Error: $query"; print '<p>Error: '.$query;
exit; exit;
} }
} }

View File

@ -194,12 +194,12 @@ class Image {
} }
if(count($tags) == 0) { if(count($tags) == 0) {
$row = $database->get_row("SELECT images.* FROM images WHERE images.id $gtlt {$this->id} ORDER BY images.id $dir LIMIT 1"); $row = $database->get_row('SELECT images.* FROM images WHERE images.id '.$gtlt.' '.$this->id.' ORDER BY images.id '.$dir.' LIMIT 1');
} }
else { else {
$tags[] = "id$gtlt{$this->id}"; $tags[] = 'id'. $gtlt . $this->id;
$querylet = Image::build_search_querylet($tags); $querylet = Image::build_search_querylet($tags);
$querylet->append_sql(" ORDER BY images.id $dir LIMIT 1"); $querylet->append_sql(' ORDER BY images.id '.$dir.' LIMIT 1');
$row = $database->get_row($querylet->sql, $querylet->variables); $row = $database->get_row($querylet->sql, $querylet->variables);
} }
@ -229,14 +229,15 @@ class Image {
*/ */
public function get_tag_array() { public function get_tag_array() {
global $database; global $database;
$cached = $database->cache->get("image-{$this->id}-tags"); $tmp = 'image-'.$this->id.'-tags';
$cached = $database->cache->get($tmp);
if($cached) return $cached; if($cached) return $cached;
if(!isset($this->tag_array)) { if(!isset($this->tag_array)) {
$this->tag_array = $database->get_col("SELECT tag FROM image_tags JOIN tags ON image_tags.tag_id = tags.id WHERE image_id=:id ORDER BY tag", array("id"=>$this->id)); $this->tag_array = $database->get_col("SELECT tag FROM image_tags JOIN tags ON image_tags.tag_id = tags.id WHERE image_id=:id ORDER BY tag", array("id"=>$this->id));
} }
$database->cache->set("image-{$this->id}-tags", $this->tag_array); $database->cache->set($tmp, $this->tag_array);
return $this->tag_array; return $this->tag_array;
} }

View File

@ -21,6 +21,10 @@ function html_escape($input) {
* @retval int * @retval int
*/ */
function int_escape($input) { function int_escape($input) {
/*
Side note, Casting to an integer is FASTER than using intval.
http://hakre.wordpress.com/2010/05/13/php-casting-vs-intval/
*/
return (int)$input; return (int)$input;
} }
@ -56,13 +60,13 @@ function sql_escape($input) {
function bool_escape($input) { function bool_escape($input) {
$input = strtolower($input); $input = strtolower($input);
return ( return (
$input == "y" || $input === "y" ||
$input == "yes" || $input === "yes" ||
$input == "t" || $input === "t" ||
$input == "true" || $input === "true" ||
$input == "on" || $input === "on" ||
$input == 1 || $input === 1 ||
$input == true $input === true
); );
} }
@ -86,7 +90,7 @@ function parse_shorthand_int($limit) {
return (int)$limit; return (int)$limit;
} }
if(preg_match('/^([\d\.]+)([gmk])?b?$/i', "$limit", $m)) { if(preg_match('/^([\d\.]+)([gmk])?b?$/i', (string)$limit, $m)) {
$value = $m[1]; $value = $m[1];
if (isset($m[2])) { if (isset($m[2])) {
switch(strtolower($m[2])) { switch(strtolower($m[2])) {
@ -118,7 +122,7 @@ function to_shorthand_int($int) {
return sprintf("%.1fKB", $int / 1024); return sprintf("%.1fKB", $int / 1024);
} }
else { else {
return "$int"; return (string)$int;
} }
} }
@ -131,7 +135,7 @@ function to_shorthand_int($int) {
function autodate($date, $html=true) { function autodate($date, $html=true) {
$cpu = date('c', strtotime($date)); $cpu = date('c', strtotime($date));
$hum = date('F j, Y', strtotime($date)); $hum = date('F j, Y', strtotime($date));
return ($html ? "<time datetime='$cpu'>$hum</time>" : $hum); return ($html ? '<time datetime='.$cpu.'>'.$hum.'</time>' : $hum);
} }
@ -182,17 +186,17 @@ function make_link($page=null, $query=null) {
} }
if(is_null($query)) { if(is_null($query)) {
return str_replace("//", "/", "$base/$page"); return str_replace("//", "/", $base.'/'.$page );
} }
else { else {
if(strpos($base, "?")) { if(strpos($base, "?")) {
return "$base/$page&$query"; return $base .'/'. $page .'&'. $query;
} }
else if(strpos($query, "#") === 0) { else if(strpos($query, "#") === 0) {
return "$base/$page$query"; return $base .'/'. $page . $query;
} }
else { else {
return "$base/$page?$query"; return $base .'/'. $page .'?'. $query;
} }
} }
} }
@ -261,14 +265,14 @@ function make_http($link) {
function make_form($target, $method="POST", $multipart=False, $form_id="", $onsubmit="") { function make_form($target, $method="POST", $multipart=False, $form_id="", $onsubmit="") {
global $user; global $user;
$auth = $user->get_auth_html(); $auth = $user->get_auth_html();
$extra = empty($form_id) ? '' : " id='$form_id'"; $extra = empty($form_id) ? '' : 'id="'. $form_id .'"';
if($multipart) { if($multipart) {
$extra .= " enctype='multipart/form-data'"; $extra .= " enctype='multipart/form-data'";
} }
if($onsubmit) { if($onsubmit) {
$extra .= " onsubmit='$onsubmit'"; $extra .= ' onsubmit="'.$onsubmit.'"';
} }
return "<form action='$target' method='$method'$extra>$auth"; return '<form action="'.$target.'" method="'.$method.'" '.$extra.'>'.$auth;
} }
/** /**
@ -278,7 +282,7 @@ function make_form($target, $method="POST", $multipart=False, $form_id="", $onsu
function theme_file($filepath) { function theme_file($filepath) {
global $config; global $config;
$theme = $config->get_string("theme","default"); $theme = $config->get_string("theme","default");
return make_link("themes/$theme/$filepath"); return make_link('themes/'.$theme.'/'.$filepath);
} }
@ -411,12 +415,12 @@ function _count_execs($db, $sql, $inputarray) {
*/ */
function get_theme_object(Extension $class, $fatal=true) { function get_theme_object(Extension $class, $fatal=true) {
$base = get_class($class); $base = get_class($class);
if(class_exists("Custom{$base}Theme")) { if(class_exists('Custom'.$base.'Theme')) {
$class = "Custom{$base}Theme"; $class = 'Custom'.$base.'Theme';
return new $class(); return new $class();
} }
elseif ($fatal || class_exists("{$base}Theme")) { elseif ($fatal || class_exists($base.'Theme')) {
$class = "{$base}Theme"; $class = $base.'Theme';
return new $class(); return new $class();
} else { } else {
return false; return false;
@ -517,14 +521,14 @@ function get_base_href() {
$possible_vars = array('SCRIPT_NAME', 'PHP_SELF', 'PATH_INFO', 'ORIG_PATH_INFO'); $possible_vars = array('SCRIPT_NAME', 'PHP_SELF', 'PATH_INFO', 'ORIG_PATH_INFO');
$ok_var = null; $ok_var = null;
foreach($possible_vars as $var) { foreach($possible_vars as $var) {
if(substr($_SERVER[$var], -4) == '.php') { if(substr($_SERVER[$var], -4) === '.php') {
$ok_var = $_SERVER[$var]; $ok_var = $_SERVER[$var];
break; break;
} }
} }
assert(!empty($ok_var)); assert(!empty($ok_var));
$dir = dirname($ok_var); $dir = dirname($ok_var);
if($dir == "/" || $dir == "\\") $dir = ""; if($dir === "/" || $dir === "\\") $dir = "";
return $dir; return $dir;
} }
@ -544,10 +548,10 @@ function warehouse_path($base, $hash, $create=true) {
$ab = substr($hash, 0, 2); $ab = substr($hash, 0, 2);
$cd = substr($hash, 2, 2); $cd = substr($hash, 2, 2);
if(WH_SPLITS == 2) { if(WH_SPLITS == 2) {
$pa = "$base/$ab/$cd/$hash"; $pa = $base.'/'.$ab.'/'.$cd.'/'.$hash;
} }
else { else {
$pa = "$base/$ab/$hash"; $pa = $base.'/'.$ab.'/'.$hash;
} }
if($create && !file_exists(dirname($pa))) mkdir(dirname($pa), 0755, true); if($create && !file_exists(dirname($pa))) mkdir(dirname($pa), 0755, true);
return $pa; return $pa;
@ -949,7 +953,7 @@ function _get_page_request() {
global $config; global $config;
$args = _get_query_parts(); $args = _get_query_parts();
if(count($args) == 0 || strlen($args[0]) == 0) { if( empty($args) || strlen($args[0]) === 0) {
$args = explode('/', $config->get_string('front_page')); $args = explode('/', $config->get_string('front_page'));
} }
@ -1019,7 +1023,7 @@ function _start_cache() {
$_cache_hash = md5($_SERVER["QUERY_STRING"]); $_cache_hash = md5($_SERVER["QUERY_STRING"]);
$ab = substr($_cache_hash, 0, 2); $ab = substr($_cache_hash, 0, 2);
$cd = substr($_cache_hash, 2, 2); $cd = substr($_cache_hash, 2, 2);
$_cache_filename = "data/$ab/$cd/$_cache_hash"; $_cache_filename = 'data/'.$ab.'/'.$cd.'/'.$_cache_hash;
if(!file_exists(dirname($_cache_filename))) { if(!file_exists(dirname($_cache_filename))) {
mkdir(dirname($_cache_filename), 0750, true); mkdir(dirname($_cache_filename), 0750, true);
@ -1038,7 +1042,7 @@ function _start_cache() {
} }
else { else {
header("Content-type: text/html"); header("Content-type: text/html");
header("Last-Modified: $gmdate_mod"); header('Last-Modified: '.$gmdate_mod);
$zdata = @file_get_contents($_cache_filename); $zdata = @file_get_contents($_cache_filename);
if(CACHE_MEMCACHE) { if(CACHE_MEMCACHE) {
$_cache_memcache->set($_cache_hash, $zdata, 0, 600); $_cache_memcache->set($_cache_hash, $zdata, 0, 600);
@ -1086,8 +1090,8 @@ function _end_coverage() {
if(!file_exists("data/coverage")) mkdir("data/coverage"); if(!file_exists("data/coverage")) mkdir("data/coverage");
$n = 0; $n = 0;
$t = time(); $t = time();
while(file_exists("data/coverage/$t.$n.log")) $n++; while(file_exists('data/coverage/'.$t.'.'.$n.'.log')) $n++;
file_put_contents("data/coverage/$t.$n.log", serialize(xdebug_get_code_coverage())); file_put_contents('data/coverage/'.$t.'.'.$n.'.log', serialize(xdebug_get_code_coverage()));
} }
} }
?> ?>