https://blog.superhosting.bg/import-large-number-of-products-in-woocommerce.html

Натиснете ENTER, за да видите резултатите или ESC за изход.

Успешен импорт на 25 хиляди продукта в WooCommerce и казусът cell.bg (case study)

2018-08-21
Съвети от support-a
woocommerce, wordpress, онлайн магазин, case study, уебсайт импорт

Наскоро екипът ни от Техническа поддръжка се включи в разрешаването на интересен казус с един онлайн магазин. Клиентът се беше спрял на варианта да ползва WordPress и WooCommerce за онлайн магазина си.

На пръв поглед не би трябвало да има нещо странно и различно. Освен подготовка на визията и основните функционалности в магазина, едно от най-важните неща са продуктите. Но именно това се изплъзваше - добавянето на продуктите във вида, в който се очакваше. Екипът ни се включи в предизвикателството и заедно се натъкнахме на още няколко подводни камъка, които обаче успешно преборихме.

Докато анализирахме и тествахме се сдобихме с много полезни знания за генерирането на изображения в WordPress с WooCommerce и техники за справяне с импорт на голям брой продукти в WooCommerce.

Включваме го към списъка с интересни случаи с ценни открития. Представяме ви поредното интересно кейс стъди, което се надяваме да е от полза на всички, които попаднат в същата ситуация.

Казусът

Клиентът подготвя обновения си онлайн магазин cell.bg за стартиране, като е избрал най-високия ни хостинг план СуперХостинг. За магазина клиентът имаше подготвени продуктите в подходящ вид за импорт. Броят на продуктите обаче трябва да се отчете и не е за пренебрегване – около 25 000.

Опитите за импорт на продуктите обаче завършваха неуспешно – не се завършваше процеса, спираше на различни места и в различно време. И това донякъде е нормално – броят продукти е голям и са необходими ресурси. Ние съдействахме първоначално с увеличаване на ресурсите. Достигнахме временно увеличение от 6 пъти над параметрите на хостинг плана. Паметта за акаунта се увеличи до 12 GB и въпреки това отново беше недостатъчна.

Освен това, в следствие на опита за импорт в акаунта, броят файлове – inodes се увеличиха многократно. Стигна се до рекордните 1 милион и 300 хиляди файла (при 270 хиляди по план).

Резултатът дотук – сайт, в който не са качени всички продукти, импорт, който отнемаше часове с много ресурси, над милион файла в акаунта, които дори не бяха всичките, но пък явно имаше излишни. Определено предизвикателно начало за един обновен магазин.

Път към разрешаването на казуса

Определено трябваше да се приложи друг подход за стартирането на сайта. Стартирането на обновен онлайн магазин е свързано и с редица бизнес процеси и една подобна ситуация може да рефлектира на много нива. Не веднъж сме казвали, че нашият успех зависи от успеха на нашите клиенти. Затова променихме посоката и заедно с клиента начертахме план за действие, който приложихме стъпка по стъпка, бавно и внимателно.

Планът беше следният:

  1. Да анализираме защо се получават толкова файлове;
  2. Да променим настройките в сайта, така че да не се добавят изображения, които няма да се ползват в сайта;
  3. Да започнем изцяло отначало, на чисто;
  4. Да импортнем продуктите поетапно и на малки порции.

1. Да анализираме защо се получават толкова файлове - Картинките в WordPress и WooCommerce

Стандартно за всеки файл качен в WordPress се генерират допълнителни преоразмерени файлове в зависимост от настройката зададена в администрацията. В някои случаи е възможно за един файл да бъдат налични над 15 преоразмерени копия.

Защо? Различните размери на изображенията се използват при различните резолюции, при които може да се зарежда сайта. В съвременните сайтове повечето теми са с Responsive дизайн. За да може сайтът да се зарежда и изглежда добре при различните устройства, се генерират и изображения в подходящи размери.

Тези преоразмерени копия обаче са отделни файлове и не са видими в администрацията на WordPress. Но това са реални файлове в хостинг акаунта.

В меню "Файлове" в WordPress се виждат само оригиналните изображения. Реалният брой на картинките-копия може да се види с невъоръжено око през файловия мениджър в cPanel или през FTP. Файловете на картинките-копия са с едно и също име, само различаващи се в края с различните размери.

Ето файловете само за една картинка от сайта, генерирани по време на импорта:

31496_adonit-dash-3-stylus_1932768443.jpg
31496_adonit-dash-3-stylus_1932768443-50x50.jpg
31496_adonit-dash-3-stylus_1932768443-100x100.jpg
31496_adonit-dash-3-stylus_1932768443-120x120.jpg
31496_adonit-dash-3-stylus_1932768443-145x145.jpg
31496_adonit-dash-3-stylus_1932768443-150x150.jpg
31496_adonit-dash-3-stylus_1932768443-300x300.jpg
31496_adonit-dash-3-stylus_1932768443-600x600.jpg
31496_adonit-dash-3-stylus_1932768443-604x270.jpg
31496_adonit-dash-3-stylus_1932768443-750x330.jpg

