php - Magento가 왜 그렇게 느린가요?




optimization (10)

기능 대 성능도 고려해야합니다.

원시 성능은 nginx, php-fpm, memcached, apc 및 적절한 설계 서버를 사용하여 얻게됩니다.

plesk 및 magento 성능과 같은 기능은 magento 성능 클라우드를 설계 할 때 전체 인프라를 원근감있게 관리하여 관리 할 수 ​​있습니다.

Magento는 대단히 느린가?

이것이 처음 경험인데 관리자 패널은 변경 사항을로드하고 저장하는 데 오래 걸립니다. 테스트 데이터가있는 기본 설치입니다.

호스팅되는 서버는 Magento가 아닌 다른 사이트를 매우 빠르게 제공합니다. Magento가 사용하는 PHP 코드가 너무 느려서 그것을 고칠 수있는 방법은 무엇입니까?


Apache에서 LiteSpeed로 전환하면 많은 도움이되었습니다. 추가적으로 : MySQL의 설정 편집, Fooman Speedster (js 및 css 파일 압축 / 결합 모듈) 설치 및 APC 설치. Magento는 엔터프라이즈 에디션에서 최상의 성능을 얻는 방법에 대한 백서를 게시했으나 다른 버전에도 똑같이 적용됩니다. http://www.magentocommerce.com/whitepaper/


처음 설치했을 때 30 초가 걸리는 페이지가있었습니다. 내 서버가 숫양이나 프로세서에서 초과되지 않았으므로 어떻게해야할지 몰랐습니다. 방화 광구의 넷 패널을 보면 페이지 당 약 100 개의 파일을로드하고 있으며 각 파일은 연결하는 데 오랜 시간이 걸렸습니다. foom 스피드 스타를 설치 한 후 htaccess로드 시간에 gzip을 사용하면 서버에있는 다른 장바구니에 있던 것처럼 3 초가 걸렸습니다.


필자는 성능 향상을 위해 Magento를 최적화하는 데에만 접하게되어 있었지만, 시스템이 너무 느린 몇 가지 이유가 있습니다.

  1. Magento의 일부는 MySQL 위에 구현 된 EAV 데이터베이스 시스템을 사용합니다. 즉, 하나의 "물건"을 쿼리하는 것은 종종 여러 행을 쿼리하는 것을 의미합니다.

  2. 거대한 XML 트리를 메모리에 구축 한 다음 동일한 트리를 정보에 대해 "쿼리"하는 것과 관련된 많은 것들 (응용 프로그램 구성, 시스템 구성, 레이아웃 구성 등)이 있습니다. 이것은 메모리 (트리 저장)와 CPU (트리 구문 분석)를 모두 사용합니다. 이 중 일부는 (특히 레이아웃 트리) 거대합니다. 또한 캐싱이 설정되어 있지 않으면이 트리가 디스크의 파일각 요청에 따라 작성 됩니다.

  3. Magento는 구성 시스템을 사용하여 클래스를 재정의 할 수 있습니다. 이는 강력한 기능이지만 모델, 헬퍼 또는 컨트롤러가 인스턴스화 될 때마다 원래 클래스 파일 또는 대체 클래스 파일이 필요한지 여부를 결정하기 위해 추가 PHP 지침을 실행해야합니다. 이것은 합산한다.

  4. 레이아웃 시스템 외에도 Magento의 템플릿 시스템에는 많은 재귀 렌더링이 필요합니다. 이것은 합산한다.

일반적으로 Magento 엔지니어는 가능한 한 가장 유연하고 사용자 정의 가능한 시스템을 구축하고 나중에 성능에 대해 걱정해야했습니다.

더 나은 성능을 보장하기 위해 할 수있는 첫 번째 일은 캐싱을 켜는 것입니다 (시스템 -> 캐시 관리). 이것은 Magento가 다양한 XML 트리를 구축하는 동안 진행되는 CPU / 디스크 블로킹을 완화합니다.

두 번째로해야 할 일은 호스트 및 운영 팀 이 Magento의 성능 튜닝 경험이 있는지 확인하는 것 입니다. 한 달에 7 달러 씩을 볼 계획이라면, 그걸로 행운을 빈다.


Magento 장바구니가 느리게 돌아갈 수는 있지만 여러 가지 방법으로 문제를 해결하고 빠른 속도로 처리 할 수있는 이유는 많습니다. htaccess 파일을 수정하여 Gzip을 사용하도록 설정하는 것이 처음입니다. 당신은 또한 fooman 스피드 익스텐션을 설치할 수 있습니다. 사용되는 서 v 유형도 상점 속도를 결정합니다. 더 많은 팁과 더 나은 설명은 여기 http://www.interactone.com/how-to-speed-up-magento/


나는 단지 Magento와 피상적 인 경험이 있습니다. 공유 그리드 서버에 설치했는데 페이지 로딩은 약 5 초 미만이었습니다. 전설적인 CMS 사이트에 최적화 된 CMS 사이트에 설치했는데 매우 슬프다.

