我正在为Woocommerce商店进行自动导入。它正在工作,但是要花费大量资源。这非常慢,并将网站速度降低到无用的程度。这显然是一个糟糕的开始。
当前的外观如下:
<?php
$xml = simplexml_load_file( $url );
foreach ( $xml->products->product as $product ) {
$one_sku = (string)$product->code;
$productID = wc_get_product_id_by_sku( 'pre-' . $one_sku );
if ( $productID ) {
$one_description = (string)$product->description;
$one_price_wholesale = (string)$product->price->wholesale;
$one_price_rrp = (string)$product->price->rrp;
$one_image = (string)$product->imageurl;
$one_imageName = basename($one_image, ".jpg");
// Get an instance of the WC_Product object
$wooproduct = wc_get_product( $productID );
// Check if product is in draft
$productStatus = $wooproduct->get_status();
// Set Product Information.
if ( $productStatus == 'draft' ) {
$wooproduct->set_description( $one_description );
$wooproduct->set_short_description( $one_description );
$wooproduct->set_regular_price( $one_price_rrp );
$wooproduct->save();
// Show updated products
echo $dataAboutThis;
}
}
}
?>
现在我基本上可以猜出为什么它很慢了。它使用WooComerceset_description等功能将新数据保存到数据库中。而且它可能正在执行某种有害的SELECT查找,以及在Woo脚本上需要运行的其他繁琐功能和废话。
因此,基本上我只是想知道从哪里开始改进它。我猜想使用WPDB插入并检查更新是否是我需要走的方向。而不是使用set_whatever WooComerce函数。但是,将其插入数据库的最佳方法是什么。因为在一个可以包含成千上万个产品的foreach循环中查找和插入对我来说似乎不是一个好主意。我正在猜测某种联接。可能是最佳做法。
还值得一提的是,我的产品目前已经存在。基本上,这里发生的是在创建并添加到草稿的库存检查更新器中提取的新产品。他们只有库存量,状态,标题和基本要求,才可以在网站上购买产品。这是在草稿中查找那些产品,将它们与xml文件匹配,然后进行更新。草稿中的内容总是少于xml文件中的内容。因此,有时我可能会将foreach从xml文件切换为查找草稿产品。