Първата картинка е оригиналът (_1932768443.jpg), всички останали 9 картинки са генерирани допълнително при качване на оригиналната снимка в сайта – по време на импорта.

Всеки един от продуктите има по 4 изображения – с различни изгледи на продукта.

Очаквания: 1 продукт = 4 изображения; 25 000 продукта = 100 000 изображения

Реалното състояние: 1 продукт = 16 изображения ; 25 000 продукта = 400 000 изображения

Докато тествахме и импортите стигнахме до резултата от над 1 милион картинки, без дори да са импортнати всички продукти.

Задълбоченият анализ на случая с генерирането на толкова много изображения, извършен от Кирил, показа източниците за генерирането им.

Картинките в сайта се генерираха от:

  • WordPress – настройки за картинките (thumbnail, medium, large): "Настройки" » "Файлове".
    От тази настройка се генерира автоматично по 1 копие за малката картинка (thumbnail) – 150х150.jpg. Този размер се използва за галериите, създавани с вградената функционалност в WordPress. Размерите medium и large се генерират само когато се използва темата на WordPress. В случая за сайта се използваше друга тема. За да се спре генерирането на копия, в даденото поле може да се въведе нула (0).
  • WooCommerceнастройки за картинките на продуктите: "Външен вид" » "Настройки" » "WooCommerce" » "Продуктовите изображения".
    За продуктите в магазина може да са нужни отделни картинки с различни размери, като откритите копия от импорта бяха – 300×300.jpg и 600×600.jpg. Важно е да се отбележи, че ако в настройките за изображенията (Продуктовите изображения) се променят размерите, след записване на промените ще се стартира процес по автоматично генериране на нови копия (с новите размери).
  • Темата – в системните файлове на темата са зададени още размери за картинките. Всяка тема за WordPress може да задава генериране на изображения с различни размери. Това може да се открие в кода на файловете на темата, като се провери за функциите: add_image_size() и set_post_thumbnail_size(). За използваната тема се генерираха копията – 50×50.jpg, 145×145.jpg, 604×270.jpg и 750×330.jpg.
  • Плъгините – дори плъгините може да задават собствени предпочитания за размерите на картинките. Копието с размер 120×120.jpg се генерираше от плъгина Woocommerce Product Gallery Slider. Другото копие 100×100.jpg се генерираше от динамично задаване на размерите. Плъгини като Slider Revolution, с които се създават галерии и слайдери в сайта, може да имат собствени настройки за размерите на картинките. За пример настройките за thumbnail за този плъгин се задават в Slider Settings » Navigation (в случай че се използва навигация в слайдера с малки картинки).

Понякога е възможно размерите за изображенията да не се намират директно в кода на файловете, но да се взимат динамично според въведените от потребителя стойности в администрацията. Например въвеждането на размери 145×145 за thumbnails в настройките на плъгина Slider Revolution, не ги въвежда като код във файловете му (например 145, 145), поради това няма как да се открият при търсене в кода.

2. Да променим настройките в сайта, така че да не се добавят изображения, които няма да се ползват в сайта

Изпратихме резултатите от този анализ към клиента. За този магазин клиентът определи, че са достатъчни до 3 варианта на всяко оригинално изображение. Промениха се настройките в сайта, темата и кода. Вече можеше да пристъпим към следващата стъпка – импорт на продуктите.

3. Да започнем изцяло отначало, на чисто

Защо не се опитахме да променим текущото състояние? Работата с над един милион файла е непосилна. Анализ на това кои файлове трябва да останат и кои да се премахнат щеше да коства проверка на файл по файл - определено излишен ресурс. И предвид това, че копията на изображенията не се виждат в администрацията на сайта, задачата става почти невъзможна за решение.

4. Импортът на продукти в WooCommerce

След като вече знаехме, че всичките файлове, които качваме, са именно тези, които са ни необходими, Габриела, завърши успешно импорта на всичките 25 хиляди продукта в онлайн магазина. Импортът се осъществи с изпълнение на специално подготвен за целта план за действие.

При първоначалния импорт на продуктите, бяха подготвени XML файлове всеки с около 5000-6000 продукта. За импорта на продуктите се използва плъгина WP All Import, който предоставя множество опции и възможността да бъдат импортирани продукти чрез URL адрес или XML/CSV файл, дори и чрез крон задача (отложено стартиране и изпълнение). С този плъгин могат да бъдат импортирани както продукти и поръчки, така и публикации и друга информация в WordPress.

