Razvoj web-stranica - Rasprava izdvojena tema

poruka: 3.084
|
čitano: 378.225
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
9 godina
online
Re: Razvoj web-stranica - Rasprava
Na server strani.
Npr da imam cronjob koji bi svakih X sati povukao iz MySQL baze i spremio u cache. Ništa kompleksno - jedno polje, jedna vrijednost. Kao kolačići na server strani. Naravno, učim vanilla PHP
8 godina
offline
Re: Razvoj web-stranica - Rasprava
Dex.pwn kaže...
Na server strani.
Npr da imam cronjob koji bi svakih X sati povukao iz MySQL baze i spremio u cache. Ništa kompleksno - jedno polje, jedna vrijednost. Kao kolačići na server strani. Naravno, učim vanilla PHP

Vidim da Laravel ima built-in task scheduler pa možda nije loše s tim početi (ako bi išao na Laravel, naravno - znam ima još PHP frameworka). Nabrzinu sam našao i par PHP library-ja:

- quartz

- cron

 

Zašto svakih X sati? Koji expire policy bi imali ti objekti u cache-u?

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put pon 10.8.2020 20:00 (pr0n_addict).
11 godina
offline
Re: Razvoj web-stranica - Rasprava
Cache je nešto što po definiciji može, ali i ne mora biti spremljeno, a ako nije, generira se on-fly. Ako generiraš cronom, radije uzmi nešto više permanentno, tipa tablice u bazi ili filea, ovisno o tipu podataka, količini obrade istih i slično.

Alternativno, neki cache mehanizmi se mogu podesiti da ne brišu podatke vremenski, ali ako pošalješ naredbu za brisanje svih cacheova, sustav ne smije crashati.

Svaki FW ima ugrađeno nekoliko cacheing mehanizama.
Privatne poruke su za privatne razgovore. Ne odgovaram na općenita pitanja vezana uz neku temu.
9 godina
online
Re: Razvoj web-stranica - Rasprava
To sam dao primjer s X sati.

Ugl, neke globalne postavke bi spremio u cache/ram da ih ne moram učitavati iz baze stalno, već samo kad nisu u kešu

Apcu ext
Poruka je uređivana zadnji put pon 10.8.2020 23:10 (Dex.pwn).
Moj PC  
0 0 hvala 0
11 godina
offline
Re: Razvoj web-stranica - Rasprava

Kako misliš globalne postavke? PHP ima lifespan od jednog requesta. Znači, sve ono što učitaš u jednom requestu je tamo samo taj jedan request. U sljedećem requestu moraš ponovno učitati, bilo iz baze ili iz cachea. Za ono što možeš dobiti iz baze cache ti daje zanemariv benefit, a u nekim situacijama može biti i overhead.

 

Cache se koristi za resurse koji traže više procesuiranja ili pozive na vanjski API. Primjerice, ako stvari poput default jezika, naziva aplikacije ili sličnog podatka iz baze spremiš u cache, ne dobijaš ništa. Ako imaš tečajnu listu koju povlačiš s HNB-a, onda cacheiranje ima smisla jer ne želiš pri svakom requestu povlačiti vanjski sadržaj i parsirati txt file.

Privatne poruke su za privatne razgovore. Ne odgovaram na općenita pitanja vezana uz neku temu.
9 godina
online
Re: Razvoj web-stranica - Rasprava
Stock balance
Stanje skladišta, znači dosta podataka iz MySQL baze
11 godina
offline
Razvoj web-stranica - Rasprava

Redis je nešto što ti svakako može riješiti stvar.

Lak za setupiranje, php ima hrpu klijenata za njega (npr https://github.com/nrk/predis) i miran si.

 

S njim možeš i dobro regulirati invalidaciju:

1) stavit u keš beskonačno i raditi aktivni refresh (npr cron jobom)

2) staviti u keš na određeno vrijeme i raditi pasivni refresh - u smislu da čitaš uvijek cache, a ako dobiješ cache miss onda rekreiraš cache, samo s ovim pristupom pazi ako je rekreiranje heavy, a imaš hrpu upita u tom trenutku onda može nešto otić k vragu :)

 