나의 열성적인 접대에는 ~ 10 Joomla가 있었다! 사이트 및 실행중인 VBullitin 사이트.

내 생각에 공유 호스팅에서는 실적이 좋지 않을 것입니다. 초과 구독으로 Magento가 실행해야하는 충분한 리소스가 허용되지 않습니다.


Magento는 데이터베이스 디자인이 좋지 않기 때문에 매우 느립니다. 코드는 혼란스럽고 업데이트하고 최적화하기가 매우 어렵습니다. 따라서 모든 최적화는 코드 대신 캐시를 통해 수행됩니다.

반면에. 그것은 많은 도구가있는 웹샵입니다. 따라서 유연한 웹샵이 필요하다면 매우 강력한 서버를 구입하면됩니다.


Alan Storm의 캐싱 권장 사항 외에도 캐싱과 관련하여 특별히 살펴볼 두 가지가 있습니다.

- 캐싱이 디스크가 아닌 memcached에 있는지 확인하십시오.

몇 가지 magento 설치를 살펴본 후 시스템에 어떤 종류의 부하가 발생하면 memcached가 훨씬 빨리 수행하기 시작합니다. 그리고 죽은 사람이 쉽게 바꾸기가 쉽습니다 (최소한 다른 magento를 사용하는 것과 관련이 있습니다!)

좋은 출발점은 여기에 있습니다 : http://www.magentocommerce.com/boards/viewthread/12998/P30/ -하지만 memcached를 전혀 사용하지 않았다면 그것에 대한 일반적인 정보를 볼 가치가 있습니다.

- 템플릿 /보기 캐싱을 사용합니다.

이것은 좋은 기사입니다 : http://inchoo.net/ecommerce/magento/magento-block-caching/

Magento 사이트에도 좋은 것들이 있지만 (Google magento 블록 캐싱), 순간적으로 내려갑니다.

내 두 센트를 블록 캐싱에 추가하려면 / app / code / local에 고유 한 블록을 만들고 핵심 매개 변수를 확장하고 캐시 매개 변수를 정의하고 xxx_Cache로 이름을 지정한 다음 대신이 블록을 사용하도록 레이아웃을 업데이트하는 것이 좋습니다. 중핵 것의. 이렇게하면 Magento를 업그레이드 할 때 변경 사항을 잃지 않거나 시스템을 중단하지 않아도됩니다.


회사에서 관리되는 서버 최적화에 좀 더 관여하고 있지만 몇 가지 팁이 있습니다. 먼저 Zend 서버의 코드 추적 기능을 사용하여 코드를 자세히 볼 수 있습니다. 물건을 더럽힐 때 언제 어디에서 볼 수 있습니다.

캐시와 관련하여 벤 룸리의 고려 사항을 전적으로 공유합니다. 우리가 호스팅하는 대부분의 사이트에는 블럭 캐싱이 활성화되어 있지 않습니다. 이 캐쉬는 명시 적으로 호출되어야하고 "가정"되지 않아야합니다. 따라서 코드가 아직이 메커니즘에 참여하지 않았다면 꼭 시도하고 싶은 것입니다. EE 버전을 가지고 있다면, 짐승의 베스트를 얻기 위해 전체 페이지를 얻을 수 있습니다.

역방향 프록시도 많은 도움이됩니다. 정적 소스를 캐시하여 프런트 서버의 PHP 해석 스택에 대한 부담을 크게 줄입니다.

RAM 디스크에 세션 및 Magento 캐시를 작성하는 것을 잊지 마십시오. 이것은 또한 확실히 다른 수준의 공연으로 당신을 데려 갈 것입니다.

여기에 언급해야 할 것이 많지만 시간이 없습니다. 1.4.1 CE 버전으로 잘 코딩되어 있고 2x5650 Xeon + 16GB RAM 서버에서 실행되고 상단에 Rproxy가있는 좋은 사이트는 모든 사람에게 매끄러운 페이지로 하루에 최대 50,000 명의 고유 방문자를 수용 할 수 있음을 알아야합니다 .


더 나은 접근 방법은 먼저 경로에 realpath 를 사용하는 것입니다. realpath 는 파일이 존재하지 않으면 false 를 반환합니다.

$filename = realpath(getcwd() . "/fileERROR.php5");
$filename && return require($filename);
trigger_error("Could not find file {$filename}", E_USER_ERROR);

PHP의 require 함수를 감싸는 앱 namespace 에 자신 만의 require 함수를 만들 수도 있습니다

namespace app;

function require_safe($filename) {
  $path = realpath(getcwd() . $filename);
  $path && return require($path);
  trigger_error("Could not find file {$path}", E_USER_ERROR);
}

이제 파일 어디서나 사용할 수 있습니다.

namespace app;

require_safe("fileERROR.php5");




php magento optimization