嘿,大家好,我正在使用Zend_GData包連接到Google日曆,並執行各種操作,例如添加/編輯/刪除事件。但是,我發現這些操作非常昂貴,有時可能需要4秒才能完成。我想知道是否有任何事情可以優化我的代碼並使其更快?這裏是我的添加功能的一個例子:優化谷歌日曆PHP代碼的速度(Zend_GData)?
function add_gcal($title, $date, $where, $desc){
$newIncludePath = array();
$newIncludePath[] = '../ZendGdata-1.8.4PL1/library';
$newIncludePath = implode($newIncludePath);
set_include_path($newIncludePath);
// load classes
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Calendar');
Zend_Loader::loadClass('Zend_Http_Client');
// connect to service
$user = "******";
$pass = "******";
$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
try {
$gdataCal = new Zend_Gdata_Calendar($client);
$newEvent = $gdataCal->newEventEntry();
$newEvent->title = $gdataCal->newTitle($title);
$newEvent->where = array($gdataCal->newWhere($where));
$newEvent->content = $gdataCal->newContent("$desc");
$when = $gdataCal->newWhen();
$when->startTime = $date;
$when->endTime = $date;
$newEvent->when = array($when);
$createdEvent = $gdataCal->insertEvent($newEvent);
return $createdEvent->id->text;
} catch (Zend_Gdata_App_Exception $e) {
return NULL;
}
}
有沒有人看到我是否可以做出任何改進?對於每個功能(添加/刪除/編輯),我必須做類似於此,我加載類和連接到服務...
謝謝!
編輯:
我嘗試登錄時,一旦設置$客戶端連接,並存儲$客戶端作爲一個會話變量,我可以再重複使用,每次我需要在日曆上做的操作。這似乎並不工作,我得到以下Zend_GData_App_Exception:
exception 'Zend_Gdata_App_HttpException' with message 'Argument is not an instance of Zend_Http_Client.'
in /home/content/*****/html/ZendGdata-1.8.4PL1/library/Zend/Gdata/App.php:247
Stack trace:
#0 /home/content/*****/html/ZendGdata-1.8.4PL1/library/Zend/Gdata/App.php(172):
Zend_Gdata_App->setHttpClient(Object(__PHP_Incomplete_Class), 'MyCompany-MyApp...')
#1 /home/content/*****/html/ZendGdata-1.8.4PL1/library/Zend/Gdata.php(107):
Zend_Gdata_App->__construct(Object(__PHP_Incomplete_Class), 'MyCompany-MyApp...')
#2 /home/content/*****/html/ZendGdata-1.8.4PL1/library/Zend/Gdata/Calendar.php(87):
Zend_Gdata->__construct(Object(__PHP_Incomplete_Class), 'MyCompany-MyApp...')
#3 /home/content/*****/html/scripts/functions.php(85):
Zend_Gdata_Calendar->__construct(Object(__PHP_Incomplete_Class))
#4 /home/content/*****/html/calendar/modify_duty.php(68):
add_gcal(Object(__PHP_Incomplete_Class), 'R4 - Stephen Au...', '2009-08-19', 'Building: Liva ...', 'Primary')
#5 {main}
我也是用這個嘗試:
// connect to service
$user = "******";
$pass = "******";
$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
$client->setConfig(array('keepalive' => true));
我這裏得到任何錯誤,但它仍然是緩慢的。我沒有登錄並設置SESSION變量,就像我上面做的那樣,因爲我得到了同樣的錯誤。雖然這沒有錯誤,但在我看來,它仍然會每次都建立一個新的連接......我將如何完全使用它?
帕斯卡爾馬丁 - 非常感謝您的幫助。我連接到我的幾個PHP頁面上的Google日曆。是否有可能在整個會話中重複使用同一個$客戶端?例如,最好的方法是在Login上建立連接,然後將該$ client存儲爲SESSION變量? 一個批處理程序會很好,但正如你所說,我沒有很多事件,所以它可能不值得。 我也打算看看Zend自動加載器的require_once調用。謝謝! – littleK 2009-08-01 16:25:20
我很確定,我不知道$ client變量是否可以存儲在會話中;你必須嘗試......(只是發佈你的測試結果;-)它可能會讓其他人感興趣^^) - 好吧,看看http://framework.zend.com/manual/en/zend .gdata.authsub.html:有一個例子,會話令牌存儲在$ _SESSION中;也許這可以幫助你:-) – 2009-08-01 16:41:13
我不認爲我可以做到這一點,看到我上面的編輯。所以,我想我唯一可以考慮的就是保持活力,但在閱讀完後,我不確定是否以及如何使用它 - http://framework.zend.com/manual/en/ zend.http。html – littleK 2009-08-01 17:38:37