Zend framework Zend framework 1.11 Gdata电子表格插入速度非常慢

Zend framework Zend framework 1.11 Gdata电子表格插入速度非常慢,zend-framework,google-docs,Zend Framework,Google Docs,我使用insertRow来填充一个空的电子表格,插入一行大约需要1秒,然后在大约150行之后,速度会减慢到5秒左右 有没有人经历过这种行为? 电子表格中的数据没有任何计算,数据越多,计算时间就越长 谢谢 我会尽量严格的 如果查看类“Zend_Gdata_Spreadsheets”,您会发现insertRow()方法是以一种非常不理想的方式编写的。见: public function insertRow($rowData, $key, $wkshtId = 'default') { $ne

我使用insertRow来填充一个空的电子表格,插入一行大约需要1秒,然后在大约150行之后,速度会减慢到5秒左右

有没有人经历过这种行为? 电子表格中的数据没有任何计算,数据越多,计算时间就越长


谢谢

我会尽量严格的

如果查看类“Zend_Gdata_Spreadsheets”,您会发现insertRow()方法是以一种非常不理想的方式编写的。见:

public function insertRow($rowData, $key, $wkshtId = 'default')
{
    $newEntry = new Zend_Gdata_Spreadsheets_ListEntry();
    $newCustomArr = array();
    foreach ($rowData as $k => $v) {
        $newCustom = new Zend_Gdata_Spreadsheets_Extension_Custom();
        $newCustom->setText($v)->setColumnName($k);
        $newEntry->addCustom($newCustom);
    }

    $query = new Zend_Gdata_Spreadsheets_ListQuery();
    $query->setSpreadsheetKey($key);
    $query->setWorksheetId($wkshtId);

    $feed = $this->getListFeed($query);
    $editLink = $feed->getLink('http://schemas.google.com/g/2005#post');

    return $this->insertEntry($newEntry->saveXML(), $editLink->href, 'Zend_Gdata_Spreadsheets_ListEntry');
}
简而言之,它加载整个电子表格只是为了了解$editLink->href这个值,以便将新行发布到电子表格中

解决方法是避免在insertRow中使用此方法。 相反,在代码中获取一次$editLink->href,然后通过复制此方法的其余行为每次插入新行。也就是说,在代码中,不要使用$service->insertRow()而使用以下命令:

//get your $editLink once:
$query = new Zend_Gdata_Spreadsheets_ListQuery();
$query->setSpreadsheetKey($key);
$query->setWorksheetId($wkshtId);
$query->setMaxResults(1);

$feed = $service->getListFeed($query);
$editLink = $feed->getLink('http://schemas.google.com/g/2005#post');
....
//instead of $service->insertRow:
$newEntry = new Zend_Gdata_Spreadsheets_ListEntry();
$newCustomArr = array();
foreach ($rowData as $k => $v) {
    $newCustom = new Zend_Gdata_Spreadsheets_Extension_Custom();
    $newCustom->setText($v)->setColumnName($k);
    $newEntry->addCustom($newCustom);
}
$service->insertEntry($newEntry->saveXML(), $editLink->href, 'Zend_Gdata_Spreadsheets_ListEntry');

别忘了鼓励这个伟大的答案,我花了几天时间才弄明白。我认为采埃孚很不错,但有时候在资源优化方面,你不想太依赖他们的合作伙伴。

谢谢你的回答!我添加了
$query->setMaxResults(1)右下方
$query->setWorksheetId($wkshtId)
并将静态函数变量添加到缓存
$editLink
,因此它只被检索一次。@Ralphz酷,我更新了答案,谢谢。接得好,对那些需要处理巨大床单的人来说非常有用