Za refresh stanja dionica prvi pristup je dušu dao. Staviš u cache beskonačno, kad povučeš novo stanje refreshaš cache. Easy peasy.

Stanje na skladištu isto tako, updateaš cache tek kad se updatea neki item.

 

S time da je Redis i puno pametniji od običnog key-value storagea, ima i svoje strukture podataka, možeš LUA skripte pisat za komplexno procesiranje, redundanciju, ali to kad će ti trebat :)

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
Poruka je uređivana zadnji put uto 11.8.2020 17:39 (Luuka).
Moj PC  
2 0 hvala 1
5 godina
online
Re: Razvoj web-stranica - Rasprava

Nema smisla keširati skladište. Bilo koja operacija sa skladištem (prijenos, izdavanje) traži realno stanje jer recimo ako gledaš za izdati robu, moraš znati na komad jel je ima ili ne - da mi ERP napiše da ima robe pa kod izdavanja međuskladišnice/izdatnice mi kaže "sorry bratko nema" pa zapalio bi ga.

 

Eventualno možeš keširati šifrarnik/nazive, vezane artikle i sl.

8 godina
offline
Re: Razvoj web-stranica - Rasprava
Luuka kaže...

Redis je nešto što ti svakako može riješiti stvar.

Lak za setupiranje, php ima hrpu klijenata za njega (npr https://github.com/nrk/predis) i miran si.

 

S njim možeš i dobro regulirati invalidaciju:

1) stavit u keš beskonačno i raditi aktivni refresh (npr cron jobom)

2) staviti u keš na određeno vrijeme i raditi pasivni refresh - u smislu da čitaš uvijek cache, a ako dobiješ cache miss onda rekreiraš cache, samo s ovim pristupom pazi ako je rekreiranje heavy, a imaš hrpu upita u tom trenutku onda može nešto otić k vragu :)

 

Za refresh stanja dionica prvi pristup je dušu dao. Staviš u cache beskonačno, kad povučeš novo stanje refreshaš cache. Easy peasy.

Stanje na skladištu isto tako, updateaš cache tek kad se updatea neki item.

 

S time da je Redis i puno pametniji od običnog key-value storagea, ima i svoje strukture podataka, možeš LUA skripte pisat za komplexno procesiranje, redundanciju, ali to kad će ti trebat :)

Još jedna bitna pogodnost je činjenica da je Redis ujedno i message broker koji je sposoban javiti klijentima kada je npr. neki key evictan iz cache-a uz vrlo jednostavnu konfiguraciju. Klijent onda očito može nekako reagirati na taj event (refresh cache-a, logiranje, nešto treće, ...).

Kvalitetan klijentski library bi svakako trebao podržavati ove funkcionalnosti.

 

Konkretno, s obzirom da radim u .NET-u, ovaj library koristi (ako ga se tako konfigurira, naravno) two-level cache gdje je primarni caching provider Redis, a sekundarni živi u RAM-u to jest in-process što znači da se neki key čita iz RAM-a pa tek onda (u slučaju da ne postoji) iz Redis-a te ako tamo postoji ubaci se u RAM cache level dok pisanje ide obrnutim smjerom. Keyspace event-ima se konstantno osvježava taj in-process level (novi key, update, expiry, ...).

Zašto postoji ova opcija? Zato što iako je Redis očito puno brži od SQL dohvata i dalje postoji overhead mreže (može se ublažiti s npr. gzip-anjem koji je super algo za stringove to jest u ovom slučaju 99% JSON, ali naravno da dodatno optereti proc) kao i vrlo vjerojatno deserijalizacija (za čitanje) i serijalizacija (za pisanje).

Recimo da je trajanje dohvata (karikiram ovdje, čisto za primjer) iz baze cca 200 ms, Redisa 20 ms, ali je zato najbrži mogući in-memory dohvat ipak <1 ms (doslovno dovuće referencu na neki objekt s heap-a).

 

Uglavnom, postoje svakakve mogućnosti. +1 za Lua skripte

 

