Jak możemy natychmiast załadować galerię zdjęć produktu bez opóźnienia w Magento?

11

to jest moje pierwsze pytanie ze mną :)

Problem: Galeria fotorama zastosowana w Magento 2 sprawia, że ​​wrażenia użytkownika są powolne. Nie ma znaczenia, jak szybko działa mój statyczny magento 2 w pamięci podręcznej, jeśli obraz produktu nie jest „natychmiastowy”.

https://www.ninewest.co.uk/sandals/high-heel/allclear-black-snake-print-nine-west

Jeśli przejdziesz do powyższego linku (sklep pokazany na blogu magento), zobaczysz, że się otwiera, a następnie wyświetla ikonę ładowania, a następnie ładuje obrazy. To okropne.

Powinien zostać załadowany natychmiast. Jak bamm. Gotowe, Specjalnie z włączoną pełną pamięcią podręczną strony i opcache.

Czy istnieje sposób na zmianę tego zachowania? Aby załadować go natychmiast?

Dla użytkownika jest to najważniejszy „element” na stronie. i ładuje się jako najnowszy .

Nie rozumiem, jak nikt na to nie narzeka.

To jest handel elektroniczny, liczy się tylko „obraz”. Na tym zależy użytkownikowi. Powodem, dla którego klikają na stronie produktu, jest „lepsze oglądanie obrazów. Dla mnie to naprawdę mnie wkurza. Bez żadnego powodu jestem bardzo zły, a potem pytam siebie, czy jestem szalony?

Z góry dziękuję, jestem tylko zdezorientowany, jak to się mogło stać.

Na moim magento 1 ładuje się natychmiast.

Fancyman
źródło
Uzgodnione, że mogą przynajmniej wyświetlać obraz podstawowy podczas ładowania fotoramy. W tym celu będę musiał zbudować moduł.
Aaron Allen,
Dodali go do żądania ulepszenia funkcji. Na urządzeniach mobilnych jest jeszcze gorzej. Ale zabawne jest to, że gdy odwiedzasz witrynę fotorama na telefonie komórkowym, galeria dużych obrazów ładuje się szybciej niż magento. Odświeżenie jest prawie natychmiastowe. Problem leży w Magento.
Fancyman
Z pewnością musi to być teraz poprawka? Wciąż jest bardzo wolny, dziękuję, że zadałeś pytanie, będę sprawdzać to ponownie, aby sprawdzić, czy coś kiedykolwiek zmieni haha.
Andy Jones
Czasami to polecenie zadziała: php bin / magento catalog: images: resize
Saphal Jha
Co to znaczy i jak to zrobić „Poprawka do przeskakiwania zawartości. Moduł ładujący musi być tego samego rozmiaru co galeria” Znalazłem jeden problem, który polega na tym, że ładowanie mojego produktu niż obrazu pokazuje najpierw małe, a potem duże
Akbar Mo

Odpowiedzi:

10

Oto proste rozwiązanie, które spowoduje wyświetlenie podstawowego obrazu produktu podczas ładowania JS. Utwórz w pliku następujący plik: {theme_dir}/Magento_Catalog/templates/product/view/gallery.phtml zawierający:

<div class="gallery-placeholder _block-content-loading" data-gallery-role="gallery-placeholder">
    <div data-role="loader" class="loading-mask">
        <div class="loader">

            <img src="<?php echo $block->getGalleryImages()->getFirstItem()->getData('medium_image_url') ?>" style="max-width: 100%; max-height: 100%">

            <img src="<?php /* @escapeNotVerified */ echo $block->getViewFileUrl('images/loader-1.gif'); ?>"
                 alt="<?php /* @escapeNotVerified */ echo __('Loading...') ?>">
        </div>
    </div>
</div>
<!--Fix for jumping content. Loader must be the same size as gallery.-->
<script>
    var config = {
            "width": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_medium', 'width'); ?>,
            "thumbheight": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_small', 'height')
                        ?: $block->getImageAttribute('product_page_image_small', 'width'); ?>,
            "navtype": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/navtype"); ?>",
            "height": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_medium', 'height'); ?>
        },
        thumbBarHeight = 0,
        loader = document.querySelectorAll('[data-gallery-role="gallery-placeholder"] [data-role="loader"]')[0];

    if (config.navtype === 'horizontal') {
        thumbBarHeight = config.thumbheight;
    }

    loader.style.paddingBottom = ( config.height / config.width * 100) + "%";