Плъгинът е много мощен и популярен, работи добре и се ползва често от много клиенти. Тук обаче има значение типът на импорта и обема на информацията. При първият импорт на около 6000 продукта отнемаше около два часа, но завършваше успешно. Импортът е интензивна операция, защото се проверява в базата данни на сайта дали данните ги има, ако ги няма – се създава съответният продукт, добавят се заглавие, описание, категория, цени и другите атрибути, изтегля се изображението от отдалечения сървър, след което се преоразмерява и съхранява в акаунта и др. Дори и по няколко секунди за продукт, то колкото повече продукти се добавят, толкова повече време отнема добавянето и на останалите.

Основната промяна тук е, че зададохме импортът да се прави с отделни XML файлове с по ~1000 продукта всеки. Клиентът съдейства с подготовката на файловете.

Когато се извършва първоначален импорт на продукти в WooCommerce, не просто обновяване на наличностите или цените, задължително трябва да се разделят на отделни порции (с колкото се може по-малък брой продукти).

Спряхме се на този вариант, за да имаме по-малки порции за импорт, които да могат да завършат успешно, да имаме контрол над импорта, а и ако нещо се обърка, да можем по-лесно да видим какво е то.

Хостинг акаунтът все още беше с 6 пъти повече ресурси. Въпреки това добрите практики за импорт на голям брой продукти са:

  • Локален импорт на продуктите и след това качване на файловете и базата данни в хостинг акаунта.
    Когато импортът на продуктите не може да се осъществи през самия сайт или друго приложение, налично в хостинг акаунта, може първо да се направи локален импорт (на друга машина) и след това в хостинг акаунта да се качат файловете и базата данни.
  • Пускане на импорта през крон задача, отново на порции. ⭐️
    Когато има тежка обработка при импорта, той може да се стартира чрез крон задача. По този начин процесът му ще работи на заден фон, ще се изпълнява на порции и няма да пречи на самия сайт.

! Лоша практика е да се разчита, че един скрипт ще се стартира и ще приключи своето изпълнение успешно. Възможно е да бъде възпрепятстван, може да бъде спрян от сървърна защита, възможно е да има грешка в кода му или друго. Добрият подход е всеки скрипт да бъде предвиден така че дори и да бъде спряно изпълнението му внезапно, това да не счупи функционалността на сайта.

Използваният плъгин за импорт WP All Import има такава опция за импорт с крон, която може да се използва за импорт на продукти или за обновяване на продуктови данни, при вече налични продукти в магазина.

Повече за това как се настройва крон задача за импорт с WP All Import ще откриете в нашата помощна статия.

Поетапно импортвахме по 1000 продукта. Периодично генерирахме и архиви, които да ползваме, ако нещо се обърка. Последният импорт също отне няколко часа, защото данните вече бяха много.

Изводите от този случай

В един WordPress сайт може да се генерират много варианти на изображенията и повечето от тях да не са нужни. Това обаче не може да се види през администрацията на WordPress » Файлове.

Задаването на брой изображения в WooCommerce не е настройка в администрацията. Броят изображения зависи от WordPress, темата, плъгините и WooCommerce.

При импорт на голям брой продукти, трябва да се намери начин те да се налеят контролирано на малки порции, през крон или пък локално на друга машина, а след това само да се прехвърлят файловете и базата данни.

Искаме да изкажем и благодарност към нашия клиент, с който заедно решихме казуса. Вече има импортнати успешно продуктите и магазинът може да ползва оптимално параметрите на хостинг акаунта.

Неуспешен импорт и милион файлове на пръв поглед изглеждат като проблем в хостинга и безпричинно увеличение на системен параметър. Факт е, че няма понятие като “неограничени ресурси”, и без да се следи броят им услугата не би могла да функционира по начина, по който трябва да работи и който гарантира качеството и надеждността на файловата система в хостинг акаунтите. В случая се поставихме на мястото на клиента и видяхме безизходицата, в която беше попаднал. Знаем, че за да може той да започне успешно имаше нужда от малко помощ. А екипът ни по техническа поддръжка е тук именно затова, да помогнем като открием причината за увеличения брой айнодове, да дадем препоръки, съвети, идеи и напътствия. Радваме се, че бяхме част от успешното развитие на този онлайн проект.

Поглед напред

Онлайн магазинът вече е отворен. Пожелаваме му много успехи, много поръчки и доволни клиенти! А следващата стъпка .....е преминаването към правилна хостинг услуга в по-дългосрочен план, в случая Managed VPS, която да гарантира безпроблемната работа на магазина при активни промоции и реклами, съответно и при очакван по-голям трафик.

Специалист Техническа Поддръжка

Меган е една от нашите super-support-гурута. СуперСилата на Меган е, че може да обясни и най-сложните технологии на достъпен за всеки език.

500px270px
SuperHosting.BG

Препоръчани статии

Етикети/Tags

Оставете коментар

avatar
  Абониране  
Уведоми ме при