Osobno, sve ovo skupa mi smrdi na preuranjenu optimizaciju. Dex, mislim da ti nema smisla uvoditi nikakve dodatne điđe-miđe dok nisi utvrdio da je neki SQL upit (ne mora nužno uopće to biti slučaj) bottleneck u radu sustava. Čak se i u tom slučaju stvari prilično često daju riješiti na DB razini. DB engine-i su jeeeeebeno moćan softver kojeg se može itekako kvalitetno optimizirati (na razini query-ja, sheme baze, ...) ako znaš što radiš.

Ne koriste se bez razloga alati kao što je npr. JMeter koji je 100% besplatan, a jako je moćan.

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put uto 11.8.2020 19:56 (pr0n_addict).
9 godina
online
Re: Razvoj web-stranica - Rasprava
ERPNext koristi način da se pregled skladišta vuče iz generiranog reporta. Nakon svake izmjene, ako hoćeš vidjeti pravo stanje, trebaš opet generirati report.
A kod svih ostalih operacija se koristi stvarno stanje.

Problem bi nastao kad bi bilo cca 10k plus komponenti.

I da - jel InnoDB dobar? Da idem na MySQL ili NOSQL? Podatke svakako mislim tek u PHPu povezivati.
Moj PC  
0 0 hvala 0
5 godina
online
Re: Razvoj web-stranica - Rasprava

Jedno je report a drugo je prikaz u UI tijekom rada.

9 godina
online
Re: Razvoj web-stranica - Rasprava
Ma znam, nisam se dobro izrazio
5 godina
online
Re: Razvoj web-stranica - Rasprava

Reporti bi trebali biti izdvojeni (logikom) iz glavne app, neki mikroservis koji bi kao prvo spriječio da neki divlji report ne zakuca glavnu app sa nekim ogromnim upitom. Trebao bi se ponašati kao task - dođe u queue, čeka, izvrši se i javi na UI da je gotov. Ne mora biti real time.

11 godina
offline
Re: Razvoj web-stranica - Rasprava
Nuclear_Phoenix kaže...

Nema smisla keširati skladište. Bilo koja operacija sa skladištem (prijenos, izdavanje) traži realno stanje jer recimo ako gledaš za izdati robu, moraš znati na komad jel je ima ili ne - da mi ERP napiše da ima robe pa kod izdavanja međuskladišnice/izdatnice mi kaže "sorry bratko nema" pa zapalio bi ga.

 

Eventualno možeš keširati šifrarnik/nazive, vezane artikle i sl.

Sve ovisi kakav load imaš, nekad ima smisla keširat na sekundu ;)

 

Al u ovom slučaju, to vjerojatno nije slučaj :)

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
11 godina
offline
Re: Razvoj web-stranica - Rasprava
Dex.pwn kaže...
ERPNext koristi način da se pregled skladišta vuče iz generiranog reporta. Nakon svake izmjene, ako hoćeš vidjeti pravo stanje, trebaš opet generirati report.
A kod svih ostalih operacija se koristi stvarno stanje.

Problem bi nastao kad bi bilo cca 10k plus komponenti.

I da - jel InnoDB dobar? Da idem na MySQL ili NOSQL? Podatke svakako mislim tek u PHPu povezivati.

Kreni s MySQLom, nosql za mene dolazi kad je potreban dodatni layer zbog količine podataka, da se olakša pretraživanje/reporti/logiranje.
A InnoDB je tip storagea u MySQLu, nije baza za sebe :) I mislim da je poprično standardan u današnje vrijeme, i za mnoge upotrebe bolji naspram MyISAMa, posebno zbog row-locka, a ne table-locka.

 

