Tjänster Case Study Blogg Om oss Kontakt
Vi analyserade 5 e-handelsplattformar — Här är resultaten

Vi analyserade 5 e-handelsplattformar — Här är resultaten

Introduktion

Alla e-handelsföretag ställs inför samma beslut: bygga på en befintlig plattform med öppen källkod, eller bygga skräddarsytt? Den konventionella visdomen säger "uppfinn inte hjulet på nytt." Men tänk om hjulet har 88 000 typfel?

Vi tog fem av de mest populära PHP-baserade e-handelsplattformarna med öppen källkod — OpenCart 4.1, Drupal Commerce, PrestaShop 9.0, WooCommerce 9.6 och Magento 2.4 — och körde dem genom samma batteri av analysverktyg. Sedan genererade vi motsvarande e-handelsmoduler med Claude Code (Anthropics AI-kodningsassistent) och körde den identiska analysen.

Det här är inget angrepp mot öppen källkod. Dessa plattformar driver miljontals butiker och har förtjänat sin plats i ekosystemet. Men datan berättar en historia om teknisk skuld, dolda kostnader, och varför ekonomin för skräddarsydd utveckling har förändrats i grunden.

Metodik

Vi analyserade varje plattforms kärna för e-handel (kassa, betalning, katalog, autentisering) med sex verktyg:

P5
PHPStan Nivå 5
Typfel, odefinierade variabler, grundläggande logikproblem
P8
PHPStan Nivå 8
Strikt typkontroll, unionstyper, generics
MD
PHPMD
Kodkomplexitet, död kod, namngivning, designproblem
CS
PHPCS (PSR-12)
Efterlevnad av kodstandard
PS
Psalm (taint-analys)
SQL-injektion, XSS, analys av säkerhetsflöden
PP
Progpilot
Kompletterande detektering av säkerhetsmönster

Vi körde också grep-baserade granskningar av mallar och källkod för SEO-implementering, Schema.org strukturerad data, frontend-prestandamönster, serversidig resursanvändning och intern länkningskvalitet.

För Claude Code-jämförelsen genererade vi ~9 500 rader PHP 8.2-kod fördelat på fyra moduler (kassa, autentisering, betalning, katalog) plus tre HTML-malldemonstationer — och körde sedan exakt samma verktyg mot dem.

1. Övergripande resultat av statisk analys

Rådata: antal fel per plattform och verktyg.

Totala felantal

PlattformPHPStan L5PHPStan L8PHPMDPHPCSProgpilotTotalt
OpenCart 4.12 9993 0122 37814 422019 799
Drupal Commerce4 2095 3242 80813 664020 681
PrestaShop 9.059 11973 50629 5997 78215596 655
WooCommerce 9.646 09359 62643 814532 1820622 089
Magento 2.475 22682 2736 1846 795088 205
Claude Code15621931240332

WooCommerces 532 182 PHPCS-fel förtjänar kontext: WordPress använder sin egen kodstandard, inte PSR-12. Det gapet speglar en genuin stilinkompatibilitet med det bredare PHP-ekosystemet — men det betyder också att varje utvecklare som rör sig mellan WooCommerce och standard-PHP måste mentalt byta kontext.

Totala fel per plattform (linjär skala, Claude Code-fältet är knappt synligt)
OpenCart
19 799
Drupal Commerce
20 681
PrestaShop
96 655
Magento 2
88 205
WooCommerce
622 089
Claude Code
332

Normaliserat: Fel per 1 000 rader kod

Rena antal gynnar mindre kodbaser. Här är jämförelsen per 1 000 rader:

PlattformPHP-raderPHPStan L5/1KPHPMD/1KPHPCS/1KTotalt/1K
OpenCart 4.116 803178,5141,5858,31 178,3
Drupal Commerce28 493147,798,6479,6725,8
PrestaShop 9.0656 60190,045,111,9147,2
WooCommerce 9.6398 688115,6109,91 334,81 560,3
Magento 2.4383 354196,216,117,7230,1
Claude Code9 5351,620,213,034,8

Även normaliserat producerar Claude Code 4–45 gånger färre problem per tusen rader än plattformarna med öppen källkod. Magento kommer närmast på PHPMD och PHPCS (Adobe har investerat betydligt i kodkvalitetsverktyg), men alla plattformar visar 90–196 PHPStan-fel per 1 000 rader jämfört med Claude Codes 1,6.

34,8
Claude Code — fel/1K rader
147,2
PrestaShop — bäst bland OSS
1 560
WooCommerce — högst fel/1K
4–45x
Claude Codes fördel

2. Säkerhetsfynd

Prepared Statements ! SQL- konkatenerering PDO parametrar

SQL-konstruktionsmönster

Det mest kritiska fyndet över plattformarna är hur SQL-frågor konstrueras. OpenCart bygger framför allt frågor genom strängkonkatenering:

OpenCart — admin/model/catalog/product.php rad 242
$this->db->query("UPDATE `" . DB_PREFIX . "product` SET
    `model` = '" . $this->db->escape((string)$data['model']) . "',
    `location` = '" . $this->db->escape((string)$data['location']) . "',
    `quantity` = '" . (int)$data['quantity'] . "',
    `price` = '" . (float)$data['price'] . "'
    WHERE `product_id` = '" . (int)$product_id . "'");

Detta mönster förlitar sig på manuell escaping istället för parametriserade frågor. Även om typkonverteringen ger visst skydd är det ett känt antimönster som bara ligger ett saknat escape()-anrop från en SQL-injektionssårbarhet.

Claude Code — catalog/ProductRepository.php
$stmt = $this->pdo->prepare(
    'UPDATE products SET
        model = :model, location = :location,
        quantity = :quantity, price = :price
     WHERE id = :id'
);
$stmt->execute([
    ':model'    => $data['model'],
    ':location' => $data['location'],
    ':quantity' => $data['quantity'],
    ':price'    => $data['price'],
    ':id'       => $productId,
]);

Noll strängkonkatenering. PDO:s prepared statements hanterar escaping på drivrutinsnivå, vilket eliminerar hela klassen av sårbarheter.

SQL-konkatenerering över plattformarna

Antal instanser av SQL-strängkonkatenerering
OpenCart
424
Magento 2
12
PrestaShop
9
WooCommerce
2
Drupal Commerce
0
Claude Code
0

Drupal Commerce förtjänar beröm här — Drupals databasabstraktionslager tvingar fram prepared statements av design.

Progpilot-säkerhetsfynd

Progpilot hittade 155 potentiella säkerhetsproblem i PrestaShops kärnklasser, inklusive förorenade dataflöden till filoperationer och databasfrågor.

3. Typsäkerhet och logikfel

PHPStan Nivå 5 fångar verkliga problem: åtkomst av egenskaper på potentiellt null-objekt, fel typer som skickas till funktioner och åtkomst av odefinierade variabler.

Magento 2 leder i rena PHPStan-fel (75 226 på Nivå 5) delvis på grund av sin enorma kodbas och tunga användning av kodgenerering.

WooCommerce visar 46 093 Nivå 5-fel, vilket speglar WordPress historiskt lösa typning.

Claude Codes 15 PHPStan L5-fel (1,6 per 1K rader) representerar kantfall där PHPStans inferens inte håller med om runtime-beteendet — inte strukturella typsäkerhetsproblem.

PHPStan Nivå 8 — striktaste läget

PlattformPHPStan L8 FelL8/1K rader
Magento 2.482 273214,6
PrestaShop 9.073 506111,9
WooCommerce 9.659 626149,6
Drupal Commerce5 324186,8
OpenCart 4.13 012179,3
Claude Code626,5

4. Kodkvalitet: komplexitet och design

PHPMD mäter cyklomatisk komplexitet, överdrivet långa klasser, oanvända parametrar och namngivningsbrott.

PlattformPHPMD-brottPer 1K rader
WooCommerce 9.643 814109,9
PrestaShop 9.029 59945,1
Magento 2.46 18416,1
Drupal Commerce2 80898,6
OpenCart 4.12 378141,5
Claude Code19320,2

De vanligaste PHPMD-problemen: CyclomaticComplexity (metoder med 20+ beslutsgrenar), ExcessiveMethodLength (metoder >100 rader), CouplingBetweenObjects (klasser med 13+ beroenden), UnusedFormalParameter och BooleanArgumentFlag.

5. SEO-implementering

Vi skannade mallar och källkod efter grundläggande SEO-element. Resultaten är oroande.

PlattformSaknar altHårdkodade URL:erMallar m/ canonicalMallar m/ hreflang
OpenCart 4.1000 av 0*0
Drupal Commerce020 av 8460
PrestaShop 9.0000 av 30
WooCommerce 9.6100 av 1900
Magento 2.41510 av 495
Claude Code003 av 33

Viktigt förbehåll: Dessa plattformar förlitar sig tungt på tillägg/plugins för SEO. De "saknade" canonical-taggarna och strukturerad data tillhandahålls ofta av tredjepartsmoduler. Men det är just poängen — varje plugin är ytterligare ett beroende, ytterligare en prenumeration, ytterligare ett potentiellt kompatibilitetsproblem.

6. Strukturerad data / Schema.org

Googles rika resultat — stjärnbetyg, prisintervall, tillgänglighetsikoner, brödsmulor — kräver alla strukturerad data.

PlattformProductBreadcrumbOfferReviewJSON-LDMicrodataOrganization
OpenCart 4.1NejNejJaNej939Nej
Drupal CommerceNejNejNejJa00Nej
PrestaShop 9.0NejNejNejNej01Nej
WooCommerce 9.6NejJaNejNej10Nej
Magento 2.4NejJaNejJa010Nej
Claude CodeJaJaJaJa64Ja

Ingen plattform levererar komplett Product-schema i kärnan. Claude Codes mallar demonstrerar hela uppsättningen: Product, Offer, AggregateRating, BreadcrumbList och Organization — allt i JSON-LD-format.

7. Intern länkning

Intern länkning är gratis SEO-kapital. Så här hanterar plattformarna det:

PlattformNofollow interntBrödsmulorRelaterat/Korsförs.PagineringTom hrefJS-navigation
OpenCart 4.13Ja (1 758)Ja (712)Nej142178
Drupal Commerce0Ja (34)Ja (19)Nej00
PrestaShop 9.02Ja (373)Ja (373)Nej6712
WooCommerce 9.69Ja (122)Ja (577)Nej782
Magento 2.42Ja (1 496)Ja (2 066)Nej39137
Claude Code0Ja (5)Ja (2)Ja (3)00

8. Frontend-prestandamönster

PlattformBlockerande scriptBlockerande CSSUtan lazy loadUtan srcsetWebP-ref.Preload-tips
OpenCart 4.1000000
Drupal Commerce000000
PrestaShop 9.0000010
WooCommerce 9.6016600
Magento 2.4131 5921 59540
Claude Code0501417

Magento 2 sticker ut med 1 592 bilder som saknar loading="lazy" och 1 595 som saknar srcset.

9. Serversidig resursanvändning

PlattformObegränsad SELECTSQL-konkatenereringN+1-mönster
OpenCart 4.17834240
PrestaShop 9.028190
WooCommerce 9.624920
Magento 2.410120
Drupal Commerce000
Claude Code000

Obegränsade frågor (SELECT utan LIMIT) är en tickande bomb för skalning. OpenCart har 783 instanser av detta mönster.

10. Shopify-faktorn

Vi klonade också Shopifys Dawn-tema (v15.0.0) och Shopify CLI (senaste). I 1 221 TypeScript-filer hittade vi:

  • 258 användningar av typen any
  • 42 @ts-ignore/@ts-expect-error-undertryckningar
  • 9 console.log-satser i icke-testkod

Även Shopify — med miljarder i omsättning — levererar kod med luckor i typsäkerheten. Poängen: teknisk skuld är oundviklig i stor skala, oavsett budget.

11. Vad detta innebär för ditt företag

Den dolda kostnaden för "gratis" plattformar

Säkerhetslappar är ditt ansvar

Med 424 SQL-konkateneringsmönster bara i OpenCart ärver du risk som kräver ständig vaksamhet.

Prestanda kräver plugins

Lazy loading, WebP-stöd, preload-tips — inget levereras i de flesta plattformars kärna.

SEO är en plugin-stack

Canonical-taggar, hreflang, strukturerad data — allt kräver tredjepartsmoduler.

Du äger inte arkitekturen

Din affärslogik lever inuti någon annans ramverksbeslut, optimerade för medelanvändaren.

Varför skräddarsytt är vettigt nu

9 535
Rader produktionskvalitets-PHP
34,8
Fel/1K rader vs 147–1 560
6/6
Schema-täckning från dag ett
0 kr
Prenumerationsavgifter

Detta betyder inte att öppen källkod är dåligt

Plattformar med öppen källkod är stridstestade med miljontals butiker. Argumentet är "börja rent" — inte "öppen källkod är dåligt."

12. Metodik och begränsningar

Vad vi analyserade

  • OpenCart 4.1.0.3, Drupal Commerce 8.x-2.x, PrestaShop 9.0.3, WooCommerce 9.6.2, Magento 2.4.8-beta1
  • Claude Code: Alla fyra moduler (kassa, autentisering, betalning, katalog)

Begränsningar

  • Ingen autoloading — PHPStan producerar falskt positiva utan composer install
  • Begränsningar i mallskanning — vissa plattformar renderar SEO-taggar dynamiskt
  • Olika kodbas-storlekar — normaliserade per-1K-tal kompenserar
  • WooCommerce följer WordPress Coding Standards, inte PSR-12
  • Ögonblicksbildsanalys — fynd kan åtgärdas i framtida versioner

Verktyg och versioner

2.1
PHPStan 2.1.40
6.15
Psalm 6.15.1
2.15
PHPMD 2.15.0
3.13
PHP_CodeSniffer 3.13.5
1.2
Progpilot 1.2.0
8.2
PHP 8.2.29

Slutsats

Datan är tydlig: e-handelsplattformar med öppen källkod bär på betydande teknisk skuld. Men om du startar ett nytt projekt idag kan du börja rent med modern kod som klarar strikt statisk analys, levereras med korrekt SEO och använder prepared statements som standard.

AI-assisterad utveckling har inte bara gjort skräddarsydd kod snabbare att skriva. Den har gjort den bättre än vad de flesta plattformar med öppen källkod levererar direkt ur lådan.

Frågan är inte om du har råd med skräddarsydd utveckling.
Det är om du har råd att låta bli.