Clarificarea la pagina cerere de rețea de încărcare Gatsby




Sunt de învățare cum funcționează Gatsby și-au luat un site cu 2 pagini, ambele având hyperlink-uri între ele.


Deoarece Gatsby compilează un site web pentru pagini statice cu javascript pachete, mi - ar aștepta link -uri html eveniment clic pentru a declanșa solicitare de pagină la server pentru a încărca `second`pagina. Cu toate acestea, eu nu văd o astfel de cerere. Site - ul se comportă ca aplicație cu o singură pagină încărcate de pe `first`pagina. Link clic nu cauzează solicitări de pagină din rețea pentru `second`pagina. În același timp, pot vedea că serverul răspunde la cererea către `second`corect pagina. În acest caz, `second`pagina este încărcată și navigare pe `first`pagina prin clic pe link nu cauzează cerere HTTP prea.


* Este de proiectare? Ați putea să vă rugăm să clarifice ce se întâmplă de fapt în site-ul compilat?
* În cazul în care un astfel de comportament cu o singură pagină este prin design, mă întreb cât de mult negativ l crawler impact ale motorului de căutare? M-am gândit că aplicațiile cu o singură pagină nu sunt foarte bune pentru indexarea de către Google bot, etc ..
* De asemenea, ce se întâmplă dacă paginile mele sunt destul de mari (să zicem făcut din cărți Markdown sau similare)? Mi-ar aștepta ca aplicarea unei singure pagini nu ar fi foarte optim pentru a încărca totul dintr-o dată. Ce magic este aplicat de Gatsby în acest caz?
Da Gatsby este site-ul cu o singură pagină și da, este, de asemenea, un site cu mai multe pagini. Gatsby pre-face pagini individuale ca fișiere HTML și, de asemenea, compilează codul corespunzător reacționează în mănunchiuri.


La rece începe orice date pagină se încarcă în browser ca orice altă pagină statică, rapid și SEO prietenos. Odată ce o pagină statică este încărcată, reacționează cod este în mod eficient procesul de bootstrap și rulează spectacolul ( „a la“ stil de aplicație cu o singură pagină). Destul de inteligent nu-i asa? Cu toate acestea, numai nevoie de js pachete sunt preluate de pe server (uneori preluat anticipat, precum și pentru viteză).


Gatsby este într-adevăr nimic mai mult, atunci un server inteligent prestate html reacționează aplicația care înțelege tipuri de conținut.
JavaScript nu are suport pentru multi-threading pentru că JavaScript interpret în browser-ul este un singur fir (AFAIK). Chiar și Google Chrome nu va lăsa o singură pagină web JavaScript rulează în același timp, deoarece acest lucru ar provoca distrugeri masive de probleme de concurenta în paginile web existente. Toate Chrome nu este de a separa mai multe componente (diferite tab-uri, plugin-uri, etc.) în procese separate, dar nu-mi pot imagina o singură pagină având mai mult de un JavaScript fir.