Na početku priče, mislim da se niti ne moraš zamarat s tim detaljima. Kreni defaultno i onda ćeš optimizirat kad za to dođe potreba.

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
9 godina
online
Re: Razvoj web-stranica - Rasprava
Recimo cronjob svaki sat kešira iteme(naziv, id, opis), te stock (povezuje iteme, lokacije, količinu). Odakle bi svi imali uvid u stock
9 godina
online
Re: Razvoj web-stranica - Rasprava
Znam da je InnoDB engine, al to sam mislio i za MariaDB.
Budem InnoDB uzeo.
9 godina
online
Re: Razvoj web-stranica - Rasprava
Pitanjce za search - kako uraditi da kad tipkam u tražilicu, da dobivam prijedloge? Npr kao što na fejsu ima tražilica, krenem pisat i dobivam prijedloge.
Na svaki update polja preko AJAXa pokrećem MySQL upit? To mi djeluje da će radit, ali mi djeluje dosta gladno resursa.
Moj PC  
0 0 hvala 0
5 godina
online
Re: Razvoj web-stranica - Rasprava

Pa to sam ti napisao, keširat ćeš nazive artikala + kratki opis baš radi takvih stvari.

 

Ima more autocomplete search primjera na netu, googlaj.

9 godina
online
Re: Razvoj web-stranica - Rasprava
Ima i drugih stvari za koje bi to napravio, a da ne moram keširati. Dosta bi toga u memoriji bilo.
9 godina
online
Razvoj web-stranica - Rasprava

Znam da smaram, no zanima me je li uopće moguće napraviti(ako da, kako?) sustav custom formata broja komponente.

Znači, početni format bi bio A.B

A - ID kategorije u kojoj se komponenta nalazi(do četiri znamenke)

B - Jedinstveni ID komponente(za svaku kategoriju je poseban, do pet znamenki)

 

Sad me zanima kako mogu napraviti da korisnik može lagano zamjeniti u B.A, ili da doda još neke dijelove, recimo A.B.YY.MM

gdje su YY godina u kojoj je komponenta kreirana, a MM mjesec.

 

U spuštini:

Kako da povežem da:

A = ID kategorije

B = Broj komponente u kategoriji

YY = Zadnje dvije znamenke godine(2020-> 20)

MM = Mjesec (05)

M = Mjesec (5)

 

Skužili ste na šta misliš?

Guglao sam, ali jedino na sprintf nailazim(btw, otkrio sam da postoji %1$s, kul stvar).

 

str_replace je najbolje što sam pronašao trenutno.

 

 

Riješeno

$placeholders = array("YY", "MM", "###", "##", "#");
$replace = array(date("y"), date("m"), rand(0, 999), rand(0, 99), rand(0, 9));


echo str_replace($placeholders, $replace, "Dex-YY-MM-###-##-#");

 

 

Nije loš taj PHP :D Šteta što Vanilla PHP nije često u upotrebo.

Poruka je uređivana zadnji put sub 15.8.2020 20:48 (Dex.pwn).
Moj PC  
0 0 hvala 0
5 godina
online
Re: Razvoj web-stranica - Rasprava

Regex.

11 godina
offline
Razvoj web-stranica - Rasprava

Autocomplete je idealan primjer u kojem je poželjno izbjeći dohvat active recorda ili sličnog oblika. Framework ti i dalje može odraditi buildanje querya, bindanje parametara, ali većina frameworka omogućuje da seletiraš samo polja koja ti trebaju i da dobiješ rezultate kao array. Time značajno štediš resurse, a uz optimalno odabran limit, sve leti.

 

Za ovo drugo nisam siguran što točno pitaš. PHP-om takav string možeš generirati pomoću strtr funkcije, konkatenacijom stringa, ubacivanjem varijabli u string unutar dvostrukih nazivnika i slično. Razbiti ga možeš regexpom ili splittanjem po točkama.

Privatne poruke su za privatne razgovore. Ne odgovaram na općenita pitanja vezana uz neku temu.
Moj PC  
1 0 hvala 1
3 mjeseca
offline
Razvoj web-stranica - Rasprava

Bok ekipa

 

Izradio sam prema templateu web stranicu za frendovu firmu, ništa komplicirano, samo osnovni podaci. I na desktopu je skaliranje uredu, ali na ekranima niže rezolucije i na mobitelima je neki problem. Može li mi netko s time pomoći?

 

https://strugar-ter-pro.hr

 
0 0 hvala 0
8 godina
offline
Re: Razvoj web-stranica - Rasprava
MMorty13 kaže...

