iOSというかSafari の Submitが遅いときの罠

知ってる人は知ってるかもだけど、私は完全にハマってしまったのでメモがてらに。

まずそもそもApple嫌いなのでMacなんぞ使ってないのですが※、営業さんから、納品したシステムのページが異様に遅いっす〜って報告がきたことからスタート。

自分のWin環境で試してみたら全然再現できない。
ので、隣のハーフでMacカブれっ子からMac book Air借りて検証したら確かに遅い。なんやこれ。遅すぎやろ。
あと、ハーフだからMacが似合う。ズルいですね。って関係ないか。

ということで、結論を言うと、form /form を3,000個並べたら全体的に遅くなる(ただしMacに限る)ということが判明。
Winはそんなことないので気にせずに選択肢をオラオラと並べてform→submitをゴリゴリと並べてた訳ですけど、Mac、お前はダメだ。

ということで、選択肢の表示を100件単位とかに区切ってページングしてやることでクリアできそうです。メンドクセ。

という技術的ブログを2年ぶりにエントリー。もう1年が終わるのか。。。早すぎだろ。

スマホに関しては、XPeria Z4がカス過ぎて、動作検証用だったはずのiPhone6が常用に昇格中という罠。今の開発はみんな大変なんですね。

MTOSでEntryIDを指定して、他のブログからデータを持ってくる、データベース的な使い方

自分用備忘録です。


<$MTEntryHogeHoge$>


<$MTEntryTitle$>


とかやると、他のブログを参照できる。カスタムフィールドで他のブログのエントリーIDを入力できる欄を作っておいて、こんな感じでデータを取得しにいけるので、MTOSでRightFieldsのLinkedEntry的な組み方することが可能になる。便利。

朝になったら忘れてそう。。。

さくらのレンタルサーバーでphpファイルに拡張子無しでアクセスできなくなってしまった場合の対応について(404エラー)

ひどいもので、さくらのサーバー上で一部のサーバーではメンテナンスが入ってからapacheのバージョンが上がり、phpファイルに拡張子無しでアクセスできなくなってしまう(404エラーになる)状況に陥りました。
いつものごとくつながらないコールセンターという恒例行事をつつがなく済ませた後(事務所にあの呼び出しメロディを鳴り響かせてすみません)、何も分かっていないオペレーターから技術担当に回してもらって解決しました。



結論は、、、

htaccessにてphpMIMEにAddtypeする って対応でOKでした。



具体的には以下の一行をhtaccessに追記してあげて下さい。htaccessが無い場合は新規作成ですね。

AddType text/html .php




最初、この辺りが怪しいと思って、以下のページを参考にしていたのですけども、一行目が余計だった模様。
http://heteml.jp/support/faq/407.html


はるか昔、“最後に改行を入れる”“アスキーモードで転送する”でhtaccessにハマったことを思い出しました。新規設置の方はお気をつけ下さい。

さくらのサポート、末端はやっぱしょうがないけど、技術につないでもらうと安定した対応で、まあしょうがないかなーという感想です。
これからも使います。他社契約で管理だけ回ってきてるのも合わせて、都合、10台ほど使わせて頂いているんですよね。。。良かった良かった。

キャッシュを書き出したいとき用(PHP)

$cacheDir = '/home/hoge/hoge/';
$cid = 'hoge.inc';

// 指定id のキャッシュが存在するかどうか
if(file_exists($cacheDir.$cid) && filemtime($cacheDir.$cid)> strtotime('-1 Hour')) {
readfile($cacheDir.$cid);
} else {
$filepath = $cacheDir.$cid; // ファイルへのパスを変数に格納
$fp = fopen($filepath, "w"); // 新規書き込みモードで開く
@fwrite( $fp, $string, strlen($string) ); // ファイルへの書き込み
fclose($fp);
//ファイルへの書き込みは終了

//現在のファイル内容を表示
readfile($filepath);
}

ほぼ一年経っとる。。。備忘録として

さくらVPS上にPSGIで稼動するMTを構築しようとしているハナシ。

http://www.skyarc.co.jp/engineerblog/entry/movabletype_psgi_mysql.html

を参考にすれども、

/etc/init.d/iptables restart でコケる。

http://fnya.cocolog-nifty.com/blog/2013/02/vps-iptables-0c.html
iptables の設定のとこを参照して先に進めたっぽい。

追記:
やっぱこっち
http://d.hatena.ne.jp/kobakey/20101205/1291562603

