何も分からなかったことが分かった(WPテーマ)
Posted on 2009年11月29日 | 6 Comments|
WordPress テーマを新しくしたのはいいんだけど
いろいろと困った問題が出てきた。
これらの問題の原因がテーマにあることだけは確かなんだけど
原因自体がなんなのかさっぱり分からない。
テーマの作り方を検索してみても情報がバラバラで
いろいろ試したんだけどやっぱりうまくいかない。
かなりお手上げ状態
とりあえずソースを晒しながら考えてみる。
長いよ。そして解決してないよ…orz
3つの現象は全部同じ原因なんじゃないかと安易に考えていたんだけど
いろいろ試しているうちに原因が別だということが分かった。
そもそも Stack overflow って何よ?ってのを調べると、
プログラムが動作する際に確保される一時メモリーが足りないってことらしい。
プログラムの中で呼び出す関数が多すぎるって意味。
原因として一番疑うべきは無限ループで、
次がスタック上に巨大な配列を確保しようとしている、
他にも関数呼び出しの階層数が深すぎるっていうのがあるらしい。
IEのエラーでは「Stack overflow at line:870」と出ていたので
メモリー足りないよーって言ってるのは
wp-includes/js/prototype.js の870行目なんだけど、
prototype.jsを何に使っているのか分からない…orz
ざっと見たところあらゆるものが使ってるようで、
よく重くなる頭の痛いブログパーツを1つ非表示にするだけで
Stack overflow は出なくなる。
でもブログパーツを外して対応するのは望ましくないっていうか、
今後ブログパーツとか増やせないしっていう別の頭痛がしてくるので
できればテーマ側を修正して対応したい。
無限ループってことはどこか endif を忘れているのかな?と思ったけど
そういうところは見当たらない。
巨大な配列は………確保しようとしてるかもなぁ…。
ウィジェット6つだし;
よく分からないけどとりあえず前のテーマでは平気だったんだから
前のテーマとの違いを考えてみる。
まず今までのテーマでは2つのウィジェットを使っていて、
新しくなったテーマでは6つのウィジェットを使っている。
問題が出るとしたらウィジェットだろうなということで、
functions.php を開いてウィジェットを全部コメントアウトしてプレビューする。
テーマに直書きしてあるサイドバーの中身が読み込まれるだけで
ウィジェットは動かない。
この状態ではIEでも Stack overflow は出ない。
でも Custom Smilies でコメント欄にスマイリーを入力することはできなかった。
この状態からウィジェットを2つ呼び出すようにしてみる。
このときにコメントアウトを外したコードは以下。
[php]register_sidebar(array(
‘name’=>’sidebar_full’,
‘before_widget’ => ‘
この記事は 2009年11月29日日曜日 の 6:36 AM に書きました。
この記事のフィードはRSS 2.0で購読できます。
11月 29th, 2009 on 11:20 AM
IE6で確認してみましたよ。
セキュリティ警告表示は以前のまま表示されます。
ブラウザーバージョンアップの表示タイミングでセキュリティ警告が出るので、画像もしくは、ブラウザーのチェックしているライブラリー内でSSLサイト関係が存在するのかも。
また、セキュリティ警告後、「続行」をクリックするとブラウザーがそのまま固まります。
あと、ブラウザーバージョンアップの表示が以前のレイアウトより数秒遅く表示されるようになっています。
ちなみに、Pen4メモリー1G積んでいるwin2000で確認したので、メモリー不足は考えにくいです。
javascript系で悪さをしているものがあるのかも。
以上、ご参考になればと思います。
参考になるかどうかわかりませんが、
pittaの大きいサイズのものを私も以前自分のブログに張ってみましたが、呼出し後のサイズ定義(pitta側のスクリプト)がおかしいのか、うまくサイズを収められなくて諦めたことがあります。どうも広告のサイズより大きいサイズを指定しているっぽい。
意外に広告のjavascriptっておかしなことをやっていることが多いです。
11月 29th, 2009 on 11:42 PM
>AquaSunネットサービスブログさん
動作確認ありがとうございますm(_ _”m)ペコリ
警告が出るだけならまだしも、固まるとなると大問題ですね;
以前のレイアウトよりファイルサイズは小さくなってるんですけど
透過pngをサポートしてないIE6での表示は何かと問題があるのかもしれません。
IE6用にcss作ればいいんでしょうけど………
うっ…気が重い…orz
pittaの大きいサイズでサイズ定義の問題ですか。
なるほど。
flashの広告の方は怪しいと思ってましたけど、バナー広告に問題があるとは思いませんでした。
そういうこともあるんですねぇ。
原因を突き止めるまで時間がかかりそうです><。
貴重な情報ありがとうございます!
11月 29th, 2009 on 4:33 PM
何もお役に立てないのですが、IETesterのIE6で確認しましたがエラーを1つ吐くだけで正常に見ることが出来ます。
ただスマイリーは表示されません・・( ̄  ̄;)
実は私も表示出来ない部分がたくさんあってネット検索の毎日です。
さしあたっては、アバターが表示されない。
表示されるテーマはあるんですけど、現在のテーマが出来なくて困ってます。
11月 29th, 2009 on 11:45 PM
>綾波さん
あれ。IETester動きました?
もしやあたしのマシンスペックが低すぎるのか…orz
パーツをごにょごにょやりながらリトライしてみます。
あ、スマイリーの入力欄は今表示させてません。
動かないので^^;
アバターの表示ですか。
うーん。
テーマが違うだけで動かなくなる場所っていろいろあるんですね。
難しいっすね><;
11月 30th, 2009 on 2:42 AM
ネット関連の事については分かりませんが、プログラミングでアセンブラレベルだと、スタックというのはレジスタの内容を一時的に積んでおく「棚」のようなものでして,
PUSH [レジスタ1]
PUSH [レジスタ2]
・
・
・
POP [レジスタ2]
POP [レジスタ1]
と、対で使う物です。
ちなみにサブルーチンコールの際にも、呼び出し元のアドレスをスタックに積むので、RETURNで戻らないとスタックに積みっぱなしのアドレスが残り、これを繰り返すとスタックがオーバーフローおこす事になります。
あまり参考にはならないと思いますが、一応参考まで。
11月 30th, 2009 on 7:38 PM
>cyahさん
一緒に考えて下さってありがとうございますm(_ _”m)ペコリ
すみません、、、全く分かりません…orz
returnで戻らないとっていうのは、endifで終わらせないとって感じですかね。
うーんうーん…。
閉じ忘れはなさそうなんだけど…。
スタックオーバーフローは消えたんですけど、IE7以前で固まるのは直せないでいるんですよね。
困ったなぁ><;