Witam serdecznie,
postanowiłem stworzyć projekt który pozwoliłby mi na usystematyzowanie dotychczasowej wiedzy a więc wykorzystujący Mongo Express React Node. Mój wybór padł na zrealizowanie automatu komórkowego Game of Life, nie będę się nad tym rozwodził bo w zakładce About można o tym poczytać. W "grze" można wczytywać struktury już zapisane przezemnie, tworzyć własne struktury a po zalogowaniu także zapisywać je do local storage, poza tym można zmieniać ilość pożądanych fps i wielkość planszy. W trakcie tworzenia pojawiało się w mojej głowie wiele pytań m.in.:
1) Memory leaks- w dokumentacji express-session jest napisane żeby go nie używać w produkcji bo używa MemoryStore a ten powoduje "memory leaks", dlatego użyłem MongoStore aczkolwiek nie do końca to rozumiem. Na msdn jest napisane, że każda aplikacja musi "oczyszczać" dynamicznie alokowaną pamięć kiedy kończy jej używać a jeśli tego nie robi to wtedy właśnie pojawia się memory leak. Natomiast z dawnej nauki c++ pamiętam, że określało się z góry wielkość tablicy a jeśli się nie wiedziało jaka tablica jest potrzebna to wtedy właśnie używało się dynamicznie alokowanej pamięci. Natomiast w js nie określamy wielkości tablicy, czyli co, zawsze używa się dynamicznie alokowanej pamięci i ona jest jakoś automatycznie oczyszczana? Jeśli pisze tu herezje to wybaczcie ale trochę się pogubiłem w tym temacie i prosiłbym o wyjaśnienie.
2) Optymalizacja- na moim kompie (i5-6200U, 8gb ram, dysk ssd) i przeglądarce Google Chrome ver. 59.0.3071.115 przy największej planszy (50x60) chodzi z największa możliwą do ustawienia prędkością- 20fps. Natomiast już na Mozilli ver. 54.0.1 wydajność drastycznie spada (max. 10fps), już nawet na Microsoft Edge jest więcej (~15fps). Dlatego chciałem zapytać czy to jest moja wina jako programisty? Powininem to jakoś zoptymalizować? W trakcie pisania kodu starałem się zwracać uwagę na optymalizację i np. wiązałem istotne dla działania silnika gry funkcje z kontekstem wywołania już w konstruktorze zamiast używać arrow functions bo czytałem, że to zwalnia program, tak samo w webpack.prod.config.js dodałem pluginy które mają pomóc zoptymalizować apke. Na co jeszcze powinienem zwrócić uwagę?
3) Testy- czy na tym poziomie zawracać sobie wgl tym głowę? Próbowałem z Mocha i Chai ale konfiguracja dla React'a wydawała mi się strasznie skomplikowana.
4) PropTypes- czy konieczne jest ich określanie dla każdego komponentu React? To bardzo uciążliwe..
Zdaje sobie sprawę, że kod się trochę rozrósł a każdy z Was ma swoje rzeczy do roboty i nie będzie mi wszystkiego przeglądał lecz będę wdzięczny za każdy feedback, co mam nie tak w kodzie, co mógłbym zrobić lepiej, co poprawić, a może jakieś rady czego teraz powinienem się nauczyć? Co jeszcze potrzeba do pracy jako junior-fullstack-webdeveloper? Z góry dziękuję za każdą opinię, poradę!
Linki:
Github repository
App