EC-CUBEでテンプレートを弄るだけで規格毎に在庫有無とか価格とかを取得する方法見つけた

新たに作るEC-CUBE使ったECサイトの制作中なわけですが、例によってワンクリックでカゴに入れて欲しいので規格(サイズとか)ごとにカゴに入れるボタンを設置したかったんです。
これまではviewを弄ったりclassを弄ったりしていたのですが、一度変数を全部取得してチェックしてみたら、なんかjavascriptに規格毎の情報が入ってるんですよね。

その対象の変数がこいつ→“tpl_javascript

tpl_javascriptにstock_findとかprice02とかが規格毎に入ってた。jsonjavascriptで。
いらんscriptをmb_substrとかでコソギ落とすとこんな感じに。


<!--{php}-->

$classObj = json_decode(mb_substr($this->get_template_vars('tpl_javascript'), 18, strripos($this->get_template_vars('tpl_javascript'),';function lnOnLoad()')-18, 'UTF-8'));

<!--{/php}-->


$classObj -> [classcategory_id] とかで取得できます。中身に手を入れないから色々都合良いかも。
但し処理は若干重くなるかな。


※追記
↑だけだと実装をPHPで展開するハメになるので、Smartyの関数としてassignして使う用にも拡張してみた。

<table id="classtable">

<tr>

<th width="110">サイズ</th>

<th width="90">在庫</th>

<th width="125">ご注文</th>

</tr>


<!--{php}-->

$classObj = json_decode(mb_substr($this->get_template_vars('tpl_javascript'), 18, strripos($this->get_template_vars('tpl_javascript'),';function lnOnLoad()')-18, 'UTF-8'), true);

$this->assign('classObj', $classObj);

$this->assign('pos','#0');

<!--{/php}-->


</td>

<td>

<form name="form<!--{$pc}-->" id="form" method="post" action="/products/detail.php?product_id=<!--{$tpl_product_id}-->">

<input type="hidden" name="mode" value="cart" />

<input type="hidden" name="product_id" value="<!--{$tpl_product_id}-->" />

<input type="hidden" name="product_class_id" value="<!--{$classObj.$pc.$pos.product_class_id}-->" id="product_class_id" />

<input type="hidden" name="favorite_product_id" value="" />

<input type="hidden" name="classcategory_id1" value="<!--{$pc}-->" />

<input type="hidden" name="classcategory_id2" value="0" />

<a href="javascript:void(document.form<!--{$pc}-->.submit(),'cart')"><img src="../user_data/packages/default/img/button/btn_cartin.jpg" width="166" height="40" class="cart_btn" alt="カゴに入れる" /></a>

</form>

</td>

</tr>

<!--{/if}-->

<!--{/foreach}-->

</table>


規格を1個しか使っていないのでそれ用になっています。規格を2こ掛け合わせる人はさらにカスタマイズ要です。
Smarty上での変数のエスケープの仕方が分からず、#0を見るのに新たに変数作ってしまった。
この辺の解法知ってる人表れたら嬉しいです。

ちょいとメモ -> ページ表示の高速化を色々試してみながら記す

リアルタイムで記していきます。

ココで計測しながら。
http://gtmetrix.com


初期状態
Page load time: 13.79s
Total page size: 3.45MB
Total number of requests: 317

CSSに重複あったり、イロイロぐだっています、なう。
.item を body .itemで指定して上書きしたり、αから公開したばっかならではの惨状。

CSSの重複を削除ったら劇的に改善!?え、早くない!?

Page load time: 5.73s
Total page size: 3.47MB
Total number of requests: 317

そして、画像のwidth,heightの指定が無いと怒られたのでひとつずつ指定。
Page load time: 9.24s
Total page size: 3.46MB
Total number of requests: 317

あれ、、、遅くなった。てか、さっきのが異常値かも。本当は複数回計測して平均を出すのだけどメンドイので大体で進めていく。
続いて、javascriptの重複というか無駄な記述などを削除&更に細かく画像のサイズを指定など。

Page load time: 6.80s
Total page size: 3.45MB
Total number of requests: 316

更にパーツの構成や指定、jpgの画質を見直して最適化。

Page load time: 6.44s
Total page size: 2.20MB
Total number of requests: 280

あれ、かなり軽くなったのに時間にはハネ返ってこない。。。

とりあえず今回のがんばりはここまで。

13秒→6秒なのでいいのかな。
snsボタン各種があるためにページが表示されてからも時間がカウントされてる感じなので、実際は8→3秒ぐらいの改善が実感値。

しばらく様子を見ましょう。