Cu toate acestea, puteți utiliza, așa cum a fost sugerat, `setTimeout` pentru a permite un fel de programare și "fals" de concurenta. Acest lucru provoacă browser-ul pentru a recâștiga controlul de redare fir, și începe cod JavaScript furnizate `setTimeout după anumit număr de milisecunde. Acest lucru este foarte util dacă doriți pentru a permite viewport (ceea ce vezi) pentru a actualiza în timp ce efectuează operațiuni pe ea. Doar looping prin exemplu, coordonatele și actualizarea unui element în consecință, vă va face să vezi începutul și sfârșitul poziții, și nimic în între.


Vom folosi o abstracție în bibliotecă JavaScript, care ne permite de a crea procese și fire care sunt toate gestionate de către același JavaScript interpret. Acest lucru ne permite să executați acțiuni în felul următor:


* Un Proces, Firul 1
* Un Proces, Firul 2
* Procesul B, 1 Fir
* Procesul De O, Fir 3
* Un Proces, Thread 4
* Procesul B, Firul 2
* Pauză De Un Proces
* Procesul B, Fir 3
* Procesul B, Fire 4
* Procesul B, Fir 5
* Începe Un Proces
* Un Proces, Thread 5


Aceasta permite o formă de planificare și falsuri paralelism, pornirea și oprirea de fire, etc, dar nu va fi adevărat multi-threading. Nu cred că va fi vreodată puse în aplicare în limba în sine, deoarece adevarat multi-threading este utilă numai în cazul în care browser-ul poate rula o singură pagină, multi-threaded (sau chiar mai mult decât un singur nucleu), iar dificultățile sunt mult mai mari decât posibilitățile suplimentare.


Pentru viitorul JavaScript, check this out:
[https://developer.mozilla.org/presentations/xtech2006/javascript/](https://web.archive.org/web/20170920070053/https://developer.mozilla.org/presentations/xtech2006/javascript/) Mai puțin deasupra capului (fără SĂPUN plic să-și încheie fiecare apel in)


Mai puțin dublarea (HTTP deja reprezintă operațiuni, cum ar fi ȘTERGE, a PUS, pentru a PRIMI, etc. care au, de altfel, să fie reprezentate într-un SĂPUN plic).


Mai standardizate - HTTP operațiuni sunt bine înțelese și să opereze în mod constant. SĂPUN implementari pot obține delicat.


Mai lizibil și testabile (mai greu pentru a testa SĂPUN cu doar un browser).


Don't nevoie pentru a utiliza XML (ei bine, ai un fel de don't pentru SĂPUN, dar nu prea are sens din moment ce ai're deja face parsarea de plic).


Bibliotecile au făcut SĂPUN (un fel de) ușor. Dar sunt abstractizare departe o mulțime de concediere dedesubt, după cum am arătat. da, în teorie, SĂPUN poate trece peste alte transporturi astfel încât să se evite călare pe un strat de a face lucruri similare, dar în realitate doar despre toate SĂPUN munca'll face vreodată este de peste HTTP. Valoarea returnată de o tratare a evenimentului determină dacă sau nu browser-ul implicit comportamentul ar trebui să aibă loc la fel de bine. În cazul clic pe link-uri, acest lucru ar fi urmatoarele link-ul, dar diferenta este cel mai vizibil în formă prezinte stivuitoare, unde puteți anula o formă de transmitere în cazul în care utilizatorul a făcut o greșeală introducerea informațiilor.


Eu nu't cred că există o W3C caietul de sarcini pentru acest lucru. Toate vechi JavaScript interfețe de acest gen au fost dat porecla "DOM 0", și sunt în mare parte nespecificată. Poate ai noroc de lectură vechi de Netscape 2 documentare.


Modul modern de realizare a acestui efect este de a apela eveniment.preventDefault()`, și acest lucru este specificat în [DOM 2 Evenimente caietul de sarcini](https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-flow-cancelation). este sub 1mbps pentru că tu nu ești singurul care descarcă de pe acel server, sunt nenumărați alți clienți care descarcă simultan de pe serverele google. este ceva normal, pentru că se împarte transferul de date la câți clienți accesează in acel moment respectivul link. dacă un milion de clienți accesează un server și descărca niște resurse(fișiere), nu te aștepta ca viteza de descărcare să fie foarte mare, indiferent de pachetul de abonament pe care-l ai, poate tu ai lățimea de bandă largă (+1gbps), dar daca serverul este 100% încărcat, n-ai ce face. viteza de pe speedtest reprezintă viteza de răspuns dintre tine și serverul țintă pentru care faci speedtest-ul, care, evident, se află destul de aproape, presupun că în țară la noi. normal că dacă ești pe (ex. digi fiber)și faci un speed test pe un server digi din iași / bucurești, o să ai aproape maxim utilizare a lățimii de bandă (depinde și conexiunea, wifi sau cablu ethernet utp).

p.s : tipul de conexiune este foarte important când stabilești un transfer de date, cablul utp fiind la ora actuală cea mai rapidă metodă de transfer în masă a datelor. există cabluri ce suportă transferuri și de zeci de gb/s. Nu o't schimba nimic, atunci când programul se execută. Tot ce's necesare este încărcat la cerere. Deci, chiar dacă aveți că utilizarea declarație, dacă nu folosesc de fapt un tip în care spațiul de nume / de asamblare, asamblarea că utilizarea declarație este corelată a câștigat't fi încărcat.


În principal, se's, doar pentru a curăța de preferințele personale. probabil e o mica problema a site-ului, care in scurt timp va fi remediata (s-a mai intamplat si in trecut). nu-ti fa griji! Nu știu care versiune de [Drupal](/cat17) pe care o
conduceți, dar nu ar trebui să facă atât de mult o altă diferență
decât modulele disponibile pentru dvs.


Practic, [Drupal](/cat17) are un API de cache care
funcționează prin stocarea a ceea ce vrea să cache în DB în tabele
care încep cu `cache _` , folosind
`cache_set` și `cache_get` . În cazul în care
site-ul are o mulțime de trafic, adăugate deasupra capului de
lectură și scrie la DB poate aduce în jos. Aceste funcții vor
funcționa cu oricare dintre modulele de cache pe care le înlocuiți
cu cel original, de exemplu cu:


Pentru a veni peste acest lucru, puteți adăuga diverse module
pentru a modifica memoria cache, de exemplu, utilizând
**[memcache](https://drupal.org/project/memcache)** , pentru a stoca valorile
cache-ului în memorie, mai degrabă în DB. Totuși, va trebui să
configurați o instanță memcache pe server și apoi să o configurați
în settings.php, dar toate acestea sunt explicate în memoria
readme.


Există o șansă foarte bună ca site-ul să sufere din cauza
viziunilor de pe pagină. M-aș uita la punctele de vedere și să văd
dacă fac ceva care este foarte lent. Vizionările sunt întotdeauna
grele în DB. Poate doriți să treceți prin fiecare vizionare și să
modificați (sau chiar să activați) temporizările și setările
cache-ului.


S-ar putea să suferiți deoarece aveți foarte mulți utilizatori
conectați pe site și vor trece de o mulțime de memorie cache,
astfel încât să puteți încerca **[Modul
AuthCache](https://drupal.org/project/%20authcache)** , care vă permite să reglați fin cache-ul
blocurilor pentru utilizatorii conectați.


De asemenea, puteți efectua anumite căutări pentru site-uri cu
trafic ridicat și cache pentru drupal. Am găsit destul de multe
când am fost otimizing un site am fost de lucru cu ~ 100'000 de
vizitatori pe zi. Va trebui să configurați funcționalitatea în pagina de fundal
astfel încât să fie difuzată pe toate filele.



```
// add listener for all tabs
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    var safesite = false;

    if (changeInfo  "loading") {
       //logic for checking white list, using tab.url

        if (!safesite) {
            chrome.tabs.update(tabId, { url: 'www.google.com' });
        }
    }
});

```

În esență, adăugați un ascultător de evenimente la toate filele.
Când se încarcă, verificați dacă este afișată pe lista albă. Dacă
este un site pe lista neagră, redirecționați-le către orice url
doriți. De asemenea, puteți include un fișier .html în directorul
de extensii pentru a le redirecționa la fel. Acest incendiu de pe
toate filele, inclusiv Inspectorul Web, astfel încât ați putea dori
să puneți în unele logică pentru a verifica doar cererile http
(s).


De asemenea, această abordare ar putea să afișeze pentru scurt
timp pagina neagră și apoi să vă redirecționeze către pagina
blocked\_url.html. API-ul experimental, [webRequest](https://code.google.com/chrome/extensions/experimental.webRequest.html) , ar trebui să ofere posibilitatea de
a filtra cererea înainte încărcarea paginii, dar nu veți putea să o
încărcați în Magazinul web Chrome până când aceasta nu face parte
din API-ul oficial [Google](https://google.com) Chrome. În cazul în care pentru uz personal,
atunci nu ezitați să-l utilizați.


Un ultim sfat pentru dezvoltare: puteți depana doar
background.html prin pagina de setări a extensiilor
(chrome://settings/extensionSettings). Deschideți rubrica
descendentă pentru extensia dvs. și veți vedea "Inspectați
vizionările active:" unde puteți să faceți clic pe un link către
paginile specifice fiecărei extensii pe care le-ați rulat în
prezent. În acest fel veți afișa Inspectorul Web pentru acea
pagină.


După ce mi-am zgâriat mult capul, am întâlnit-o accidental și de
atunci a fost salvatorul vieții. am văzut și eu, de azi, la unele aplicații (eu nu mă refer la jocuri, fiindcă nu am in telefon), imi cer "repornire", pe urmă se solicită "închidere aplicatie". să știi că și eu am dat restart la telefon. dar, probabil sunt niște probleme tehnice, pe undeva. dar nu in telefoanele noastre. Știu că acest subiect este vechi, dar această problemă continuă să vină și nu a fost soluționată spre satisfacția mea:


Dacă salvați obiecte în $\_SESSION, sau de a le reconstrui întreaga pânză în baza de date a ascuns în câmpuri de formular ascunse, sau re-interogare-le din DB de fiecare dată, utilizați stat. HTTP este apatrid (mai mult sau mai puțin; dar vezi OBȚINE vs PUS), dar aproape tot ce-i pasă cuiva de-a face cu o aplicație web necesită de stat pentru a fi menținut pe undeva. Acționează ca în cazul în împingând stat în colțuri și crăpături se ridică la un fel de câștig teoretic este pur și simplu greșit. Statul este stat. Dacă utilizați stat, pierzi diverse avantaje tehnice acumulate de apatrid. Acest lucru nu este ceva pentru a dormi, cu excepția cazului în care știți că ar trebui să-și fi pierdut somnul din cauza asta.


Sunt deosebit de afectat de binecuvântarea primită de la "dubla" argumentele prezentate de Hank Gay. Este OP construirea unei distribuite și încărcare echilibrată sistem de e-commerce? Părerea mea este că nu, și nu va mai pleca de la premiza că serializarea lui $clasa de Utilizare, sau orice altceva, nu va infirm serverul lui de dincolo de reparații. Sfatul meu: foloseste tehnici care sunt sensibile la cererea dumneavoastră. Obiecte în $\_SESSION sunt bine, pot să-simț măsuri de precauție. Dacă aplicația se transformă brusc în ceva rivalizând Amazon în trafic servit, va trebui să re-adapteze. Ca's viață.