PHPのコード最適化のエントリがあったので軽く読んでみた。
たくさんありすぎてなんともいえませんが、意識するようにはしたいなぁ。
33. if (strlen($foo) < 5) を調べたいなら if (!isset($foo{5})) と書くと速い。
これは知らなかった。
20番ぐらいまでは割とよく使いそうな感じなのでメモ。
- static にできるメソッドは static として宣言しよう。(4倍速い)
- echo の方が print より速い。
- echo ‘文’,'字’; (カンマ区切り)の方が、’文’.'字’ (ドット連結)より速い。
- ループの最大値は、ループ「内」ではなく「前」にセットしておこう。
- 大きい配列のような変数は unset ()してメモリを解放しよう。
- マジックメソッド(例: __get, __set, __autoload)は使用を避けよう。
- require_once はハイコストなのです。
- include や require でファイルはフルパスで指定しよう。
- スクリプト開始時間は time() でなく $_SERVER[’REQUEST_TIME’] で取得。
- 可能であれば、正規表現より strncasecmp、strpbrk、stripos を使おう。
- strtr(str_replace の4倍速い) > str_replace > preg_replace の順に速い。
- 引数に配列、文字列両方を受け入れるような関数は避け、個別に関数化しよう。
- if をたくさん使ってるなら switch を活用しよう。(訳注:ってことでいい?)
- @によるエラー制御はすんごく遅い。
- Apache の mod_deflate(Apache2系) を ON にしておこう。(No.42 参照)
- 処理が終わったらデータベースの接続は切っておこう。
- $row[’id’] は $row[id] より7倍速い。
- エラーメッセージはハイコスト。
- for 文の条件式には count($array) のような関数をいれない。(変数に格納)
- メソッド内ではローカル変数をインクリメントするのが一番速い。
13が気になるなぁ。
switchはあんまり使わないからなぁ。
可読性が悪くならないようにうまいこと両立させていきたいな
CakePHPの1.2はシェルの機能が用意されているらしいので、使ってみた。
下のサイトさんを参考に、さくらサーバで動かしてみた。
・Sun Limited Mt
・くそみそテクニック
app/vendors/shells/の配下にphpファイルを作って、Shellクラスを継承すればOKみたい。
とりあえずtest.phpにした。
あとはcronの設定をさくらのcronタブから行うのですが、けっこう苦労した。
こんな感じに絶対パスで指定したら、うまく動いてくれた。
しかし、Fatal error: Class ‘String’ not found ってエラーが出た。
調べらcake1.2のバグらしい。
すでに修正はされてるようでここのソースにしたら無事うごいた。
ちなみにmain以外のメソッドを呼びたい場合は、
って書けば動く。
idolPicsのアイドルに対応して、動画を収集するサイトも作ってみた。
idolPicsに登録してあるアイドルの動画を、youtubeのAPIを利用して収集してます。
と、こんな感じに取得しています。
クリックに対応して、また順位を変更させたいのですが、まだできてないです。
FireFoxだとobjectタグでonclickが動くのでいけそうですが、それ以外のブラウザでできないのでまだ未実装です。
親のDIVにイベントを設定してもとれないし。
なんかいい方法ないかなぁ。
なので現状はただ動画を表示するだけのサイトです。
これから改良をしていきますが、picsと連動してるのでとりあえず発表。
画像を表示して、その下にテキストを入れた物を1セットとして考え、それをずらーっと表示させる方法ってのを考えました。
ちょっと言葉での説明は難しいのですが
こんな感じです。
で、仕様するHTMLはこんな感じにしました。
dlを使ってのマークアップでも出来るかなーって思ったんですが、どうもうまく行かないので、divで囲う事にしました。単純に考えて、このdivをfloatしてあげればいいのかなーって思ったんですが、それだと大元のセンター揃えが外れてしまいました。
あくまでセンターに揃えたまま、画像とテキストのセットを横に並べたい。
どうしたもんかなーと思い、調べた結果見つけたやり方がコチラ。
こんな感じで書いてあげると、センター揃えを維持したまま、画像+テキストのセットが横にずらーっと並びます。
divをdisplay:inline;でインライン要素にして横並びにしてあげて、その中を囲うspanにdisplay:table-cell;とdisplay:inline-block;でインライン要素の中での横幅を指定してあげる事によって、テキストが画像の下に回りこむって訳です。
ギャラリーサイトなんかで使えそうな手法ですね。
大元のセンター揃えと可変っていう条件が無かったら、他にも方法はあるんですけどね。
どんなサイトを作っていても、必ず使うのが新着情報や更新情報などを載せる部分。
通常トップページにあると思いますが、これらをマークアップする時にdt ddを使ってデザインする方法があるのですが、どうも今までのやり方だと気に入らない部分があって、liなんかを使って作る場合もあったのですが、今日この記事をみて目から鱗が落ちました。
今度からこれを使おうと決めたので、メモ。
HTMLはこんな感じです。
これに以下のCSSを当ててあげます。
横方向の指定にemを使うって部分と、ddにborder指定をして、文字のスペースをpaddingで取るって所で目から鱗が落ちました。
ステキです。
HTMLとCSSは今までの経験で書いてきた範囲でなんとかなってる部分が多いので、最近新しい発見って中々無いのですが、やっぱりまだまだ勉強が足りませんね。精進しよっと。