Drupal 7 wkrótce zostanie wydany, więc wiele organizacji musi zdecydować, czy uaktualnić z Drupala 5 czy 6. Drupal jest w porządku, jeśli budujesz wiele stron internetowych i musisz szybko tworzyć nowe witryny bez większego kodowania lub po prostu potrzebujesz strona z treścią na temat sterydów na blogu.
Bieganie na Drupalu jest jak życie w podwójna szerokość : to najlepsze rozwiązanie, jeśli nie stać Cię na własny dom. Jeśli masz witrynę, która zaczęła się od Drupala i rozwinęła się na tyle, aby zatrudniać programistów pełnoetatowych, powinieneś rozważyć migrację swojej witryny do Ramy PHP Yii . (Bohaterowie PHP mogą śledzić Cebulę i używać Struktura Django Pythona , chociaż zmiana ram i języków programowania zajmie więcej czasu.)
Jestem CTO a teren który zmienił się z Drupala na Yii 30 kwietnia 2010 roku. Trudno było znaleźć informacje, kiedy debatowaliśmy nad przepisem i nie było nawet książka o Yii jeszcze. Było kilka komentarzy na temat zmiany Drupala na Yii, ale nie zawierały one wystarczającej ilości danych, aby mnie uspokoić. Obawiałem się, że Yii może być wolniejszy niż nasza mocno zoptymalizowana instalacja Drupala, więc postanowiłem przepisać rdzeń 20% naszej strony (która zapewniała 80% naszej funkcjonalności) w ciągu 30 dni. Wydawało się, że to świetny sposób na przetestowanie wydajności i wydajności frameworka Yii, a jeśli Yii nie poprawi się po tym miesiącu, zawsze będziemy mogli wrócić do Drupala i skopiować wszystkie nowe dane.
Yii był znacznie szybszy niż Drupal dla naszej witryny z 150 000 węzłów (każdy z przepisanym adresem URL) i 50 000 odwiedzających dziennie. Tak, pracowaliśmy szalone godziny przez te 30 dni (i kolejne 15), ale było warto. Czas, który wcześniej spędziliśmy pracując nad wolnymi zapytaniami Drupala, został lepiej wykorzystany, a rozwijanie go na Yii było o wiele przyjemniejsze niż na Drupalu. Prawdziwa korzyść z Yii pojawiła się później, kiedy przeprojektowaliśmy naszą stronę. Z MVC Yii musieliśmy zmienić tylko 2 pliki układu w porównaniu do kilkudziesięciu w Drupalu.
Chciałbym, żebyśmy przeszli rok wcześniej. Oto, czego się dowiedzieliśmy:
- Drupal nie jest najlepszym sposobem, aby uniknąć rozpoczęcia od zera . Głównym punktem sprzedaży Drupala dla deweloperów jest „ dlaczego przetaczasz swój własny CMS? ” Podobnie jak wielu innych programistów, pisałem całe aplikacje internetowe od podstaw (w 1999 i 2000 ) i doceniam możliwość skupienia się na unikalnych potrzebach biznesowych aplikacji zamiast pisania własnego kodu do obsługi wszystkich aspektów uwierzytelniania, walidacji formularzy, zapobiegania atakom SQL injection itp. Firma, której pomogłem znaleźć na początku 2007 r., miała prototyp na Drupalu i chciałem zobaczyć, co Drupal może zrobić, zanim wyrzucisz go na Ruby on Rails. Szał Ruby przypomniał mi szał Java w 1997 roku. Byłem stażystą w Konkurent WebEx w latach 1997-99, które zabiły ich wydajność, kodując swój serwer w Javie, zanim sprzęt serwerowy i optymalizacje VM pozwoliły na skalowalność. PHP sprawdziło się w przepisywaniu Friendster i na Facebooku, a nasi użytkownicy nie chcieli zobaczyć fail whale jeśli napotkaliśmy problemy ze skalowalnością w Ruby.
Oczywiście, łatwiej jest zacząć od Drupala, niż samemu kodować każdą linię PHP. Ale kilka frameworków PHP 5 zostało uruchomionych w 2008 roku i zostało poddanych testom 2009 . Programista PHP zaczynający się teraz od aplikacji internetowej (i pracujący w pełnym wymiarze godzin tylko na tej stronie) albo wybrałby framework, albo zaczął od podstaw i używał bibliotek PHP (PECL lub PEAR). - Jeśli Drupal jest tylko frameworkiem Rube Goldberg może to kochać . Drupal został zaprojektowany tak, aby był rozszerzalny bez większego programowania PHP. To dobrze, jeśli tylko projektujesz prostą stronę z treścią lub masz mały ruch. Jeśli pracujesz na pełnoetatowych modułach piszących w celu dostosowania formularzy i dodania funkcjonalności, poświęcisz więcej czasu na tłumienie funkcjonalności Drupala, której nie chcesz, niż budowanie na platformie. Yii ma odwrotne podejście - możesz użyć Ruby na ORM podobne do szyn jeśli jest wystarczająco szybki i optymalizuje tylko 10% zapytań wymagających ręcznie kodowanego MySQL.
- Moduły udostępniane przez społeczność są podatne na featuritis i błędy wynikające z niepotrzebnej złożoności . Istnieje zbyt wiele modułów Drupal, a jeśli masz programistów pracujących w pełnym wymiarze godzin, prawdopodobnie zdecydujesz, jak zrobiliśmy, aby przyswoić fragmenty dodanych modułów do własnych modułów niestandardowych. Doskonałym tego przykładem są moduły zmiany rozmiaru i buforowania obrazów Drupala. Ponieważ moduły są zaprojektowane tak, aby były ogólne (aby mogły pracować z dowolną liczbą innych modułów!), Zawierają mnóstwo funkcjonalności, których nigdy nie będziesz używać. W naszym przypadku musieliśmy stworzyć miniatury o różnych rozmiarach, które robi konwerter ImageMagick. Aby to uzyskać, musieliśmy włączyć 4 moduły, każdy z wieloma plikami php: ImageAPI, ImageAPI dla ImageMagick, ImageCache i interfejs ImageCache. Następnie rzeczywiste polecenia do generowania miniatur znajdują się w 2 tabelach w bazie danych. Jeśli to przestanie działać po uaktualnieniu części łańcucha, zdiagnozowanie problemu zajmie znacznie więcej czasu, niż gdybyś zbudował tylko to, czego potrzebujesz.
Yii ma również rozszerzenie do zmiany rozmiaru obrazu (dostosowane z biblioteki obrazów Kohana), ale jest to skomplikowane, ponieważ pozwala łatwo przełączać się między ImageMagick i GD. (GD ma problemy z obrazami 2 MB +.) Mimo to wciąż nie można było zmienić rozmiaru zdjęć w locie za pomocą reguły RewriteRule, jeśli miniaturka nie istniała. Stworzyłem więc prosty plik index.php, który obsługuje tylko wywołania zwrotne RewriteRule na dedykowanym wirtualnym obrazie obrazu i wysyła polecenia ucieczki z powłoką bezpośrednio do pliku binarnego convert. Oznacza to, że wywołania zwrotne RewriteRule nie przechodzą przez plik index.php Yii, co zmniejsza obciążenie i czas wymagany na operacje zmiany rozmiaru i pamięci podręcznej obrazu. Jest to tylko strona PHP, a argumenty są wysyłane w jednym wywołaniu do pliku binarnego convert, więc znacznie łatwiej jest go przetestować i utrzymać, gdy uaktualniamy ImageMagick. - Drupal ma bagaż w PHP 4 . Gdy zdecydowałem się rozważyć frameworki PHP, szybko zdałem sobie sprawę z tego, że chcę mieć tylko 100% ścisłą strukturę OOP PHP 5. Nie widzisz wielu ludzi, którzy twierdzą, że proceduralne „haki” Drupala są lepsze niż OOP. Podczas gdy Drupal 7 wymaga PHP 5, podobnie jak CodeIgniter i inne starsze frameworki PHP, wciąż niesie bagaż kompatybilności wstecznej. Kto chce bagaż kogoś innego?
- Nie chcę Drupal 6 lub 7, aby spowolnić Drupala 5 teren? Zajmij się przestarzałym jQuery . W większości witryn jest to w porządku. Naprawdę zależy nam na szybkości, ponieważ Google i Microsoft wykazały, że użytkownicy są bardziej lojalni wobec szybkich witryn. W 2009 r., Kiedy Drupal 6 został wydany i założony, utknęliśmy z Drupalem 5 ze względu na wymierną przewagę szybkości. Problem polega na tym, że Drupal 5 zawiera jQuery 1.0. Możesz dodać moduł współużytkowany, aby załatać jQuery do 1.2 (i zaktualizować funkcje Drupala, które się do niego odnoszą), ale to nadal jest stara wersja. Zapomnij o jQuery 1.3x i Drupal 5.
- Drupal Field API Kit (CCK) doprowadzi Cię do szaleństwa i jest częścią Drupala 7 core . Po co używać $ node-> ip, kiedy możesz użyć $ node-> field_ip [0] ['value']. A jeśli zdecydujesz, że oba typy zawartości powinny mieć pole tekstowe o tej samej nazwie, CCK umieści je w swojej własnej tabeli (content_field_ip) z zachwycającymi nazwami kolumn (wartość_pola_pola). Jasne, Drupal może rozwikłać ten bałagan, gdy załadowany zostanie pełny węzeł, ale nie jest ładny w bazie danych. Zapytania MySQL będą wymagały wielu lewych złączeń, aby obsłużyć wszystkie dodatkowe tabele CCK, a te niepotrzebnie złożone zapytania zbyt często kończą się w dzienniku wolnych zapytań. W końcu miałem dość optymalizacji wszystkich tych wolnych zapytań i postanowiłem pozbyć się CCK, co doprowadziło mnie do frameworków PHP, a następnie do Yii.
Migracja naszych danych do Yii zajęła mniej więcej tyle samo czasu, ile musiałoby wywalić nawyk CCK, pozostając na Drupalu. Jednak udało nam się rozpocząć od czystej bazy danych bez wszystkich dodatkowych tabel używanych przez Drupala do celów wewnętrznych. Nasz stary DB miał 173 tabele; nasz nowy ma 54. - Drupal jest dużo wolniejszy niż Yii . Drupal skaluje się tylko wtedy, gdy buforujesz WSZYSTKO za pomocą memcached i APC i przepisujesz wszystkie wolne zapytania. Buforowanie jest szczególnie ważne, jeśli używasz przyjaznych SEO przepisanych adresów URL dla wszystkich linków, ponieważ każda funkcja l () jest oddzielnym wywołaniem bazy danych. Tak więc średnia strona zawiera ponad 50 zapytań, w porównaniu z 3-5 w Yii. Po przełączeniu nasz średni czas pobierania strony zmniejszył się ze 162 ms do 67 ms zgodnie z Narzędziami Google dla webmasterów. Co więcej, Yii + APC jest tak szybki, że nie musimy używać memchached, upraszczając nasz kod i operacje.
Nasze statystyki serwera mówią same za siebie - za taką samą liczbę jednoczesnych żądań gości (procesy Apache) wykorzystanie DB i CPU poszło w dół. Wykorzystanie pamięci pozostało na tym samym poziomie. W ciągu ostatniego roku nasz ruch zwiększył od 60% do 1,5 miliona odwiedzin miesięcznych, podczas gdy zapytania MySQL spadły o 66%
Kto chce bagaż kogoś innego?