2016-08-30 6 views
6

Chcę uzyskać nieznaną liczbę rzeczywistych plików .json, pobrać kilka wartości z plików i wprowadzić je na stronie internetowej.Używanie PHP do uzyskania położenia pliku, który będzie używany w JavaScript

mój pełny kod jest tutaj: https://gist.github.com/anonymous/e4f4488951efbdfe3431eeabbe980d80

nie mogę określić, jak wiele plików/folderów nie może być w moim projekcie, więc mam do wykorzystania dla pętli do pętli tablicy PHP, który sprawdza katalog pliku na moim serwerze i określa, ile "pól" musi utworzyć na stronie.

Oto zrzut ekranu, co moja strona wygląda

enter image description here

Na samej stronie, są 4 „pudełka”, które posiadają tytuł environment, każda z tych skrzynek środowiska zawierają nieokreślonej liczby features (wszystkie te są nazwami folderów na moim serwerze). Wewnątrz każdego feature znajduje się niedostateczna liczba folderów o nazwach date, każdy date ma niezdefiniowaną liczbę folderów, które są nazywane times, za każdym razem zawiera dwa pliki, plik .json, z którego chcę odczytać informacje oraz .html plik, do którego chcę podać link, gdy kliknę przycisk times (patrz zrzut ekranu).

W tej chwili, dla 4 środowisk, 2 funkcji każdego, 5 dni w każdej funkcji i 12 folderów czasowych w ciągu każdego dnia, strona generuje około 90 000 linii kodu, co moim zdaniem nie jest najlepszym rozwiązaniem, ponieważ zajmuje około ~ 11s, aby załadować samą stronę.

Czy istnieje skuteczniejszy sposób wywoływania każdego pliku .json, pobierania danych i wstawiania ich do strony internetowej? Jeśli tak, czy ktoś mógłby podać mi przykład, jak to zrobić?

Edit - jeśli kod jest trudny do naśladowania:

The folderStructure 6 wymiarowych wartości przechowuje tablicy następująco:

$folderStructure[$e][$f][$d][$t][][]
$e -> Nazwa Środowisko
$f -> Cecha Nazwa
$d -> Data
$t -> Czas
Position 5 -> Nazwa .json pliku
Position 6 -> nazwa .html plik

Przykład jak używać tablicę 6D pobierać folderu & nazwy plików:
$folderStructure[0][0][0][0][0][0] = produkcja
$folderStructure[0][1][0][0][0][0] = 2-D Porównaj
$folderStructure[0][1][1][0][0][0] = 2016-08-24
$folderStructure[0][1][1][1][0][0] = 12,01.47
$folderStructure[0][1][1][1][1][0] = production2-dcompare2016-08-2412-01-47.json
$folderStructure[0][1][1][1][1][1] = production2-dcompare2016-08-2412-01-47.html

I ja za pomocą pętli dla każdej z tych pozycji tablicy iterację wartości.

+0

Czy rozważałeś użycie bazy danych? –

+0

@SamDufel Całkowicie możliwe, ale nie chcę szczególnie mieć 1000 nieistotnych wierszy po 28 dniach, kiedy dni zostaną usunięte z serwera: \ (Prawdopodobnie powinienem wspomnieć o tym w pytaniu, mój błąd) – twodimensionalmirrorsymmetrica

Odpowiedz

1

W zależności od tego, jak świeże wyniki powinny być można:

1 Utwórz zadanie cron buforować wyświetlamy PHP co godzinę.

2 Pokaż wyniki na żądanie, za pomocą AJAX, co oznacza:

  • na stronie obciążenia wyświetlić listę środowisk
  • na kliknięcia Środowiska (popytu), wysłać żądanie, aby uzyskać Features
  • na Kliknij, poproś o listę dni

Można również połączyć te dwie metody.

+0

Czy zatem działa prosta metoda '.load()' JQuery? Ale jaki jest skuteczny sposób na odzyskanie konkretnej funkcji ze środowiska, a następnie dni i raporty? – twodimensionalmirrorsymmetrica

+0

Pomyśl o tym w ten sposób: Jedna prośba AJAX dla każdego ze swoich wymiarów. Nie musisz żądać wszystkich danych, tylko jeden żąda odwiedzających. – skobaljic

0

Zdecydowanie zamierzasz przetworzyć dane w jakiś sposób. Można:

  • Ustaw cykliczne zadania (cron?) Do spożycia dane
  • Skonfiguruj Obserwator systemu plików, aby podnieść zmian w plikach i zaktualizuj pamięć podręczną, gdy zmieni

Jeśli chodzi o to, czego używasz do przechowywania tych danych, zależy to w większości od sposobu, w jaki zamierzasz uzyskać do nich dostęp. Jeśli łatwo wyciągasz całą kolekcję za każdym razem, dobrze jest po prostu spłaszczyć ją w jednym pliku. Możesz również zajrzeć do czegoś takiego, jak przy użyciu instancji MongoDB z indeksem TTL, który wygasa stare rekordy, lub serwera memcache/redis dla bardzo szybkiego odczytu.

Powiązane problemy