Bok ekipa

 

Izradio sam prema templateu web stranicu za frendovu firmu, ništa komplicirano, samo osnovni podaci. I na desktopu je skaliranje uredu, ali na ekranima niže rezolucije i na mobitelima je neki problem. Može li mi netko s time pomoći?

 

https://strugar-ter-pro.hr

Ovako na brzinu ne vidim da se igdje koriste col-xs-n i col-sm-n Bootstrap klase namijenjene za uređaje s nižim rezolucijama.

Prouči malo grid system (link je za Bootstrap 3 koji koristiš na site-u, razmisli o upgrade-u na četvorku).

 

Trebalo bi pomoći, ali nekako sumnjam da će samo to biti dovoljno (obično je navigacija odnosno navbar dodatno zajebavanje, među ostalim). Probaj pa vidi.

Nisam ni ja baš nešto vješt u CSS-u, pričekaj možda nekog tko ima više iskustva s prikazom web site-ova na mobitelima i tabletima.

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put pon 17.8.2020 15:14 (pr0n_addict).
10 godina
offline
Re: Razvoj web-stranica - Rasprava
MMorty13 kaže...

Bok ekipa

 

Izradio sam prema templateu web stranicu za frendovu firmu, ništa komplicirano, samo osnovni podaci. I na desktopu je skaliranje uredu, ali na ekranima niže rezolucije i na mobitelima je neki problem. Može li mi netko s time pomoći?

 

https://strugar-ter-pro.hr

i stavi neki font koji ima naše znakove

9 godina
online
Re: Razvoj web-stranica - Rasprava
Kak si uradio animacije koje se pokrenu tek kad doskrolaš do teksta?
9 godina
online
Re: Razvoj web-stranica - Rasprava
Trebam dodati recaptchu na kontakt formu.
Htio bi napraviti tako da kad kliknem na pošalji, da se pokrene recaptcha i ako je njezin rezultat valjan(da nije bot) onda bi se pokrenuo AJAX koji bi posao mail - sve bez refresha.

Dio sa slanjem preko AJAXa razumijem, ali tu ženu recaptchu ne razumijem.
v3 je u pitanju.
6 godina
online
Razvoj web-stranica - Rasprava

Dodaš skriptu:

 

<script src="https://www.google.com/recaptcha/api.js?render=<API KEY>"></script>
<script>
   grecaptcha.ready(function () {
     grecaptcha.execute('<API KEY>', { action: 'send' }).then(function (token) {
     var recaptchaResponse = document.getElementById('recaptchaResponse');
     recaptchaResponse.value = token;
    });
   });
</script>

 

Uhvatiš u backendu (python, ali nema veze, ideja je tu):

 

...

sender = 'email@example.com'
subject = request.POST['subject']
message = request.POST['message']
recaptcha = request.POST['recaptcha']
recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify'
recaptcha_secret = '<API KEY>'
recaptcha_send_url = '{}?secret={}&response={}'.format(recaptcha_url, recaptcha_secret, recaptcha)
recaptcha_response = requests.post(url=recaptcha_send_url)
recaptcha_fields = recaptcha_response.json()

if recaptcha_fields['success']:
   email_message = '{} \n\nName: {}\nE-mail: {}'.format(message, name, from_email)
   email = EmailMessage(subject=subject, body=email_message, from_email=sender, to=['recepient@example.com'],)

   email.content_subtype = 'html'
   try:
     email.send(fail_silently=False)
     data = {"response": 1}
     return JsonResponse(data)
   except Exception:
     data = {"response": 0}
     return JsonResponse(data)
else:
   data = {"response": 0, "content": recaptcha_fields}
   return JsonResponse(data)

....

Samomrzeći hrvat
Moj PC  
1 0 hvala 1
9 godina
online
Re: Razvoj web-stranica - Rasprava
Hvala, mislim da sam skužio (s frontenda) kako funkcionira.
Budem probao za nekih 2-3 sata pa javim
Nova poruka
E-mail:
Lozinka:
 
vrh stranice