2011-05-31 9 views
3

FullCalendarを使用して、JSONフィードを使用してWPのカスタム投稿タイプからイベントを読み込みます。動作していますが、読み込むのに時間がかかります。ここをクリックしてください:http://cea3.iscte.pt/en/agenda-3/(6月または8月)。あなたの誰かがそれを引き起こす可能性のある手掛かりを持っていますか?JSONフィードの読み込みが遅いFullCalendar

これはJSONフィードの完全なコードです:

<?php 

// - standalone json feed - 

header('Content-Type:application/json'); 

// - grab wp load, wherever it's hiding - 
if(file_exists('../../../../wp-load.php')) : 
    include '../../../../wp-load.php'; 
else: 
    include '../../../../../wp-load.php'; 
endif; 

global $wpdb; 

// - grab date barrier - 
$oneyear = strtotime('-1 year') + (get_option('gmt_offset') * 3600); 

// - query - 
global $wpdb; 
$querystr = " 
    SELECT * 
    FROM $wpdb->posts wposts, $wpdb->postmeta metastart, $wpdb->postmeta metaend 
    WHERE (wposts.ID = metastart.post_id AND wposts.ID = metaend.post_id) 
    AND (metaend.meta_key = 'tf_events_enddate' AND metaend.meta_value > $oneyear) 
    AND metastart.meta_key = 'tf_events_enddate' 
    AND wposts.post_type = 'tf_events' 
    AND wposts.post_status = 'publish' 
    ORDER BY metastart.meta_value ASC LIMIT 500 
"; 

$events = $wpdb->get_results($querystr, OBJECT); 
$jsonevents = array(); 

// - loop - 
if ($events): 
global $post; 
foreach ($events as $post): 
setup_postdata($post); 

// - custom variables - 
$custom = get_post_custom(get_the_ID()); 
$sd = $custom["tf_events_startdate"][0]; 
$ed = $custom["tf_events_enddate"][0]; 

// - grab gmt for start - 
$gmts = date('Y-m-d H:i:s', $sd); 
$gmts = get_gmt_from_date($gmts); // this function requires Y-m-d H:i:s 
$gmts = strtotime($gmts); 

// - grab gmt for end - 
$gmte = date('Y-m-d H:i:s', $ed); 
$gmte = get_gmt_from_date($gmte); // this function requires Y-m-d H:i:s 
$gmte = strtotime($gmte); 

// - set to ISO 8601 date format - 
$stime = date('c', $gmts); 
$etime = date('c', $gmte); 

$thetitle = $post->post_title; 
$short_title = substr($thetitle,0,50); 

$eventpostid = $post->ID; 
$eventslug = wp_get_post_terms($eventpostid, 'tf_eventcategory'); 
$eventvenueslug = $eventslug[0]->slug; 

$tf_events_link = get_post_meta($post->ID, 'tf_events_link', true); 
$tf_events_permalink = get_permalink($post->ID); 
if ($tf_events_link) { $url_event = $tf_events_link ; } 
else { $url_event = $tf_events_permalink; }; 

// - json items - 
$jsonevents[]= array(
    'title' => $short_title . '...', 
    'allDay' => false, // <- true by default with FullCalendar 
    'start' => $stime, 
    'end' => $etime, 
    'url' => $url_event, 
    'className' => $eventvenueslug 
    ); 

endforeach; 
else : 
endif; 

// - fire away - 
echo json_encode($jsonevents); 

?> 

ありがとうございました。

答えて

1

ロードに数秒かかるようです。

私はこのカレンダーを使用して、それは6秒であったが、私は約3源と〜40回のイベントを持っていた最長の荷重 - するのに約2-6秒かかります。

今、私はあなたがそれをactaully要する時間を指定していないので、あなたのためにそれは長い時間であるかどうかわからないです。 呼び出しが同じサーバー上にあるように見えるので、唯一の問題は返答に時間がかかるSQLです。専用サーバーか共有サーバーですか?

あなたのPHPはうまく見え、すぐに実行する必要があります。私は.NETとSQL Serverを使って同様のロジックを持っています。

これは、世界の私の側からあなたのカレンダーを読み込むのにかかる時間です。

enter image description here

それをスピードアップするための唯一の他の方法は、キャッシュ

http://arshaw.com/fullcalendar/docs/event_data/events_json_feed/#options

を使用して、日付の巧妙なチェックで何とかソースをリロードするためにそれを管理することですか?か何か。 以前にフィードがロードされてから時間がmsに短縮されると確信しています。

あなたは今月急速に負荷のような巧妙な何かをしなければならない - と背景負荷1年または2年とキャッシュそれをインチあなたが月を変えると、それは記憶の中にあるので即座になります。

+0

このPHPを検証していただきありがとうございます。それからSQLでなければなりません。私はWPを実行する同様の問題を抱えています(これは大学の共有サーバーであり、より良い設定をテストする方法はありません...)。 – AnaRita

+0

ローディング時間はあなたの側で同じですか? 2,3,4秒?私はあなたがそれをより速くロードすることを疑う。あなたはすべてのローカルホストを試してみることができ、ボトルネックを見つけるためにある種のタイムフロープログラムを使用することができます。 6月に30回イベントを開催すればどうなりますか?それは非常に遅いですか? – ppumkin

+0

これは2.5〜4秒で、月に1つのイベントしかありません。私はもっ​​とテストします。 – AnaRita