FullCalendar с фидом JSON загружается медленно - PullRequest
3 голосов
/ 31 мая 2011

Я использую FullCalendar для загрузки событий из пользовательских типов записей в WP через канал JSON. Работает, но для загрузки требуется некоторое время. Пожалуйста, проверьте здесь: http://cea3.iscte.pt/en/agenda-3/ (июнь или август). Кто-нибудь из вас знает, что может быть причиной?

Это полный код фида 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 Ответ

1 голос
/ 31 мая 2011

Кажется, что загрузка занимает несколько секунд.

Я использую этот календарь, и загрузка занимает около 2-6 секунд. Самый длинный был 6 секунд, но у меня было около 3 источников и ~ 40events.

Теперь я не уверен, что это для вас долго, потому что вы не указали, сколько времени это займет на самом деле.Похоже, что вызов находится на том же сервере, поэтому единственной проблемой может быть SQL, ответ на который занимает много времени.Это выделенный или общий сервер?

Ваш PHP выглядит нормально и должен работать быстро.У меня похожая логика с использованием .NET и SQL Server.

Это время, необходимое для загрузки вашего календаря с моей стороны мира.

enter image description here

Единственный другой способ ускорить его - использовать Кэширование

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

и управлять им, чтобы каким-либо образом перезагрузить источник с помощью умной проверки даты?или что-то.Я уверен, что время будет уменьшено до мс после загрузки канала.

Вы должны будете сделать что-нибудь умное, например, быстро загрузить текущий месяц - и в фоновой загрузке 1 год или 2 года и кешЭто.Затем, когда вы меняете месяцы, это происходит мгновенно, потому что это в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...