2011-10-03 9 views
5

Pracuję nad projektem, w którym stworzyłem stronę internetową poświęconą turystyce. Wszystko się poprawia i generowany jest większy ruch. Problem leży w powolnych generowanych cenach. Ja i moi klienci doszliśmy do wniosku, że z powodu dostępnych funduszy memcache powinno załatwić sprawę. Wychodząc z tego, jak miałem zacząć, przepisałem stary kod ajax na nowy kod ajax jQuery. Niektóre inne posty z tego wieczoru trochę dotyczą tego tematu.Podczas wysyłania danych przez ajax, dane się gubią

Teraz mam następujący kod, który pokazuje pricetable przez pewien miesiącu:

function ShowPriceTable(targetElement, accommodationID, month) 
{ 
    $.ajax({ 
     type: "POST", 
     url: basePath + "/ajax/GetPriceTable.php", 
     data: "accommodationID="+accommodationID+"&month="+month, 
     success: function(data){ 
      $("#"+targetElement).html(data); 

      $.ajax({ 
       type: "POST", 
       url: basePath + "/ajax/WriteCache.php", 
       data: "accommodationID="+accommodationID+"&month="+month+"&data="+data, 
      }); 
     } 
    });   
} 

GetPriceTable.php jest duży plik, realizując wiele pytań i wiele pricecalculation odbywa się tam. Wszystko to powoduje powstanie tabeli HTML z cenami. To wyjście, przechowywane w data, jest wstrzykiwane we własność innerHTML elementu div, w tym przypadku targetElement, ponieważ musi być regulowana.

Pomyślałem, cóż .. kiedy mam poprawne wyjście w data Po prostu odpalam kolejne połączenie z WriteCache.php z danymi. Dane są następnie zapisywane na serwerze memcache przez $cache->set("my_key", $_POST["data"]); (nagłówki są używane i ustawione na przeszłości, aby zapewnić "nową" wizytę w przeglądarce).

Nadchodzi trudna część ... bez względu na to, co próbuję, dostaję DOKŁADNIE 4067 znaków w mojej pamięci podręcznej. Skończyły mi się opcje, które mogę wymyślić. To tylko niewielka część całkowitej wydajności ... Dodanie, alert z data.length pokazało mi w cenniku zakwaterowania, w którym patrzę, długość to 98.858.

Czy masz jakieś sugestie, co może być przyczyną tego dziwnego zachowania? Czy to możliwe, że dane są przesyłane krok po kroku? Memcache ma opcję chunk_size, domyślnie jest ustawiony na 8192 (bajty chyba ?, documentation nie mówią ..)

Każda pomoc jest bardzo ceniona!

Pozdrawiam!

P.s. tag memcached musi być memcache, ale nie mogę wybrać tej opcji.

Aktualizacja Problem jest nieistotny dla memcache. Z jakiegoś powodu moje dane się zmieniają, gdy są wysyłane ponownie. Powoduje to niepoprawny HTML, który z jakiegoś powodu nie jest ustawiony w pamięci podręcznej i nie jest wyświetlany w moich wynikach (poczta do siebie), ale kiedy wyprowadzam wynik (używając sukcesu: w drugim wywołaniu) do innego DIV, widzę "zniekształcone" wyjście ...

+0

Kolega miał podobny problem na początku zeszłego miesiąca, próbował wysłać więcej niż 1mb danych do serwera za pośrednictwem posta $ .ajax i wciąż nie działał. Musiał przesłać fragmenty o wielkości poniżej 1 miliona bajtów, co spowodowałoby awarię i nie wysłanie. Może twój błąd leży w podobnym miejscu? –

+0

Jakieś przemyślenia na temat sposobu wdrożenia takiego rozwiązania? – Ben

+0

Po prostu zgadnij, ale spróbuj 'dane:" accommodationID = "+ accidID +" & month = "+ month +" & data = "+ data.serialize(),' – alykhalid

Odpowiedz

1

Zorientowałem się, zajęło mi to cały wieczór ... Moje wyniki zawierają elementy HTML. I zgadłeś to. Obiekty HTML zaczynają się od znaku ampersand, który jest jednocześnie znacznikiem delimeter dla danych odzyskanych przez $_GET, $_POST lub $_REQUEST. Prosty escape(data) załatwił sprawę. Dziękuję wszystkim, którzy poświęcili czas na to.

0

Możesz spróbować ustawić MEMCACHE_COMPRESSED w php.ini lub przekazać jako flagę w ustawionej funkcji a la Memcache::set($key, $var, MEMCACHE_COMPRESSED);, aby skompresować wartość.

+0

Dziękuję za odpowiedź. Po wypróbowaniu wielu rzeczy doszedłem do wniosku, że 'dane' zostaje zmienione z jakiegoś powodu. Więc bez względu na to, co próbuję ustawić, wynik jest w pewnym sensie zepsuty. – Ben

+0

Przykro nam to słyszeć. Powodzenia. –

Powiązane problemy