</script>
<script type="text/x-magento-init">
    {
        "[data-gallery-role=gallery-placeholder]": {
            "mage/gallery/gallery": {
                "mixins":["magnifier/magnify"],
                "magnifierOpts": <?php /* @escapeNotVerified */ echo $block->getMagnifier(); ?>,
                "data": <?php /* @escapeNotVerified */ echo $block->getGalleryImagesJson(); ?>,
                "options": {
                    "nav": "<?php /* @escapeNotVerified */ echo $block->getVar("gallery/nav"); ?>",
                    <?php if (($block->getVar("gallery/loop"))): ?>
                        "loop": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/loop"); ?>,
                    <?php endif; ?>
                    <?php if (($block->getVar("gallery/keyboard"))): ?>
                        "keyboard": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/keyboard"); ?>,
                    <?php endif; ?>
                    <?php if (($block->getVar("gallery/arrows"))): ?>
                        "arrows": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/arrows"); ?>,
                    <?php endif; ?>
                    <?php if (($block->getVar("gallery/allowfullscreen"))): ?>
                        "allowfullscreen": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/allowfullscreen"); ?>,
                    <?php endif; ?>
                    <?php if (($block->getVar("gallery/caption"))): ?>
                        "showCaption": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/caption"); ?>,
                    <?php endif; ?>
                    "width": "<?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_medium', 'width'); ?>",
                    "thumbwidth": "<?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_small', 'width'); ?>",
                    <?php if ($block->getImageAttribute('product_page_image_small', 'height') || $block->getImageAttribute('product_page_image_small', 'width')): ?>
                        "thumbheight": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_small', 'height')
                        ?: $block->getImageAttribute('product_page_image_small', 'width'); ?>,
                    <?php endif; ?>
                    <?php if ($block->getImageAttribute('product_page_image_medium', 'height') || $block->getImageAttribute('product_page_image_medium', 'width')): ?>
                        "height": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_medium', 'height')
                        ?: $block->getImageAttribute('product_page_image_medium', 'width'); ?>,
                    <?php endif; ?>
                    <?php if ($block->getVar("gallery/transition/duration")): ?>
                        "transitionduration": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/transition/duration"); ?>,
                    <?php endif; ?>
                    "transition": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/transition/effect"); ?>",
                    <?php if (($block->getVar("gallery/navarrows"))): ?>
                        "navarrows": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/navarrows"); ?>,
                    <?php endif; ?>
                    "navtype": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/navtype"); ?>",
                    "navdir": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/navdir"); ?>"
                },
                "fullscreen": {
                    "nav": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/nav"); ?>",
                    <?php if ($block->getVar("gallery/fullscreen/loop")): ?>
                        "loop": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/loop"); ?>,
                    <?php endif; ?>
                    "navdir": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/navdir"); ?>",
                    <?php if ($block->getVar("gallery/transition/navarrows")): ?>
                        "navarrows": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/navarrows"); ?>,
                    <?php endif; ?>
                    "navtype": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/navtype"); ?>",
                    <?php if ($block->getVar("gallery/fullscreen/arrows")): ?>
                        "arrows": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/arrows"); ?>,
                    <?php endif; ?>
                    <?php if ($block->getVar("gallery/fullscreen/caption")): ?>
                        "showCaption": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/caption"); ?>,
                    <?php endif; ?>
                    <?php if ($block->getVar("gallery/fullscreen/transition/duration")): ?>
                        "transitionduration": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/transition/duration"); ?>,
                    <?php endif; ?>
                    "transition": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/transition/effect"); ?>"
                },
                "breakpoints": <?php /* @escapeNotVerified */ echo $block->getBreakpoints(); ?>
            }
        }
    }
</script>

Mam nadzieję że to pomoże.

Aaron Allen
źródło
Dzięki Aaron! Spróbuję dziś wieczorem, kiedy będę w domu! Naprawdę to doceniam!
Fancyman
Aaron Próbowałem. To działa. To miłe tymczasowe rozwiązanie, ale szkoda, że ​​nie mogliby naprawić prędkości ładowania galerii. Nie rozumiem, dlaczego ładuje się tak wolno. Na stronie fotorama jest to większa galeria i ładuje się natychmiast. Możesz nawet wypróbować na swoim mobilnym fotorama.io, możesz zobaczyć, że jest dużo szybciej, a obrazy są dużo większe.
Fancyman
@Aaron Allen proszę wyjaśnić, co zrobiłeś z komentarzem w poście lub w kodzie.
LucScu,
1
Dodałem linię do pierwszego imgelementu.
Aaron Allen
To działało dla mnie w Magento EE 2.1.7.
sparecycle
1

Odpowiedź Aarona Allena była świetna i wykorzystałem ją, aby dowiedzieć się, jak to zrobić dla mojej niestandardowej konfiguracji.

Wszystko, co musiałem zrobić, to dodać obraz za pomocą wbudowanego css i dodać padding-bottom: 100% do maski ładowania.

...
<div class="gallery-placeholder _block-content-loading" data-gallery-role="gallery-placeholder">
    <div data-role="loader" class="loading-mask" style="padding-bottom:100%;">
        <div class="loader">
            <img src="<?php echo $_product->getData('img_url'); ?>" style="max-width: 100%; max-height: 100%; display: block;">
            <img src="<?php /* @escapeNotVerified */ echo $block->getViewFileUrl('images/loader-1.gif'); ?>"
                 alt="<?php /* @escapeNotVerified */ echo __('Loading...') ?>">
        </div>
    </div>
</div>
...

Jest dość podobny do powyższej odpowiedzi, ale chciałem dodać moje 2 centy.

James Harrington
źródło