Opencart est extrêmement lent, la vitesse de chargement
Je suis en cours d'exécution Opencart 1.5.2 sur mon serveur et après l'importation d'un grand nombre de produits, j'ai eu un énorme vitesse. J'ai essayé d'installer un vq mod qui avait pour accélérer le site... il ne l'a pas.
Je sais que j'ai quelques éléments sur le site qui sont relativement grandes, mais avant de l'importer, il a été en cours d'exécution fine.
- Je sais qu'il ya des réponses déjà, mais quelque chose qui ne l'aide est d'avoir un serveur dédié boîte et dédié serveur de base de données.
Vous devez vous connecter pour publier un commentaire.
Le compte de produit dans les catégories est une source importante de la lenteur de chargement de la page dans opencart. Il ya quelques endroits où cela pourrait être calculé et vous aurez à se débarrasser de tous à remarquer une amélioration du temps de chargement de page en raison de ce facteur.
Si vous modifiez le
Catalog
module, vous pouvez désactiver le compte de produit pour le menu de navigation (affiché dans la colonne de gauche par défaut) par la mise enProduct Count:
àDisabled
.Le thème par défaut a également un compte de produit affiché dans le menu principal du site. Vous pouvez trouver ce code dans catalog/controller/common/header.php:
Supprimer ou de commenter toutes les références à
$product_total
:Qui devrait prendre soin de toutes les références dans un défaut opencart installer, mais si vous utilisez un thème personnalisé ou des modules, il pourrait y avoir plus. Plus généralement, vous pouvez rechercher l'ensemble du catalogue/annuaire pour les références à
model_catalog_product->getTotalProducts()
.Si vous cherchez d'autres références à
getTotalProducts()
assurez-vous de ne pas supprimer les références qui utilisent le compte de produit pour la pagination, sinon la pagination ne fonctionne pas correctement. Voici un exemple de catalog/controller/product/search.php, un fichier qui doit le compte de produit pour fonctionner correctement.La suppression de ces références a conduit à près de 10 fois plus rapide en temps de chargement de page sur mes serveurs de développement dans un opencart installer avec ~2 000 produits.
Si vous avez
seo urls
activé dans votre opencart, il peut être une source significative de la lenteur.J'ai oc v1.5.5.1 avec environ 3K catégories et 40K produits. Je l'exécute sur l'hébergement mutualisé, et d'abord mon temps de chargement étaient environ 40 secondes et plus. Puis j'ai eu un peu plus dans opencart, et réalisé que c'est faire un grand nombre de demandes sur
oc_url_alias
table en oc de base de données. Donc, mon conseil est:1.
Add index to query column in oc_url_alias table
Mes temps de chargement est allé vers le bas à environ 7 secondes par page.
2.
Add index to keyword column in oc_url_alias table
Après les deux étapes que j'ai eu pour environ 1 à 3 secondes par page.
Maintenant mon oc est en cours d'exécution dans environ 1 seconde par page, j'ai réalisé que, en y ajoutant un peu plus d'indices dans ma table mysql, selon ce type de post http://bloke.org/php/opencart-is-slow-with-many-categories/, qui sont:
Index on parent_id column in category table
Index on category_id column in product_to_category table
Index on language_id column in category_description table
Index on store_id column in category_to_store table
Index on attribute_id AND language_id columns in product_attribute table
Index on manufacturer_id column in product table
Index on language_id column in product_description table
Index on store_id column in product_to_store table
Aussi, comme mentionné ci-dessus dans d'autres réponses, j'ai également supprimé compte de produit en:
catalog/controller/product/category.php
etcatalog/controller/module/categories.php
.Si encore l'expérience de la lenteur, vous pouvez désactiver complètement les catégories de module à partir de la barre latérale.
Enfin, vous pouvez essayer d'utiliser cette extension: http://www.opencart.com/index.php?route=extension/extension/info&extension_id=10464, mais il ne prend pas en charge le seo urls comme il est, donc, j'ai dû tricher un peu (par décodage
$_REQUEST['_route_']
paramètre, qui contient seo url de la demande, en fonctionrun
).Obtenu triés. Il semble y avoir une "nouvelle approche" dans les requêtes SQL découvert par OC équipe et il doit être appelé "DDoS vous-même à la mort".
De produits de base ont augmenté de 37k produits dans 129 catégories(à partir de 18k cours de la nuit, lol... ne devrait pas avoir écrits que l'importation automatique de scripts et de le donner à un lamer...) et les temps de chargement ont augmenté de 6 à 12 secondes pour 20 à 25 secondes, frapper le serveur SQL dur:
[quote]Вопросов начиная с запуска: 514,064,911(ques depuis le démarrage)
ø в час: 1,301,788(ques avg pour l'heure)
ø в минуту: 21,696(ques avg pour minute)
ø в секунду: 362 (ques avg pour la deuxième)
[/quote]
Ce n'est PAS normal, puisqu'il y a 2 utilisateurs sur le système -le script automatisé(limitée à 30 ques par seconde, puis sleep(1)) et moi(362-30 = 332 requêtes par seconde? par un homme? WTF devs?). Basé sur les statistiques de l'OC de cette façon aurez besoin d'un sérieux batterie de serveurs pour servir de 500 utilisateurs en même temps. On va pas se produire. Pas dans cette vie.
Je ne maintenir divers sites web et les avons réécrit presque tous. Mon site le plus visité(200 visites par jour) est la génération de "seulement" de 2,5 Mil-ques par jour. Et il est lourd(contenu), croyez-moi. Si OC a été chargé également(200k vues) il n'y allaient être de 100 120Mil ques par jour.
ÉGALEMENT les requêtes ne sont pas si sages, donnant le serveur moments difficiles avec l'ORDRE PAR(comme je m'en doutais) et SELECT DISTINCT(douleur!!!).
AUSSI il y a de nombreuses options pour chaque requête, peu importe si elles sont définies par l'utilisateur ou non(en quelque sorte, l'ordre, etc). Cela rend ques comme 4-5x plus de temps que prévu, même si l'utilisateur ne veut pas d'ordre de tri(ASC, DESC, etc.)
AUSSI il y a ques écrite dans un mauvais chemin, qui m'amuse. Comment pourriez-vous vous tirez les chiffres totaux pour rien en utilisant 5 phps et 3 requêtes, aussi longtemps que vous pouvez faire simple en 1 ligne "SELECT COUNT(*) FROM ..."? OC équipe semble pas de soins sur les délais d'exécution et la charge du serveur.
Je tiens à m'excuser si quelqu'un est offensé par ce que j'ai écrit, mais dans mon cas, je suis en droit: l'ensemble de la démarche est mauvais pour la réalisation des objectifs(une rapidité d'exécution sur 37k produits/129 chats). OC pourrait être bon pour quelqu'un avec 2 catégories et de 50 produits(lol?). Je ne sais pas. Et je n'aurai probablement pas le savoir.
Comme une INFO - en cache n'est pas une solution. Serveur de mise en cache côté est assez joli. Rien au-delà de cela signifie que vous avez de graves problèmes de codage. Afin de ne pas... je me répète, NE PAS ACHETER les modules de cache. Le sont de cacher les problèmes, pas de les résoudre. Si un module de mise en cache peut cacher le problème sur 40k produits, il ne sera pas en mesure de le faire dans 140k produits. Vous aurez besoin de module de mise en cache pour le module de mise en cache, lol.
Maintenant, pour la solution. De façon facile. Nous allons modifier uniquement les principaux problèmes. Je ne vais pas expliquer que les modifications que j'ai faites sur ma version, parce qu'ils sont dans un grand nombre de fichiers sont essentiels si vous ne comprenez pas ce que vous faites(vous pourriez lâche OC options que vous souhaitez conserver, alors que je n'ai pas de soins sur les options aussi longtemps que le site est en cours de chargement pour une demi-minute). Donc, - des modifications mineures SEULEMENT.
Wil dire - a expliqué pour la version 1.5.5.1 stock, stock thème. Moyens - pas de mods. Après modification, vous perdez du côté gauche du bloc avec des catégories, mais votre site sera en charge très RAPIDE(37k produits/129 chats -> 0.137 secondes avg en sumulated 5 charges, serveur à distance est ~200mi)
0) une SAUVEGARDE de votre site. Nous allons modifier des fichiers. Vous pourriez faire un horrible gâchis. Et pleurer par la suite.
1) Get /catalog/controller/product/category.php
Trouver ligne: 184
Doit contenir:
$product_total = $this->model_catalog_product->getTotalProducts($data);
Remplacer par:
//$product_total = $this->model_catalog_product->getTotalProducts($data);
Description: en Commentant les catégories compter qu'il prend assez damd beaucoup à compter les produits de 129 catégories.(129 requêtes? WTF?)
2) Get /catalog/controller/product/category.php
Trouver ligne: 187
Doit contenir:
'name' => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : '')
,Remplacer par:
'name' => $result['name'],
Description: Nettoyage en place - il n'y a pas de décompte à être montré dans les catégories, que nous ne comptons pas plus.
3) /catalog/controller/product/category.php
Trouver ligne: 388
Doit contenir:
'common/column_left',
Remplacer par:
// 'common/column_left',
Description: Skippng génération de la colonne de gauche dans la vue catégorie.
4) /catalog/controller/product/product.php
Trouver ligne: 463
Doit contenir:
'common/column_left',
Remplacer par:
// 'common/column_left',
Description: Skippng génération de la colonne de gauche dans la présentation du produit.
5) Get /store/catalogue/view/theme/default/template/produit/produit.tpl
Trouver ligne: 1
Doit contenir:
<?php echo $header; ?><?php echo $column_left; ?><?php echo $column_right; ?>
Remplacer par:
<?php echo $header; ?><?php echo $column_right; ?>
Description: Suppression de la colonne de gauche de thème - produits de la vue.
6) Get /store/catalogue/view/theme/default/template/produit/catégorie.tpl
Trouver ligne: 1
Doit contenir:
<?php echo $header; ?><?php echo $column_left; ?><?php echo $column_right; ?>
Remplacer par:
<?php echo $header; ?><?php echo $column_right; ?>
Description: Suppression de la colonne de gauche de thème d'affichage catalogue.
FAIT. Testez votre vitesse de chargement. Devrait être assez étonnant, si votre problème était comme le mien.
REMARQUE: Veuillez noter que je ne suis pas familier avec nay version d'OC et ne l'ai jamais utilisé avant. Comme nous l'avons résolu une partie du problème, il n'est pas entièrement résolu. C'est une solution temporaire. Supprimer les parties qui ralentissent le chargement est une solution jusqu'à ce que vous écrire de nouveau, cette fois je l'espère mieux. Je suis prêt à le réécrire, si quelqu'un veut surenchérir mon patron. Je peux prendre des vacances et de travailler pour vous : ) Mon paiement est actuellement 4700€ par semaine. La compréhension et la réécriture de cette colonne de gauche dans le droit chemin ne prend pas plus de 1-2 jours ouvrables.
PP. Vais poster ceci sur plusieurs endroits, parce que je ne pense pas OC équipe de développement comme ce qu'ils ont lu, peu importe, je ne veux pas choquer, pour ne point la critique des erreurs qu'ils ont fait(25.31 avg le temps de chargement de chaque page dans les tests - no client devra attendre plus de 3-4 secondes avant de passer à un autre site! Dafuq?). Et par ne pas me laisser poster cette info, les gens ne savent pas comment sortir du problème et aller acheter un "module de mise en cache" qui est en fait chier fichiers sur le disque dur comme des sauvages. Le gaspillage de l'argent, des déchets de disque dur, des ressources, des déchets, de l'électricité... et tout cela - pour la création d'une illusion tout se passe bien, même si elle n'.
Dans un magasin, je travaille sur la Version 1.5.6.4_rc (je suis sûr que s'applique ot votre version trop) le problème était le suivant:
foreach ($catégories comme $category) dans catalog/controller/module/category.php autour de la ligne 33
foreach ($catégories comme $catégorie catalog/controller/common/header.php autour de la ligne 107
Parce que, de ce code, nous avons eu plus de 900 requêtes db beaucoup de $this->url>link (), ainsi que divers autres.
Nous avons créé un vqmod pour répondre à cette question par la mise en cache de cette catégorie de données, donc au moins il ne sera possible que lorsque le cache se régénère:
Voici mon post à ce sujet sur le Opencart forums: Problème Avec la Lenteur Opencart Quand Avoir Beaucoup de Catégories
Ont un look à la .fichier htaccess, comme expliqué dans ce tutoriel:
Prendre un coup d'oeil dans
catalog/controller/module/categories.php
. Par défaut, le module de la catégorie affiche le compte de produit à côté de chaque élément dans le menu. Il en résulte un peu juste de la requête de surcharge pour une très petite ux gain (À mon avis).La ligne
apparaît deux fois, si vous en commentaire (et où
$product_total
est utilisé ci-dessous), on devrait voir assez importants gains.Peut-être vous avez besoin de Full Page Cache aka FPC est faite à la vitesse de votre boutique par la création de fichiers simple pour charger, au lieu de le tous opencart cadre. Cette extension va mettre en cache toutes vos pages de catalogue, mais permet de garder les données propres à l'utilisateur dynamique.
Lien : Plein De Cache De La Page
J'ai trouvé une autre solution au problème. Fondamentalement, MySQL est l'étouffement quand il essaie de filtrer les résultats de la requête à partir à la fois de la Product_category et Product_Tag tables simultanément. J'ai écrit un vqMod pour OC 1.5.2.1 qui remplace le getTotalProducts() et la fonction des constructions individuelles des requêtes SQL à exécuter contre les 2 tables. Il utilise ensuite une UNION de SQL pour attacher les résultats de deux requêtes. Cette solution améliore les performances et permet de garder le produit à l'aide de marqueurs sur votre site.
Ce qui a pris de mon temps de chargement de page de 45 à 50 secondes jusqu'à moins de 1 seconde!!!
Je viens de poster le vqMod fichier ici: http://www.opencart.com/index.php?route=extension/extension/info&token=7bc7d0149c7101c3d336b2e0b29e3f03&extension_id=13155
Laissez-moi savoir si vous avez des questions et je vais vous aider quand je peux.
Voici ce qu'il fixe pour moi. Comme les précédentes affiches ont mentionné l'une des principales causes du ralentissement de l'est :
catalog/model/catalog/product.php -> fonction publique getTotalProducts($data = array()) {
...
De mettre cela au début de la fonction:
Mettre ceci à la fin
En faisant cela, vous n'avez pas à commenter quoi que ce soit, mais le total des produits serait faux si il s'est mis à jour si une session est active.
Espère que ça aide.
Vous devez créer 02 index pour le mot-clé de requête et de colonnes dans OC_URL_ALIAS table. Vous serez impressionné par la vitesse.
J'ai utilisé PageSpeed Insight de Google pour mesurer la vitesse de mon site web.
Pour la première fois, le résultat est "Dans notre test, votre serveur a répondu en 12.2 secondes". Après la création de deux indices, le temps de réponse est de 7,8 secondes 🙂