>> DAVID MALAN: Rendben.
Ez CS50, és ez a A hét végén kilenc.
Ez egy forgószél fölött az elmúlt napokban.
És a probléma meg hét, ha térd mélyen bele, megérted, hogy elég
bit Újdonság, hogy ott van.
De nézzük, ha nem tudjuk rakni mindent együtt itt röviden
addig veering ki még más irányba, és látta,
Hol máshol mehetünk.
>> Tehát eddig beszéltünk HTML.
Már beszéltünk CSS.
Már beszéltünk a PHP.
Már kezdett megtapasztalni SQL.
Ma fogunk beszélni egy kicsit a JavaScript.
De hogyan mindezen különböző nyelvek illeszkednek egymáshoz?
>> Így beszélgettünk múlt héten a fogalmát, amelynek a szerveren.
Szóval csak felhívni a téglalap a web szerver itt.
És egy webszerver szolgál biztosan fájlokat.
És néhány ilyen fájl Lehet HTML fájlokat.
Tehát az egyik dolog, hogy a webszerver akkor kiköp lehet egy fájlt
akkor csak rajzolni ilyen tartalmaz néhány HTML.
Így a laikus szempontból, milyen nem HTML segítségével csinálni?
>> Közönség: Oldal néz.
>> DAVID MALAN: OK, hogy egy oldalt néz, bár azt hiszem, már bizonyított
amelyek egyébként.
Tehát HTML nem enged feküdt ki oldalakat szerkezetileg, és lehetővé teszi, hogy
egyfajta esztétikai jel egy oldalt, jelölje ki a statikus tartalmat, így
Ezután nézd meg egy böngészőben.
>> De ez a kulcs.
Ez statikus tartalmat.
Írsz, akkor mentse el, és akkor küldje.
És a web szerver szolgálja majd fel, hogy a látogatók.
>> De stilizál dolgok egy másik nyelv összesen.
Kezdtük használni a style attribútum bizonyos címkéket.
És a stílus attribútum nézzük meg dolgok, mint a betűk méretét és színét.
És akkor már valószínűleg indult felfedezni, vagy hamarosan lesz a végső
projektek lehetséges, de a többi tulajdonságokat, amelyek segítségével a CSS.
És így a laikus szempontból, milyen Tényleg így lesz CSS csinálni?
Ezek csak példák.
Mit segítségével csinálni, hogy a HTML úgy tűnik, nem az, amit
láttunk eddig?
>> Közönség: Határozza stílusok egyedül.
>> DAVID MALAN: Define stílusok egyedül.
Így határozza meg a dolgokat, mint osztályok, mint te Lehet, hogy találkozott, vagy jellegzetesen
azonosítja csomópontok egy dokumentummal, hogy lehet stilizál őket.
De még pontosabban, azt mondanám, hogy a CSS valóban lehetővé teszi, hogy a dolgokat a
utolsó mérföld, és lehetővé teszi, hogy meghatározza sokkal pontosabban az esztétika,
míg HTML a legtöbb teszi a szerkezet az oldalakat.
>> És bár van néhány alapértelmezett, mint láttuk, a tag
egy cím tag, ami nagyjából a dolgokat nagy és merész.
Ez egy elég általános definíció A tag - nagy és merész.
Milyen betűméret ez?
Milyen színű ez?
Milyen merész ez?
És CSS segítségével finomabban dallam ilyesmi.
Csakúgy, mint az elrendezés, mint néhány láttátok.
>> És őszintén szólva, egy kicsit CSS A rendetlen nyelvet.
Ez nagyon erős, hogy tudod, hogy szó minden olyan webhelyet, hogy már
látható az interneten ma, de ez egyfajta fájdalom a nyak.
És néhányan felrobbant a fejed ellen a falak már csak azért, hogy
valami buta, mint a központ menü probléma meg hét, ha már ütött, hogy
Ezen a ponton már.
>> De észre, ezek a dolgok könnyebb az idő múlásával.
Elkezdi észrevenni mintákat.
És ismét, a Google a barátod a különböző módszereket, amelyek segítségével
megoldani az ilyen jellegű problémákat.
>> És merem mondani, a CSS és HTML több általában meg lehet oldani problémákat
több szempontból, amelyek közül mindegyik nagyon is lehet helyes, mint amit
valami, mint a C, akár Most PHP vagy JavaScript.
Már csak sok különböző módon feküdt a dolgokat.
>> De ez kezdett el piszkos, azt mondta.
Csak egyfajta keveredését a HTML és A CSS a stílus attribútum
egy kicsit hanyag.
És így ahelyett, hogy azt mondta, egyfajta absztrakt értelemben, hogy meg kell
legalábbis kezd tényező ki a CSS valószínűleg.
Nem a stílus jellemzőket, de legalább a stílus, amit belső tag
része a weboldal?
>> Közönség: Head.
>> DAVID MALAN: a fejét.
Eddig csak volt a cím fel ott van, de akkor is hozzá a stílus
tag, és akkor tegye a CSS durván beszélő felé az oldal tetején.
De aztán vette a dolgokat egy lépéssel tovább és tényezőként, hogy többet
egy külön fájlban.
>> És így a két fájlt is valahogy most kapcsolódik.
És valóban ez volt a tag, hogy csináltam.
És mi volt az egyik átfogó motivációk faktoring meg a CSS
annál is inkább?
>> Közönség: Újrafelhasználhatóság.
>> DAVID MALAN: Újrafelhasználhatóság.
Nem igaz?
Lehet, hogy látta a p-set hét már hogy sok az oldal, a
vásárlási oldal, az eladási oldal, a portfólió oldal, valószínűleg
strukturált némileg hasonlóan.
Van egy CS50 pénzügyi logót a tetején kivéve, ha már úgy döntött, hogy nem változtatja.
Van egy lábléc a az oldal alján található.
És CSS lehetővé teszi majd, hogy tényező, hogy ki azt egy külön fájlban, hogy ha
meg akarja változtatni valamit globálisan között az egész oldalon, akkor az tényleg
csak változtassa meg egy helyen.
>> De van egy ár, amit fizetni esetleg azáltal, hogy faktorált ki az
CSS az én HTML fájlt egy külön fájl hivatkozás azt a
tag, amit látott hétfőn.
Mi lehet a hátránya, hogy ez?
Visszagondolva egy héttel ezelőtt, amikor mi vagyunk beszél a HTTP és TCP / IP és hogyan
működik az internet.
Valami itt?
>> Közönség: Ez több időt vesz igénybe.
>> DAVID MALAN: Ez több időt vesz igénybe.
Miért?
>> Közönség: [hallható].
>> DAVID MALAN: Igen.
Tehát ez vitathatatlanul tart egy kicsit több időt.
Mert az egyik, a CSS nyilvánvalóan nem ugyanaz a fájl.
Tehát most van, hogy nem egy, hanem két kérelmet.
És minden egyes ilyen kérelmek láttuk Chrome-ban az úgynevezett Inspector,
és néztük a Network fülön, minden ezeket a fájlokat igényel egy HTTP-
igény, amit láttunk tart bizonyos mennyiségű időt.
Nos, lehet, hogy nem sok.
Lehet, hogy csak 20 milliszekundum.
Lehet, hogy 200 milliszekundum.
>> De gondolj egy oldalt, mint a Facebook, vagy a CNN, vagy a Google, amelyek sokkal
nagyobb, mint a példák már nézett eddig.
Azok a lapok is több tucat kép, amelyek mindegyike lehet szükség
letöltését egy fájlt.
Tehát a dolgok esetleg elkezd lassulni.
>> És különösen ezekben a napokban, amikor mindannyian a mobil telefon a zsebünkben, és
Lassúbb internetkapcsolat, miután a várjon néhány milliszekundum, néhány
több milliszekundum további fájlokat is lehet lassú.
Lappangási idő az a szó, amely leírja a olyan várakozás, hogy van, hogy
találkozhatnak vár néhány információt.
>> De van egy fejjel.
Tehát nem minden fajta a -
ez valójában egy kicsit egy libikóka itt.
Hátrány most, de mit böngészők tehet ha okosak elkerülése érdekében
, hogy kérje az azonos styles.css fájlt újra lehet csinálni, mi?
>> Cache is.
Tehát cache -
C-A-C-H-E -
általában azt jelenti, itt, csak hogy megmentse a fájlt kérte az első alkalommal, és a
majd ellenőrizze a gyorsítótár is.
Ellenőrizze, te valami tároló, és ha már van egy
másolatát styles.css, akkor is, ha egy másik oldalt a p-set, vagy minden olyan webhelyet,
kéri újra, csak, hogy a felhasználó, aki ugyanazt a cache-elt példányt.
Ne fáradj kérve.
>> Hátrány még, bár, mint néhányan már megbotlott a p-set.
Ha a változás a szerveren, és mész vissza a böngésző, és
reload, néha a böngésző nem Ön egy szívességet, és nem zavar
újra letöltését a styles.css fájl mert, ugyan már, mi az esélye
hogy ezek a stílusok, hogy a Facebook használó fognak változni órára vagy
nap mint nap?
Ez elég alacsony.
Lehet, hogy változnak az idők, de nem a pillanatban az óra.
>> Tehát a trükk, csak hogy tudd, amikor egy cég fejlesztés, gyakran tartsuk lenyomva a
shift billentyűkombináció például, majd kattintson a töltse be újra a böngészőt, és hogy
általában elmondja a böngésző reload mindent, akkor is, ha már van
azt a cache.
Tehát még egyszer, upsides és hátrányai, de mindegyikük
végül tervezési döntéseket.
>> Tehát most már nem csak a véget a történet itt.
Ha most menj vissza, és vissza, és vissza, és vissza kezdtük bevezetni nem csak
HTML, de a PHP.
Így a laikus szempontból, milyen nem PHP tegyünk?
>> Közönség: [hallható].
>> DAVID MALAN: Mi ez?
>> Közönség: bevezetése logika be a kódot.
>> DAVID MALAN: Igen, be logika a kódot.
Szóval ez egy igazi programozási nyelv hurkok, és a változók, és
funkciók, és a feltételek, és az összes A dolgok már nem, vissza
amikor óta semmiből.
És a PHP, láttuk, lehet használni akár a parancssorban - a
nem kell, hogy bármi köze az interneten, még akkor is, ha ez
Tényleg eredete és mit inkább hogy jó, és elősegíti a -
de a PHP pusztán a természet Az a tény, hogy van egy nyomtatási ()
funkció, és a printf () függvényt, vagy echo () függvényt.
Van csokor módon nyomtathat szöveget PHP.
>> Ezért, ha lehet ezt a programozási nyelv output pontosan
amit beszéltünk korábban.
A dinamikusan generálhatnak a HTML.
Lehet, hogy nem az egészet.
Lehet, hogy kemény kódot a dolgokat, mint a fejléc és a lábléc, és a logó,
és a stíluslapok, és minden adott.
De valami hasonló p-be hét, hová manipulálni a készletek és a
bemutatja a felhasználó portfólió, amely fog változni, akkor
biztosan használni a PHP és a logika ad Ön, mint egy programozási nyelv
kimenet dinamikusan részhalmazok az oldal.
>> Tehát, ha beszélni dinamikus weboldalak, vagy webes programozás, az
amit valójában beszél.
Egy nyelv, mint a PHP, vagy a dolgok nevezett Python vagy Ruby, vagy a Java, vagy
még más nyelveken, a lekérdezés adatbázis gyakran, vagy egy másik szerverre, és
majd dinamikusan kiköp HTML.
>> Most a végeredmény, mint egy félre, nem hogy a HTML a legtöbb honlapok,
beleértve a p-be a hét, valószínűleg lesz egy hatalmas rendetlenség, ha
akkor nézd meg a forrást kód a böngészőben.
Ez nem egy nagy dolog.
Ezen a ponton, ha érdekel stílus, mi érdekel a
dolog, hogy írsz.
Mi nem érdekel a dolog hogy amit a kódot kimenettel.
Szóval ne aggódj behúzás itt, ha ez a PHP, ami
valójában kimenetre cucc.
Végül is, a böngésző nem érdekel, és egy ember nem keres
A forrás egyébként.
Mi a személyzet, például, lenne nézi a PHP.
>> Akkor hadd adjak egy gyors példa már miért más ez hasznos lehet.
Szóval őszintén szólva, nem emlékszem az utolsó alkalommal használt C megoldani a problémát
a valós világban.
Valószínűleg a doktori iskolában, amikor Kellett használni a nyelvet,
meglehetősen alacsony, és nekem adta a lehetőség arra, hogy valami nagyon nagy
elvégzése, hogy valóban menteni sok CPU ciklus, ahogy csak tudtam, nagyrészt
mert én voltam a nagy adathalmazok, , és minden CPU ciklus számít.
És őszintén szólva, még a dolgok, mint a telefonok manapság, és más eszközök
ahol nem elég annyi a memória, és nem nagyon vannak, mint
sok CPU, a gyorsabb nyelvek még mindig vonzó.
>> De a való világban, ha csak akar dobni egy program együtt
elemezni néhány adatot, vagy a már összegyűjtött egy csomó regisztrációk
Néhány diák csoport, és szeretné, hogy nagyon gyorsan automatizálni e-mail küldése
egyenként minden egyike azoknak regisztrálók fogsz elérni a
magasabb szintű nyelv mint a C úgy mondjam.
Olyasmi, mint a PHP vagy Python vagy Ruby, vagy egy fél tucat másik, hogy létezik
ezekben a napokban.
De a három valószínűleg a legtöbb divatos most.
>> És ez azt jelenti, hogy meg tudja nyitni egy szövegszerkesztő, mint a gedit vagy
a legtöbb bármi más, és aztán csak elkezd kódot írni anélkül, hogy aggódnia
a fordítás, anélkül, hogy igazán aggódni memória kezelése,
szem előtt tartva azonban, hogy egy kicsit hanyagságot végül jön vissza
harapni, ha az adathalmaz lesz vagy nagyobb a probléma lesz nagy.
De mit jelent ez a mi a következő.
>> Hadd menjek előre, és fuss helyesírás A probléma meg hat.
Szóval ez az én trie-alapú megvalósítása , hogy én használt a nagy
fórumon, ahol végeztem nem olyan jól.
Majd jöjjön vissza egy hét múlva, és újra azok, akik nem a végén tetején
nagy fedélzeten az utolsó előadás.
De most, hadd menjen előre, és csak a futtatni a megoldás szöveges, és mi nem
A King James Biblia, és most itt vagyunk.
>> Tehát ezek mind az állítólag helytelenül írt szavakat ki
King James Biblia.
És a végrehajtás volt fél másodperc összesen.
Tehát nem túl rossz ez adott számítógépen.
De gondolj, hogy mennyi kódot kellett írni.
Gondolom, hogy mennyi kódot kellett írni.
Gondolja, hogy hány órát töltött a D-hall, vagy a kollégiumi vagy bárhol
valóban kódolási fel, hogy a megoldást.
>> Nos, ha valóban van egy magasabb szintű nyelv, mint a PHP, vegye tudomásul
mit tehetek itt.
Először is, tételezzük fel, hogy ez inkább az elosztás kódot.
Ez a fájl neve helyesírás.
Ez elérhető része a mai elosztás kódot.
És fogok hullám kezem a legtöbb A részleteket, de ez valójában
egy érdekes példa arra, hogy lehet, hogy port egy nyelvet
, mint a C-PHP.
Szó szerint nyitott két szöveges ablakok, az egyik az én C változat speller.c,
és elkezdtem fordítja az én fej PHP, és írja ki a
a legközelebbi egyenértékű funkciókat.
>> Tehát ezeket a dolgokat más.
Láttuk utolsó alkalom, hogy a PHP nem használja tartalmazzák egészen azonos módon.
Használ igényelnek jellemzően, bár többek között létezik.
Határozza meg egy kicsit eltér a # Define C-ben, de ez
hogyan teszünk egy állandó.
$ Argc kiderül, létezik a PHP-ben, így már láttam.
Ezek csak változók, az összes kezdődő dollár jeleket.
Emlékezzünk vissza, ez csak egy rakás lebegő pontokat.
>> Tehát hosszú történet rövid, akkor szívesen flip ezt, ha kíváncsi, hogy ez
majdnem egy vonal-for-átalakítás a vonal C változat speller.c a PHP.
És akkor ezt újra fél tucat más nyelveken.
>> De ami igazán érdekes ez.
Vagy mi őszintén szomorú ez.
Hadd menjek előre, és írja be a dictionary.php, és azt állítják, hogy én vagyok
fog menni előre, és újra végrehajtani probléma meg hat itt.
>> Szóval javaslom, először, hogy ebben a fájl, amelyet végre kell hajtani
PHP, hadd nyissa meg a címkéket, mint ezt.
Hadd adjak magamnak egy globális változó, $ méret lesz nulla.
És fogok adni magamnak egy hash tábla.
Fogom használni a hash tábla ezt a dolgot.
Hogyan történik a hash tábla PHP-ben?
Kész.
OK.
>> Tehát nyitó zárójel záró zárójel jelöli amit a PHP, ahogy láttuk?
Egy tömb, hanem egy tömböt, amely egy asszociatív tömb.
Egy asszociatív tömb egy adat struktúra, amely
társult kulcsokat értékeket.
>> Most a legegyszerűbb numerikusan indexelt tömb, azokat a kulcsokat is, mi?
Nulla, egy, kettő, három, nem igaz?
Old school cucc vissza C. De ez is is, vonósok, mint a foo és bar,
vagy Maxwell, vagy az ilyen szöveg.
Szóval kihasználhatják, hogy az csak egy pillanat.
>> Hadd menjek előre, és kijelentik, a funkció, mint a -
csináljuk load () először.
Tehát load () függvényt.
És a PHP egy kicsit különbözik, hogy szó szerint írja be a funkciót, de a
ne írjon a visszatérési típus.
Én megyek előre, és azt mondják, hogy a load () függvényt kell venni a
érv $ szótár, csak mint a C változat volt.
Csinálok, hogy a memóriából.
>> Azt javaslom, hogy én vagyok fogja ezt.
Én egyszerűen csak csinálni foreach.
Én fogom hívni a függvényt hívott file (), átadva a nevét, hogy a
fájl, amely a változó $ Szótár mint $ szót.
Aztán belsejében a for ciklus itt vagyok fog menni előre, és tárolja a
$ Tábla $ szó lesz igaz.
Kész.
Ó, várj.
Kész.
OK.
>> Ez a load () függvényt mondjuk a PHP.
Nos, miért működik ez?
És én vagyok a fajta csalás van.
>> Szóval, az egyik, foreach láttuk rövid utoljára.
Ez csak azt jelenti, hogy képes végighaladni tömb, nem törődve az i
és n és plus plus, és minden adott.
Dictionary természetesen a fájl nevét, valami, mint a nagy vagy kicsi, a két
szótárak használtuk utoljára.
Fájl egy olyan funkció, amely megnyitja a szöveget fájlt, beolvassa azt soronként, és
kezek biztonsági másolatot egy hatalmas tömb, egyes elemek, amelyeknek van egy
sort a fájlból.
Szóval ez a kombináció a fopen, és fread, és míg a hurok, és fclose,
és minden adott.
Végül, mint szó, csak azt jelenti, hogy ez a változó fogok férhetnek hozzá
minden iterációs ebben a hurokban.
>> Tehát röviden, ez egy óceánjáró itt azt jelenti, megnyitja a fájlt, amelynek neve a
szótár, a változó, végighaladni azt sorról sorra, és minden alkalommal, amikor
a vonal, tárolja változó nevű szót, majd tenni valamit a szót.
Mit akarok?
Azt szeretnénk, hogy a szót, a hash tábla.
>> Nos, én nem tud valamit az én hash tábla, mint C-ben
szögletes zárójelben.
Ezt a nevet a hash tábla.
Megyek index abba a hash táblázat ezen a helyen.
Tehát nem zárójelbe nulla, nem zárójelbe egyet.
Konzol idézet idézet vége valamit, bármi is legyen szó.
És ahogy lehet, hogy a hash tábla munka trie, csak bolt
gyakorlatilag egy logikai, implicit vagy explicit módon.
Kész.
Én tárolása az érték igaz.
>> Most van egy pár dolog Én felületességet itt.
Technikailag, ott lesz egy bosszantó új vonal, / n, a végén
minden ilyen szavak.
Szóval kéne hívni a PHP függvény úgynevezett chop (), amely
a szó szoros értelmében, hogy vágja le.
És valóban szükség van, hogy tegye egy másik dolog.
Talán érdemes növelni méretét minden iteráció, úgyhogy nyomon követése
világszerte, hogy mi az.
És őszintén, és ez az egyik ostobább aspektusait PHP, ha
egy globális változó, szükség van kifejezetten azt mondják, hogy te vagy.
Így fogok valóban írja a globális $ Méret, globális $ asztal, és most
a funkció teljes.
>> Tehát nem olyan egyszerű, mint korábban, de talán kevesebb idő alatt, mint a C-
verzió, talán?
OK.
>> És most lássuk a Check () függvényt.
Nézzük meg, ez legalább vette a órákon át, hogy volt nekünk C. Tehát
hadd menjen előre, és kijelentik, ellenőrizze függvényében.
Vesz érvelés szó, ami fog jönni a helyesírás.
És én csak megyek, hogy ellenőrizze, hogy a következő változót isset, asztal
konzol strtolower szó -
nézzük egyensúlyt minden az én zárójelek -
majd vissza igaz.
Else -
ez tényleg kemény program keretében.
Else vissza hamis.
Kész.
Ez az ellenőrzés ().
>> Nos, miért is működik ez?
Nos, az egyik én telt el egy szót, amely egy string.
Kettő, én ellenőrzése belsejében a hash asztal, ki hívott $ asztalra.
Én arra kényszerítve, hogy kisbetűs hívja funkció nagyon hasonló tolower ()-ben
C, de ez nem az egész szót, nem egyetlen karaktert.
És ha ez be van állítva, ott más szóval egy beállított értéket, más szóval,
ha ez igaz, akkor igen, ez egy szó.
Mert én tettem oda a load ().
És ha nem, megyek vissza hamis.
>> Most a többiek könnyű.
Function size (), hogyan tudom ezt megtenni?
Én alapvetően nem vissza $ méretét.
De technikailag kell ezt a bosszantó dolgot.
És valóban fel hallani, én vágás egyik sarkon túl sok.
Tényleg kell tennie a globális $ asztalra.
>> De, hogy azt mondta, kirak).
Vegye () lenyűgöző.
Function kirak ().
Hogyan akarok végrehajtani kirak ()?
Kész.
OK.
>> Tehát kirak (), a memória kezelése teljesen gondoskodott az Ön számára
olyasmi, mint a PHP, és sok A magasabb szintű nyelven.
Tehát ez csodálatos.
Például, hogy miért a fenéért is töltötte az elmúlt nyolc plusz hét C írásban
látszólag nagyon lassan, nagyon idő időigényes problémák tíz óra
A munkát a mi övek?
>> Nos, az egy dolog, ez a munka finom kis programok.
Az biztos, hogy felgyorsult a fejlesztési időt.
De nézzük meg, mi történik a valós világban.
>> Hadd menjek ebbe a könyvtárba Egy terminál ablakban.
Van helyesírás.
És észre, félre, és lehet, hogy már találkozott ezzel a probléma meg
hat vagy probléma meg hét.
Nem feltétlenül kell végén PHP fájlok. php.
Ha tesz egy sort, hogy az elsőt a csúcsra, ez egy speciális sor
szintaxis, amely lényegében azt jelenti, meg A program neve PHP, és ez alapján
értelmezik ezt a fájlt.
Tehát most senki sem tudja igazán, hogy Futok egy PHP program.
Tudok futni csak, mintha volt valami összeállított C.
>> De itt van a dolog.
Valójában, csináljuk újra.
Dropbox/pset6 /.
Van helyesírás.
OK, 0,44 másodperccel.
A felgyorsult ebben az időben.
>> Most menjünk be a PHP verzió.
Jó húzás.
De hiszem, hogy mennyi idő Megmentettem az munkaidőben.
OK.
>> Így 3,59 másodperc, ami valójában nem hangzik pontos sem.
De ez azért van, mert a hosszú történet rövid, amikor nyomtat ki egy hatalmas összeg
dolog, hogy a képernyőn, hogy a maga is lassítja a dolgokat.
Mi tényleg vette a CPU a készülék volt 3,59 másodperc, a
ellentétben a C, amelyik 0,44 másodperc legutóbb.
Ez valóban egy rendje nagysága eltérő.
>> Szóval, hol van az ár jön?
Miért van ez így sokkal lassabb?
Miért PHP teljesítenek olyan rosszul?
Danielle?
>> Közönség: Ön nem igazán egy hash tábla.
>> DAVID MALAN: Én nem igazán egy hash tábla.
Szóval ilyen volt.
Tehát ez egy asszociatív tömb.
Valószínűleg, ha az emberek a PHP nagyon okos, használták alatta
Hood tényleges hash tábla végre valami, mint a C vagy C + +.
De.
Igen.
>> Közönség: [hallható].
>> DAVID MALAN: Igen.
Így az egyes funkciók írtam már - valóban, meg tudja mondani, hogy még egyszer a
kicsit hangosabban?
>> Közönség: Minden egyes funkciók beleértve téged is sokkal több teljes
kapacitás, mint -
>> DAVID MALAN: Szóval ez nagyon igaz.
Van egy sokkal fölött, hogy mi vagyunk Nem igazán látni koncentrálva csak
dictionary.php, amit írtam.
Ezzel szemben van egy egész tolmács megy a háttérben.
Sőt, amikor futott a program, akkor nem futott össze nullák és egyesek
tervezték, az én Intel CPU.
Inkább ez fut soronként PHP kód, ami úgy néz ki,
mint mi begépelte.
És így, amikor használja a értelmezett nyelv, akkor
Igazából fizetni ezt az árat.
El fog tartani egy ideig, hogy olvassa el a fájl felülről lefelé, balról
jobbra, majd végre az egyes sorban újra és újra.
>> Most a valóságban, különösen az interneten, akkor valóban felgyorsítja ezt a folyamatot
a gyorsítótár az eredményei PHP kódot értelmezik.
És, hogy van értelme az interneten, mert a ha nem az egyik felhasználó, mint
ide, de a 1000 vagy 10.000 felhasználó, akkor talán az első alkalom, hogy a fájl
elérni, hogy ez lassú, de utána ez sokkal gyorsabb.
>> De ez is megint egy kompromisszum.
És valami, mint a kutatási adatok beállítása, vagy akár valami nagy, mint a
ez, a felhasználók előbb-utóbb kezd érezni, hogy a lassulás.
>> Tehát röviden, értelmezett nyelvek nagyon divatos, nagyon népszerű, és a
őszintén szólva talán a nyelveket el kell érnie, ha problémák megoldására
követően CS50.
De észre, hogy mennyi te tényleg Ha igaz, a motorháztető alatt
tényleg azok elmúlt hét hash asztalok, és fák, és megpróbálja,
amelyeket végül is, hogy ténylegesen végre a dolgok, mint nyitó zárójel,
szögletes zárójel, ami most már köszönettel vesznek.
>> Szóval vessünk egy pillantást most ebben az internetes környezetben.
És megemlítettem utolsó alkalom, hogy ott van egy csomó superglobals a PHP, hogy
nem igazán releváns a parancssorban.
Ők inkább relevánsak A PHP egy webes környezetben.
Így a PHP a webszerveren, hogy létrehozni dolgokat, mint a HTML.
>> És pillantott $ _GET és $ _POST, és ez az, ahol automatikusan a felhasználók
input végül csak ha be alkotnak fájlba végződő. PHP a web
szerver, mint a készülék.
De nézzük röviden $ _COOKIE És a $ _SESSION.
>> A laikus szempontból, mi az a süti, mint érti azt a keretében
a web?
>> Közönség: Fájl a számítógépen.
>> DAVID MALAN: Igen.
Ez egy fájlt a felhasználó számítógépén ültetett bármilyen website
véletlenül meglátogatni.
Tehát, ha megy a Facebook, ha megy a bankofamerica.com, ha megy
a google.com, ha megy, hogy szinte minden honlap a világon ezekben a napokban,
beleértve cs50.net, cookie ültetett a számítógépen, ami
vagy a tárolt érték RAM a számítógép böngésző memóriájában, vagy a
néha valóban egy tárolt fájl a merevlemezen.
>> És mi általában tárolja a fájlban nem a felhasználó nevét, nem a
jelszót, jellemzően nem valami érzékeny, kivéve, ha a weboldal nem annyira
jó a biztonság, hanem ez egy nagy egyedi azonosító körében
más dolog.
Ez egy nagy véletlen számot ültetett a számítógépet, de lehet gondolni, mint
egyfajta virtuális pecsét, mint a egy klub vagy valami vidámpark
lehetővé teszi a személyzet, a tulajdonosok, hogy a szolgáltatást, hogy ne feledje, hogy ki vagy.
Tehát, ha a nagy véletlen számot, mint 12345678, bár ez nyilvánvalóan
Nem is véletlen, gondolom az, hogy mivel a pecsét, hogy amikor meglátogatja
facebook.com az első alkalommal, akkor bélyegző ez a szám a kezét.
És azért, mert beszél HTTP, akkor hogy egy böngésző, és mivel a Facebook
nyilván beszél, ugyanaz, mint a web szerver, a protokoll HTTP szerint
bármikor később látogat facebook.com, hogy ez egy másik
később, egy órával később, még a következő napon, amíg még nem kifejezetten
kijelentkezett, amely hatékonyan olyan, mint a kézmosás.
HTTP azt mondja, be kell nyújtania a pecsét minden alkalommal, amikor
visszatér a weboldalon.
>> Mit Facebook akkor ez az, hogy nézd meg, hogy a pecsét és a
azt mondják, ó, az 123456789.
Nem tudom, első pillantásra, hogy ez a David Malan Cambridge-ben,
Massachusetts, de lehet ellenőrizni a adatbázis, és azt mondják, ó, az a személy
akinek a számítógépen telepítettünk 123456789 David Malan Cambridge,
Massachusetts.
Mutassuk meg, hogy a felhasználó, akkor a profilt oldalon vagy a News Feed.
>> De van egy probléma, ha ez az, hogy a web valóban működik.
Vessünk egy pillantást egy gyors példát.
Nézzük valóban el kell mondanom facebook.com.
De mielőtt tudnánk menni, legyen menjek előre, és nyisd ki a Chrome
Felügyelő ide.
Hadd nézzem meg a Hálózat fülre.
És most menjünk előre, és írja be A https://facebook.com.
És én ezzel, hogy, hogy nem látunk az összes ilyen átirányítások és a hulladék
idő nézegette azokat.
Hadd nyomd meg az Entert.
>> Rendben van.
Látunk egy csomó kéréseket.
Jön a Facebook.
Van egy csomó kép.
És itt, egy az említése késleltetés utolsó alkalom, hogy ez
sok HTTP kéréseket.
De az első valószínűleg a legérdekesebb.
>> Szóval lépjünk le itt, és Én nagyítás a második.
Ez lesz az a fajta a rendetlenség, de lássuk.
Facebook küld nekünk csomó dolgot.
>> De hé, érdekes.
Ők ültetés nem egy, hanem négy kézi bélyegzők rá a kezem itt.
Set-Cookie, Set-Cookie, set-cookie-t, set-cookie-t.
És van néhány funkciók itt.
Mindegyik néhányat említsünk fajta lejárat.
És úgy néz ki, mint a Facebook azt reméli, hogy emlékezzen rám 2015-ig.
Szóval ez feltehetően az időt, amely Azt kell jelentkeznie, vagy fognak csak
automatikusan feltételezik vagyok nem jön vissza.
Tehát ez valójában egy tisztességes ideig.
>> És vannak más dolog folyik itt.
Ez a süti úgy tűnik, hogy erőszakkal törölte azzal lejárt 1970-ben
mielőtt cookie-kat létezett.
Így a böngésző csak megy feltételezni OK, ez olyan, mintha
mosás a kezek bélyegző.
>> De most, amikor a böngészője a későbbi kérelem -
hadd menjen előre, és ezt újra és reload.
Most hadd menjen vissza az első kérelmet, és lemegy
itt kérhet fejlécet.
Figyeljük meg ezt.
Úgyhogy most alá nem válasz fejlécet, de észre azt mondja kérés fejlécet.
És észre, hogy a böngésző részeként kérését, miután megütött reload van
küldeni legalább az alábbi információt.
Nem Set-Cookie, de a süti.
Tehát ez az a vonal, a HTTP fejléc így beszélni, ahol a böngésző a sort
Az nem az én tudva azt bemutató kezem Facebook ellenőrzés.
>> Tehát ezek a cookie-k is használunk, akkor miért?
Emlékezni, hogy ki vagy, és emlékszem, milyen hányszor voltál ott, vagy
Tényleg semmit.
>> Tehát itt van counter.php.
És hadd ráközelít a font.
És minden egyes alkalommal, amikor újra az oldalt, értesítés ez eszébe jutott, hogy hányszor
Voltam ott.
Nos, ez nem olyan látványos.
Nézzük csak zárja be a fülön, és most térjünk vissza a
http://localhost/counter.php.
>> Ó, ez érdekes.
Még mindig emlékezett, még bár zárt a fület.
És őszintén szólva, ha a böngésző bezárásához ha végre a megfelelő módon, azt
Még mindig emlékszem, hogy ez a felhasználó aki ő volt az első alkalom, és
csak egyszer megyek a Chrome-menüt, amely ide itt van, és menj
Előzmények, majd kattintson a Böngészési adatok törlése, mint néhány lehet, hogy a
múlt, csak akkor lesz a cookie-kat valóban törlésre web
fejlesztés.
>> Tehát, ha megyünk -
nézzük közelről gedit itt.
És ha most elindulunk, hogy ezt a fájlt.
Hadd menjek a mi vhostokat / localhost / public, hadd tegye
counter.php.
Vegyük észre, hogy ez egy nagyon egyszerű program.
Ez egy nagyon egyszerű honlap.
>> Tehát a tetején a fájl csak megjegyzéseket.
De itt van egy új vonal, amit lehet láttuk már a p-be hét,
session_start ().
Ez egy sor PHP kód lényegében azt mondja, a webszerver, győződjön
Ügyeljen arra, hogy bélyegző kezét, és Ügyeljünk arra, hogy kézzel bélyegek.
Ez minden, ezt a vonalat nem, és azt nem minden, hogy a folyamat számunkra.
Aztán észre, én csak most két ága van.
Ha a számláló kulcs belülről a jelen speciális globális változó neve
$ _SESSION Beállítva - más szóval, ha van valami értéke van -
lássunk, és tárolja azt a helyi változó neve $ számlálót.
Else, menjünk hozzá $ counter Az alapértelmezett 0 érték.
>> Most itt van az egyik aspektusa a PHP, ami egyszerre áldás és átok.
A PHP egy kicsit hanyag.
Tehát míg a C-ben, mi lenne a hatálya számláló volna
vagy itt, vagy itt?
>> Az lett volna csak azoknak kapcsos zárójelek.
Találd ki, mi?
A PHP, létezik még azokon kívül kapcsos zárójelek között, itt, és itt,
és itt, és itt, és még lent.
Szóval azt mondom, ez egy áldás abban az értelemben, hogy nem kell gondolkodni, mint
kemény, mint tettük hete.
De ez is egy kicsit az átok, hogy nem számít, ha egy változó
PHP, legalábbis a program, mint ez, ez a globálisan hozzáférhető
jobb vagy rosszabb.
Tehát meg kell szem előtt tartani, most, hogy a változó nem definiált.
Lehet, hogy meghatározott mailt.
>> De mit fogok csinálni végül?
Fogom tárolni benne, hogy a globális mint a változó értéke
Counter gombot az eredmény Ennek counter plusz 1.
Szóval ez csak a számtani , hogy ez a
incrementation, hogy a számláló.
És az a tény, hogy én vagyok tárolja, hogy értéket vissza ide IS jelent
lényegében frissíti az adatbázis ne feledjük, hogy a felhasználó 123456789 került
Itt két alkalommal.
És amikor újra meg újra a következő alkalommal, amikor töltse újra a lapot, ez lesz ellenőrizni
kezem pecsét és azt mondják, ó, felhasználónak 123456789 mostanra
már itt háromszor.
>> És akkor mi van a PHP és a hasonló nyelveket tesznek számunkra ők kitalálni
ki, hogyan és hol és mennyi ideig hogy tárolja az adatokat a speciális
szuperglobális.
És ez szuperglobális a következő alkalommal, látogassa meg az oldalt van valami varázslatosan
előtti lakott, tele értékek ott voltak a legutóbbi alkalommal, amikor meglátogatott,
hogy ez volt a második óra, egy hét ezelőtt vagy 2013-ban, és mi most beszélünk
a 2015.
PHP és a webszerver vigyázni az összes az Ön számára.
>> Közönség: [hangtalan].
>> DAVID MALAN: Változók PHP lényegében mindig globális, ha
róluk egy függvényen belül, és akkor azok helyi
A funkció csak.
Hanem azért, mert én már nem írt funkciók, ezek most gyakorlatilag
globális végig az egész fájlt itt.
>> Közönség: Van-e mód , hogy azok a helyi?
>> DAVID MALAN: Van módja annak, hogy azok a helyi?
Csak csomagolás őket funkciókat.
Melyik a legfrissebb PHP, meg tudod csinálni ezt
egy névtelen függvényt.
De még az, hogy a összefüggésben JavaScript.
De a rövid válasz: nem.
A hosszabb válasz: igen.
Szép.
Jó kvíz kérdés.
Rendben van.
>> Így végül, az oldal maga valójában nagyon egyszerű.
Figyeljük meg, hogy egyszer én kilépéshez PHP mód felidézni hogy ez a cucc le
alatt csak megy, hogy nyárson ki nyers a böngésző.
Ami jó, mert én akarok küldeni a felhasználó bizonyos HTML, de én nem akarom
hogy dinamikusan frissíti a HTML.
És az egyik mód arra, hogy ennek az, hogy rendezni nagyon gyorsan csökken vissza a PHP
módban nyitó zárójel kérdőjel egyenlőségjel, majd a kimenetet az érték
számláló.
>> Vagy ha ez úgy néz ki, egy kicsit rejtélyes, ez egyenlőségjel valójában csak néhány
szintaktikai cukor a printf ($ counter).
De őszintén szólva, ez csak egy kicsit csúnya és egy kicsit bosszantó, hogy írja.
Tehát PHP nagyon szépen kínálja ezt a szolgáltatást ahol csak annyit, hogy több
tömören azonos módon.
>> Szóval, mi folyik alatta a motorháztető alatt?
Nézzük gyorsan nézd meg a hálózat tab itt counter.php.
És hadd menjen előre, és az első hadd törölje a cookie-kat.
Nézzük Böngészési adatok törlése óta az idők kezdete.
Most menjünk vissza ide.
Most újra az oldalt.
És én vissza nullára.
Mert a pecsét már mosott, Most egy új cookie-t.
>> Valóban, ha megnézzük a hálózat fülre, és nézd meg válasz fejlécét, észre
hogy a készülék küld nekem cookie akinek a neve kissé
önkényesen, hanem egyfajta ésszerűen, PHPSESSID.
És küldi nekem ez tényleg nagy véletlen számot.
Ez nem elég sok.
Ez nem egészen hexadecimális.
Ez valamilyen alfanumerikus karakterlánc, de feltehetően ez véletlen.
És ez a pecsét, így a beszélni, hogy én vagyok utalva.
>> Közben, ha újra, majd kattintson a nézd meg ezt a második sorban a második
kérelmet, értesítést most, hogy a kérelem fejlécek közé PHPSESSID értéke ennek
nem set-cookie-t, de csak cookie-t.
És ez a böngésző bemutatása A kezem bélyegző.
>> Tehát most, mint egy teaser, és majd beszélgetünk erről egy hét múlva, de a
milyen módon jelent ez neked sebezhető, a Facebook számla
sérülékeny, és más hasonló számlák sebezhető?
>> Közönség: Ha valaki a cookie-t.
>> DAVID MALAN: Igen, ha valaki van a cookie.
Úgy értem igazán, ugyanúgy, mint néhányan volna bíróság elé, mint egy klub, vagy egy
vidámpark, ha megpróbálja valami így másolni a bélyegző, bár
visszafelé egy másik ember kezét, és akkor ő mutatja be azt
saját, ha tényleg nem néz ki azonos, 123456789, akkor a web
szerver látszólag csak megy, bízom benne, hogy a felhasználó maga.
>> És ez valóban egy alapvető fenyegetés minden alkalommal, amikor a sütiket
mert ha valaki csak úgy hamisít Beszélünk az Ön cookie-t, kitalálja, hogy mit
is, akár azzal, hogy valóban másolás nézi a számítógép
és mivel, mint a, OK.
Dávid cookie JJ3JIK és így tovább, és akkor ők okos ahhoz, hogy tudja,
hogyan, hogy egyfajta manuális küldeni, hogy a süti a böngésző vagy a
programot írnak, tudtak teljesen jelentkezzen be a honlapon, mint te.
Ez nem olyan nehéz, hogy magát a valaki, hacsak nem újra p-set
két, amely bevezette az mi?
>> Közönség: Kriptográfia.
>> DAVID MALAN: A kis kis kriptográfia.
Egyszerű kriptográfia, legalábbis a standard változat, de a titkosítási
mégis.
kevesebb.
Így kiderül, ha titkosítja az összes Ezek a fejlécek a valami, amit
talán most többet tudni meghitten ismerem, mint az SSL, Secure Socket Layer vagy https:// URL,
akkor az összes ilyen dolgot már pillantva valóban titkosított,
ami azt jelenti, hogy olyan, mint te nem tudja olvasni a pecsét.
Csak a facebook.com lehet, vagy google.com, vagy ebben az esetben a készülék
olvastam, hogy a pecsét.
>> Tragikus azonban, és ez szintén túl szükséges a NSA cucc
a végén még SSL feltörhető.
És ez tényleg nem olyan nehéz még feltörni, hogy a titkosítás.
Nem annyira a repedés a titkosítás, hanem a megtévesztett
böngésző dekódoláshoz Az adatok idő előtt.
De ismétlem, majd ugratni azzal, hogy hamarosan.
Egyelőre csak féljen.
Ez tragikusan olyan igaz.
>> Rendben van.
Szóval, hol ezt most hagyni minket?
Hát, ezt.
Menjünk előre, és egy gyors teaser mielőtt egy kis szünetet.
És azt hiszem, mi időzzön egy kicsit ma, de fogunk belevetik magukat
valami új és szexi, ami fen az étvágyat még.
Szóval ez a teaser.
>> Tehát SQL, elkezdtünk beszélni még oly rövid ideig utoljára.
Majd igazán piszkos a kezed ez néhány p-set hét.
És a laikus szempontból, mit SQL -
S-Q-L -
érted?
Mi ez?
Igen.
>> Közönség: Nézzük meg hozzáférési adatait.
>> DAVID MALAN: Igen.
Azt nézzük meg hozzáférési adatait egy adatbázisban.
Structured Query Language.
És ez lényegében egy programozási nyelv.
Vannak olyan jellemzői is, hogy mi nem is használja az osztályban.
De akkor hatékonyan határozzák funkciókat.
Ők az úgynevezett tárolt eljárások SQL.
De majd tartani meglehetősen egyszerű, és csak felhasználhatják azt a bizonyos alapvető műveleteket
mint kiválasztásával adatok adatbevitel az adatok frissítése, és az adatok törlését.
>> És akkor tényleg azt hiszed egy adatbázis, mint egy SQL adatbázis, mint csak
hogy a Microsoft Excel.
Mivel az SQL utal, hogy a relációs adatbázis, ahol a
kapcsolatban csak azt jelenti, táblákat.
Sorok és oszlopok.
Tehát bármi, amit fel tud állítani egy táblázatot mint ez vagy a Google Docs,
meg tudná tenni egy SQL adatbázis úgy nyilatkozott, egy asztal.
>> Nos, mit valójában elérheti ezt az információt?
Nos, parancsok vagy lekérdezések, mint ez.
SELECT, INSERT, UPDATE, és DELETE.
És a legtöbb esetben, ezek a Négy egyetlen összetevője akkor kell
valami nagyon erős A probléma meg hét.
>> Most vissza a nap, akkor valóban kölcsönhatásba egy adatbázist a
fekete-fehér terminál ablak villogó prompt, mint ez.
És az adatbázis kifutunk az készüléket MySQL nevezik, ami
a szabad és nyílt forráskódú adatbázis-motor.
Ha a Google, és olvasd el a Wikipedia cikket, akkor tudja, hogy a neve
egy kis átmenet néhány Linux rendszerekkel.
Maria adatbázis valójában egy villa úgy mondjam a MySQL.
>> Hosszú történet rövid, az Oracle megvásárolta a MySQL.
Az Oracle egy nagy cég.
Az emberek már attól, hogy ez már nem is annyira a nyílt forráskódú,
így ez csak a MySQL egy példányát, ami még szabad, még nyílt forráskódú, és a
telepített Fedora Linux alapértelmezés szerint.
>> De ez a fajta fájdalom a nyak megismerkedni a
adatbázis ezen a módon.
Tehát mi is a CS50 készülék egy ingyenes, nyílt forráskódú eszköz, úgynevezett
phpMyAdmin.
Csak véletlen, hogy ez PHP-ben íródott.
Nincs alapvető szükség van a PHP itt.
De ez csak egy web-alapú eszköz, hogy ingyenesen letölthető, telepíthető
A készülék, amely lehetővé teszi számunkra, hogy egy grafikus felhasználói felület, amely
hogy vizsgálja meg a p-be hét adatbázis amely az új adatbázisokat,
azt mondják, a saját végső projekt, ha azt hasonlók, és végül létrehozni
dinamikus weboldalak, mint a CS50 Finance amely lehetővé teszi adatok lekérdezéséhez és
frissítése az adatok dinamikusan.
>> Ugye nem kell majd használni csak egy egyszerű szöveges fájl vagy CSV.
Tudod valójában egy okos adatbázist program, így végre több
bonyolult lekérdezések csak olvasó át mindent lineárisan.
>> Így például, ez az, amit adni ki a dobozból a p-be a hét.
Ez egy asztal, látszólag legalább három oszlopot, amelyek közül az egyik
felhasználónév, amelyek közül az egyik hash, és a másik, amely azonosítója.
>> De az érdekes dolog, és csak a kötekedik ki egy gondolat itt, felhasználónév
feltehetőleg már egyedi, nem igaz?
Úgy értem, a legtöbb minden olyan webhelyet, ha van egy felhasználónevet, ott
akkor ne két Caesars.
Nem lehet két Malans.
Nem lehet két jharvards.
Egyedülálló.
Ellenkező esetben nem tudjuk, melyik jharvard valójában.
Akkor mi lehet a motiváció is miután egy harmadik oszlop a bal oldalon
ott az úgynevezett ID, ami úgy néz ki, mint egy szám, ami hasonlóan egyedi?
Úgy érzi, egy kicsit redundáns nekem első pillantásra.
Miért lehet az, hogy vonzó, hogy a nem csak egyedi felhasználónevek,
hanem az egyedi számokat?
>> Közönség: Lehetett volna ugyanazt a jelszót.
>> DAVID MALAN: Az emberek lehet, hogy ugyanazt a jelszót, persze.
Ez lehet teljesen történhet.
De ha ezt az egyedülálló felhasználóneveddel, azt azt állítják, hogy ez nem igazán
számít, mert ha írja be a felhasználónév, én csak azt kell ellenőrizni, hogy
jelszót, a hash tartalmazza.
Mi másért?
>> Közönség: gyorsabb keresést.
>> DAVID MALAN: gyorsabb keresést.
Miért?
>> Közönség: ID csak egy.
>> DAVID MALAN: ID csak egy karakter, vagy pontosabban, ez a szám,
így valószínűleg 32 bit vagy valami ilyesmi.
Mivel a felhasználóneveddel, látszólag Jason Hirschhorn ott van valami
nevetségesen hosszú, és ez fog engem sokkal több időt a húr
összehasonlítani H-I-R-S-C-H-H-O-R-N, és talán a / 0, vagy valami ilyesmi, annak érdekében,
felnézni Jason, szemben a csak mondván, adja meg a felhasználó a kettes számú.
Ez a 32 bit.
Ez egy INT, amely meg kell összehasonlítani.
És valóban, pontosan ezért adatbázisok általában rendelni egyedi azonosítókat
sorok őket.
>> Most mi más adattípusok vannak mellett INT és látszólag
húrok, mint ez?
Nos, hogy helyesebb, SQL adatbázisok, mint a
MySQL, van CHAR mezők.
És tulaj egy kicsit félrevezető nem egy CHAR.
A CHAR területen egy MySQL adatbázis egy vagy több karakter, de ez egy
meghatározott számú karaktert.
>> Így például, ha én megyek át phpMyAdmin mint azt már, vagy
hamarosan a probléma meg hét, és megyek az az adatbázis, és csak a móka kedvéért,
hozzunk létre egy új tábla neve tesztelni mindössze két oszlopot.
Én majd kattintson a Mehet gombra.
És ez lesz meglehetősen ismerős, különösen akkor bütykölni
körül a saját.
Itt is írja ID létrehozása Új tábla típusú INT.
De itt azt is írja felhasználónév újra a korábbi táblázat.
És észre, van egy csomó A típusok közül lehet választani.
>> És ez is az oka phpMyAdmin a fajta szép.
Ez egyfajta ön-tanítás, hogy csak ilyen pontot, és kattintson, és
nézd meg legördülő menük, és arra következtetni, hogy milyen hatásköre SQL ad.
>> És valóban, ha úgy döntök, CHAR, én majd meg kell határozni a hosszát, vagy hogyan
sok értéket, hogy hány karakter.
Tehát nagyon közös értékek olyan dolgok, mint a 255, de ez egy kicsit hosszú.
Általában nyolc a felhasználónevet.
De ez egy kicsit kicsi ezekben a napokban.
Tehát ez egy tervezési döntés.
Ez max. 8 karakter, 32, 255, 1000?
Ez tényleg rajtad múlik.
De egy CHAR mező egy rögzített szám.
Úgy döntenek, túl kevés, és te milyen csavarozott ha akarsz egy hosszabb felhasználónevet.
Válassza ki a túl sok, és mi a hátránya?
>> Közönség: [hallható].
>> DAVID MALAN: Ez pazarló.
Csakúgy, mint a C, ha van egy nagyobb darab memória mint amennyire szüksége van, akkor
csak időt és kiesik hely.
Tehát, mint egy alternatív, létezik VARCHAR, amely megoldja ezt a problémát,
kezelése hossza nem fix hosszúságú, de a maximális hosszát, és egy
változó karaktereinek számát, ami aztán inkább csak annyi KARAKTEREK, mint te
valóban szükség van.
Ez jól hangzik.
>> Miért nem megszabadulni a CHAR adattípus akkor?
Mi lehet a hátránya a VARCHARs, ami úgy hangzik,
mintha ez egy szép győzelem?
Igen?
>> Közönség: [hallható].
>> DAVID MALAN: OK, jó.
Tehát, ha az összes adatot azonos hossza, mi az aggodalom?
>> Közönség: Mert pazarlás adatok elmondja őket.
>> DAVID MALAN: Tehát, ha az összes adat azonos hosszúságú, bár azt állítják,
hogy megad egy maximális hosszúságú A VARCHAR nem különbözik
megad egy fix hosszúságú CHAR esetén tudod, ez a szám előre.
De valóban, én pedig valami kivonat, amely válasz a valóság
hogy még mindig a max, ami bosszantó, különösen akkor, ha
találkozik egy személy nevét, ami szokatlanul hosszú, hogy nem
előre.
És ez is egy kicsit kevésbé hatékony hogy ténylegesen keresni VARCHARs mint
szemben a keresést karaktereket; különösen a hosszú asztal, amely sok-
rengeteg adatot.
Tehát itt is, tematikus ismét nincs nyilvánvaló választás.
>> Szóval, csak hogy egyfajta más adattípusok, amelyek érdekesek lehetnek
vagy p-set vagy hét A jövőben ott INT.
Van BIGINT, amely olyan, mint a hosszú, hosszú.
Úgy látszik, hogy a 64 bit.
Van DECIMAL, amit majd látni a probléma halmaz, ami sokkal
tisztább válasz a problémákra is felmerült úszó és lebegő
pont pontatlanság.
És akkor ott van DATETIME.
Van szó adattípust, amely néz ki, mint egy év, egy hónap, egy nap,
és egy óra, perc, másodperc.
>> De az SQL adatbázisokat is dolgokat hívjuk indexek.
És az index van valami, amit adja létrehozásakor az asztalra
a keresések és egyéb műveletek hatékonyabb.
Pontosabban, van valami neve Az elsődleges index, amit lehetett
kijelentik az alábbiak szerint.
>> Mi volt ez az Ön számára a felhasználók asztali adunk.
De észre, ha én kézzel felüdítő A felhasználói tábla van adva
ez a név a felhasználók.
Már megadott azonosító.
Én meg INT.
Én meg felhasználónevet maximum 32 karakter.
De ha folyamatosan görgetés ez a meglehetősen nagy ablak, észre van egy
csomó más dolog, amit megadhat.
>> Az egyik, hogy megadhatja attribútumok mint, tudod mit, ez a
INT legyen előjel nélküli.
Nem akarom, hogy a negatív számok, úgyhogy teszi aláíratlan.
Null nem releváns itt, mert Azt akarom, hogy minden felhasználó
egyedi számot.
Én nem akarom, hogy null.
>> De ez érdekes.
Én is meghatározza, hogy azonosító vagy a elsődleges kulcs az adatbázisban, vagy ez a
egyedi, vagy indexelt, vagy a teljes szöveget.
Így a mai célokra, hosszú történet rövid, PRIMARY azt jelenti, hogy ez kell
egyszerre elvi és gyakorlati területén, amit használunk, hogy egyedülálló módon
azonosítja a felhasználót.
>> Tehát, ha megnézzük a felhasználókat, hogy ez a fajta Az ígéret, hogy vizsgálja meg őket leginkább
Ez az egyedi azonosító.
És az adatbázis biztosítja, hogy ha egy felhasználói szám 3, akkor nem
fizikailag be egy másik felhasználó azzal, hogy ugyanazt a 3-as.
Az adatbázis csak megtagadja, a módosítások mentéséhez.
Ami jó dolog, mert akkor védekezhet a magad. maga
>> Alternatívaként a felhasználónevet.
Tehát a második sorban, visszahívás, a felhasználónév mezőt.
Tehát a második sorban itt a felhasználóneveddel, mint mi a bal szélen is.
>> Szóval, mit is akarok adni?
Nem vagyok szabad, szerint SQL, két megadott elsődleges kulcsokat.
megadhat egy közös kulcsot, ahol nézd meg mindkét területen, de nem tudnak
külön-külön lehet elsődleges kulcs.
Szóval ez szóba sem jöhet.
Szóval, ami akarok válasszam?
>> Nos, EGYEDI hasonló szellemben a elsődleges kulcs ahol megadhatja ezt
mező egyedi, de Nem lesz az egy
Én használni az időt.
És nem fogjuk használni ezt minden az idő, miért megint?
Ez lassabb lehetséges, ha ez egy hosszú felhasználónevet.
Ez csak időpocsékolás.
>> INDEX eközben kimondja, hogy ez nem lesz egyedi, de szeretnék
, hogy a munka a mágia alatt a Hood, hogy gyorsabban nekem
keresni ezen a területen.
Tehát ez valószínűleg nem releváns.
A felhasználónév, azt állítják, hogy UNIQUE egy jó válasz.
De tegyük fel, hogy mi történt a felhasználók nagyobb érdekesebb, mint felhasználónevek,
hash és azonosító számokat.
Mi lenne, ha adott az embereknek a teljes nevét?
Mi van, ha nekik címek és egyéb adatokat róluk?
>> Nos, ha meghatározza, hogy egy oszlopot a adatbázis indexelt, ami azt jelenti, hogy
MySQL vagy az Oracle, vagy bármi adatbázis amit használ, meg kell trükközni
és használja valamilyen divatos adatok szerkezet, mint egy fa, vagy egy trie vagy
hash tábla, vagy valami, hogy garantálják hogy ha keres adatokat
válassza ki az adott területen -
mint mutasd meg mindenkinek, hogy él, az Oxford Street.
A lekérdezés ilyesmi.
Ha meg előre, hogy Ön is szeretne egy index a területen, a
keresések lesz sokkal, sokkal gyorsabban.
>> Ha nem ad meg egy indexet, a legjobb amit tehetünk, lineáris keresést, ha
ez nincs rendezve.
De ha adja INDEX, az intelligens emberek, akik az adatbázis -
emberek, mint te, aki már tudjuk fák és országokban és hash táblák -
automatikusan építeni egy ilyen adatok struktúra RAM, hogy megbizonyosodjon arról, hogy az
ezek keresések sokkal gyorsabb.
>> FULLTEXT közben hasonló szellemben, de lehetővé teszi, hogy helyettesítő
keresések, mint mutasd meg mindenkinek, hogy él utcákon, hogy kezdődik a
O betű bármilyen okból.
Meg tudod csinálni helyettesítő karakterek ilyesmi.
Vagy vonzóbb dolgok, mint a show- nekem mindenki, aki a szó -
mutasd meg mindenkinek, akinek a neve kezdődik egy adott levelet.
Kereshet kulcsszavak ezen a módon.
Rendben van.
>> Tehát, design lehetőségeket ott lehetséges.
Vannak mások, hogy fogok hullám a kezét.
Kiderül, hogy lehet különböző tárolási motorok.
És ez több, titokzatos, mint amennyi szükséges természetesen a probléma meg hét.
Alapértelmezésben srácok használ úgynevezett InnoDB.
Majd meglátod említik ezt valahol phpMyAdmin felülete legvalószínűbb.
De tudom, hogy vannak más tervezési határozatokat, amelyek potenciális
érdeklődés jön a végső projekteket, amennyiben teszel valamit, web-alapú.
>> De nézzük ezt.
Menjünk előre, és hogy ezt a képernyőn, mint a teaser a történetet
bele magát, a szobatársam, és egy pohár tejet.
Vessünk egy két perces vagy úgy szünet itt.
És ha maradok, hadd jöjjön vissza, egy kicsit többet SQL, és
majd egy kis JavaScript p-be nyolc szem előtt tartva.
>> Rendben van.
Szóval, most, hogy gondolsz a sarok esetben, nagyon könnyen felmerülhet
keretében egy adatbázis segítségével, vagy őszintén szólva, még a valós életben a dolgok
mint ATM kap pénzt.
Tehát itt van a hűtőszekrény.
Tegyük fel, hogy van egy túl-ben a kollégiumi, vagy a ház.
És van egy szobatársa, és mind a Tényleg szeretem a tejet például.
>> Szóval jön haza osztály egy nap.
Ő nincs még vissza.
Kinyitod a hűtőt.
Szeretné egy nagy pohár tejet.
Nincs tej.
Szóval, mit csinálsz?
Bezárja a hűtőben.
Fogd meg a kulcsokat.
Menj ki a térre.
És kapsz a sorban CVS azokon saját pénztár dolgokat, melyek mindig
hosszabb időt vesz igénybe, mint a ténylegesen miután pénztárosok.
Egyébként.
>> Tehát, eközben pont pont pont, a szobatársa hazajön, és ő
Hasonlóképpen van egy vágyódás A kis tejet.
Így ő kinyitja a hűtőt, úgy néz ki belülről, és ó, a fenébe.
Nincs tej.
Így ő fejek ki, előfordul, hogy menjen a többi CVS, ami csak egy
háztömbnyire valamilyen okból, és ő vagy ő lesz a sorban, hogy vásároljon néhány tejet.
>> Közben, gyere haza, ő vagy jön haza, és mit
akkor végül is?
Kétszer annyi tejet.
De nem igazán szeret tejet, hogy sok.
Tehát most már annyi tejet, hogy most egyikük csak fog menni savanyú
végül.
Tehát ez egy nagyon rossz kérdés.
Nem igaz?
>> Szóval, mi történt?
Tehát alapvetően ez a fajta Egy nevetséges példa.
De a motorháztető alatt, amit már volt történik, itt mind a ketten ellenőrzött
az állam néhány darab memória, a hűtőszekrény.
Mindketten ellenőrizte az állam néhány változó.
Mindketten felhívta a következtetésre hogy majd cselekedett.
De sajnos, miközben a szobatársa volt a boltban, az állam, hogy a
változó megváltozott, ő jött vissza és most meg akarja változtatni az állam, de
ez már megváltozott az őt.
És persze, ő nem lett volna elment a boltba, ha tudnák
hogy már úton van.
>> Így a valós világban, hogy tehetted elkerülni ezt a problémát, feltételezve, hogy van
hűtőszekrény, van egy szobatársa, és hogy tényleg szeretem a tejet?
>> Közönség: Kommunikáció.
>> DAVID MALAN: Kommunikáció.
OK.
De hogyan lehet, hogy kommunikál?
>> Közönség: Hagy egy megjegyzés.
>> DAVID MALAN: Hagyjuk a figyelmét, nem igaz?
Mindig hagy egy megjegyzés, a rajongók a show.
Rendben, mindig hagy egy megjegyzést, vagy fel igazán, mint a lakat, vagy valami
A hűtőszekrényben, hogy megtartja a szobatársa a ellenőrző állam
a változó.
>> Nos, miért lehet ez valaminek megfelelő probléma meg hét, vagy ATM-ek.
Nos, képzeljük el egy olyan világot, ahol az ATM lehet, hogy menjen fel egy ATM
gép itt, és egy másik ATM itt.
És ez elég gyakran megtörténik.
És tegyük fel, hogy két ATM-kártyák, ami lehetséges.
És belép két gép hatékonyan egyszerre, remélhetőleg
Bár senki sem néz.
És akkor írja be a PIN-kódot nagyjából egyszerre.
És akkor te az egyensúlyt lekérdezést , hogy mennyi készpénz van.
És tegyük fel, hogy van 100 $ maradt a fiókjában.
Tehát lényegében egyszerre, akkor mondjuk egy, nulla, nulla, írja.
És remélhetőleg vissza egy kis pénzt.
>> De, hogy mennyi pénzt lehet kapsz vissza?
Most számítógépek a végén a nap, különösen, ha ők beszél
kiszolgálók, nem feltétlenül a dolgok abban a sorrendben, ami várható.
>> Tegyük fel, hogy mi történik, mert az bármilyen hálózati sebesség problémák vannak
vagy, vagy CPU problémák vannak, vagy ilyesmi, tegyük fel, hogy a
első ATM ellenőrzi az egyensúlyt és lát, ó, ez a személy 100 dollárt.
De akkor lesz zavart, mert lehet, a biztonsági mentés történik, és így
lassul.
Vagy talán ellenőrzése közben, a hálózat kapcsolat egy kicsit lassabban, mert
ez csak úgy megtörténik.
Ők fizikai eszközök.
Tehát Eközben a második ATM kéri ugyanezt a kérdést.
Mennyi pénz nem David van? 100 $ a válasz.
De mivel az első ATM még nem az üzenetet küldte kivonás $ 100, mind a
ATM-ek már megvizsgálta a bank boltozat, látta ott 100 $ ott, és most
mindkét gép potenciálisan az majd kiköp a választ.
>> Nos, ez jó neked bizonyos értelemben ha az, amit a bank nem végül
A változás az összeg mínusz 100- beállítottam egyenlő a
bankszámla egyenlő 0, szemben csinál mínusz 100.
Most a legrosszabb esetben a bank -
vagy a legjobb a bank, időközben kapsz 200 $, és
bankszámlaszám megjeleníti negatív $ 100, ami igazán nem
javára van egyáltalán.
De a lényeg az, hogy ez a faj feltétele két szobatárs egyre
tej, vagy két ATM-ek próbálnak készpénzt és változtatni az állam a Vault
ugyanabban az időben létezik semmilyen alkalommal, amikor egy adatbázis.
>> Most meg hét probléma, ez a kérdés merül fel abban az értelemben, hogy ha veszel egy
részesedése a Facebook állomány, majd a Például veszel egy második része
Facebook állomány, meg kell, hogy a döntést, mint a programozó.
Annak eldöntésére, hogy hogyan kell frissíteni a adatbázis esély fogsz
Van egy sor ezen állomány, és ez a az egyik módja annak végrehajtására.
És fogsz egy részét FB, amely a tőzsdei rövidítést
Ennek felhasználónév vagy a felhasználó ID, az egyedi azonosító.
>> De ugyanaz a történet megtörténhet itt.
Ha a SELECT SQL, mint látni fogod A probléma meg hét, ha látod,
ó, David van egy részvény A Facebook állomány.
Hadd most változtatni, hogy ez két részvény, mert azt akarja, hogy vesz egy
második részét.
De tegyük fel, David tulajdonképpen két böngészőablakot nyitva, vagy tegyük fel, hogy
ez egy közös számlára két házastárs, és mindkettő szeretné végrehajtani
ugyanazt a műveletet, ott is, a fennáll a döntés, hogy
alapján készült korábbi állapota a világ -
a számla egy részvény -
és a két ember, vagy mindkettő szerver, most próbálja mondani, megnöveljük a két részvény.
De ebben az esetben, lehet, hogy feltöltött nekem pénzt mind a részvények, de
növekszik, hogy csak egyszer.
>> Tehát röviden, az alapvető probléma itt, mint a viccet hagyva
megjegyezni, vagy amivel egy lakat azt, Ha két ember, vagy két szál -
Szerintem vissza a semmiből -
tudja ellenőrizni az állam néhány változó és próbálja megváltoztatni a változót,
de ez a két dolog nem történik a időben, de lehet kapni megszakadt
más dolog történik, az adatok kap egy nagyon furcsa állapot.
És akkor előnyös, vagy szenved abban az értelemben, a pénz példa.
>> Így probléma meg hét, adunk ez egy sor kód, amely hosszú
történet rövid, megoldja ezt a probléma a MySQL.
Ez nagyon hosszú utasítás, amely nem még elférjenek egyetlen vonal a
képernyő itt biztosítja, hogy a működés az úgynevezett atom.
Mindez történik egyszerre, vagy ez nem így történik minden.
Ez a nagyon hosszú mondatok nem fognak megszakadni részben.
>> És mit csinál a szó szoros mit mond.
Helyezze a néhány tábla a következő három területen az adott értékek
de ismétlődő kulcs, nem csinál egy betét.
Csinálj egy update.
Tehát ez olyan, mint csinál egy SELECT és INSERT úgymond egyszerre.
És mi az a kulcs, amely valószínűleg előterjesztésétől itt?
>> Kiderül, és látni fogod ezt probléma meg Hetes spec, mert
már bejelenteni, hogy egy egyedi kulcs ezen a bizonyos asztalra, hogy
nem lehet több sorban ugyanazon felhasználó a
azonos penny állomány szimbólum -
ebben a példában, DVN.V van egy buta penny állomány, hogy mi
lásd a spec.
Mert már kijelentette, hogy egyedi, Ez azt jelenti, hogy ha
próbálja beilleszteni a kettős sorban, akkor inkább fogja frissíteni nélkül
másnak az alkalom, hogy változtatni az állam a világ sem.
Tehát röviden, ez biztosítja, dolgok atomi.
>> Általánosabban azonban, adatbázisok mint a MySQL -
és akkor nem kell ezt a funkciót a p-set hét, de tartsa szem előtt a
A jövőben -
támogatják az úgynevezett tranzakció, ahol lehet mondani
START tranzakció szó.
Ezután végre két SQL.
És egy SQL utasítást, mint látni fogod A p-set hét, úgy néz ki, egy kicsit
valami ilyesmi.
Frissítés egy asztal nevű számlára.
Egyensúlyának beállítása oszlop azonos bármilyen Az Egyenleg oszlopban jelenleg
mínusz 1,000, ahol ez a szám, számlaszám, mint például a felhasználói azonosító,
értéke 2, majd frissítse számla dot dot dot.
>> Így a laikus szempontból, mit jelentenek ezek a két lekérdezések úgy tűnik, hogy ennek a
valós értelemben vett banki?
>> Közönség: átvitele a megtakarításokat.
>> DAVID MALAN: Pontosan.
Pénzeszközök átcsoportosítását egyik figyelembe a másik.
És ez egy másik példa, ahol szeretné ezt a két dolgot történni
vagy nem történik meg.
Nem akarsz valamit, hogy a közepén, és potenciálisan összezavar
a matematika, vagy összezavar mennyi pénz van, vagy mennyi
pénzt a bank.
Szóval, ami igazán szép a tranzakció A MySQL az, és
adatbázisok általában az, hogy és okos emberek, akik már megvalósított
ezeket a funkciókat kitalálni, hogyan lehet meg arról, hogy mind a két dolog történik
vagy egyáltalán nem.
>> És ha igazán törekvő, hogy egy weboldal, amely által használt emberek
campus, az emberek a világban, ezzel valamit a startup értelemben
ezek a fajta tervezési döntések
lesz valaha is olyan fontos.
Ellenkező esetben, ha elkezdi elveszíteni adatokat, elveszti felhasználók számára, vagy a legrosszabb esetben
láttunk itt, esetleg pénzt veszít.
Tehát még egyszer, erről bővebben a probléma meg hét, valamint talán néhány
Ön a végső projektekben.
>> Szóval változtatni azt a képet kellett Egy pillanattal ezelőtt csak egy újabb módja.
Hadd valóban látni, ha tudok -
Nem, hogy elment.
Ott van.
>> Szóval, ez az, ahol hagytuk utoljára.
És kiderül, megyünk dobás még egy dolog, a mix itt -
a nyelv a JavaScript.
Így JavaScript valóban illik ebbe a darab -
és én nem egészen elegendő helyet, így ez most nem a skála.
OK, ez tényleg szánalmas.
OK, hogy a JavaScript.
Rendben van.
Én igazán tesz egy rossz.
Rendben van.
>> Tehát egy másik JavaScript programozási nyelv, és az utolsó, ha ez segít
megnyugtatni, hogy nem sokkal több A tűzcsap itt.
Tehát JavaScript szintén értelmezett nyelv, ami azt jelenti, hogy nem
fordítsd le a nullák és egyesek.
Csak futtatni.
De mi alapvetően különbözik a JavaScript általában az, hogy
ne futtatni a webszervert.
Nem kap fut a készülék önmagában.
Inkább lesz letölthető a felhasználó HTTP be a böngésző -
Chrome, Safari, Internet Explorer, Firefox, bármi -
és ez a böngésző, amely végrehajtja a adott programozási nyelv.
>> Tehát egyértelmű, PHP eddig volt végre akár a parancssorban
A fekete és a fehér ablak, a szerveren mint a készülék, egy számítógép
mint a készülék, vagy már által végrehajtott webszerver
fut a számítógépen.
De a téma az, hogy a PHP eddig végrehajtásra került szerver-oldali, így
a felhasználó és a felhasználó böngészője soha nem látja egy sor PHP kódot.
>> Sőt, ha valaha is nyit egy böngésző a honlapon, vagy egy másik, és
valóban látni PHP kódot az ablakot, valaki elcseszte.
Mert ez nem azt jelentette, hogy küldött a böngészőben.
Állítólag végre kell hajtani, és megfordult valami, mint a HTML.
>> De a JavaScript lényegében az ellenkezőjét.
Ez azt jelentette, hogy futtatni általában belül A felhasználó böngésző ablakot.
És milyen weboldalak használata JavaScript akkor ezekben a napokban?
>> Mint a szó szoros értelmében minden népszerű weboldal.
Minden honlap, hogy a srácok valószínűleg a naponta használja a JavaScript alkalmazást
legegyszerűbb és még a legszexisebb funkciók.
>> Tehát valami, mint a Facebook Chat ha már így.
Hogyan, hogy valóban működik?
Hát eddig, az összes cuccot voltunk kész HTML és PHP feltételezi, hogy a
húzza fel egy URL-t, és nyomja meg az Enter, és látod, néhány HTML tartalmat.
És rákattint a linkre, amely megváltoztatja a URL, megváltoztatja az oldalt, és újratölti
néhány új tartalmat.
Kattintson egy URL, vagy be egy űrlapot, akkor kap felvert egy másik oldalra, és
látni néhány új tartalmat.
>> De a valami, mint a Facebook Chat, vagy Gchat, vagy a Google Maps, ritkán
nem az egész oldalt frissíteni, hogy látsz egy fehér képernyő egy pillanatra és
majd az új tartalmat.
Inkább weboldalak ma dinamikusan egyre frissíteni újra
újra és újra minden fajta a színfalak mögött.
És kiderül, hogy ha nem megy a valami, mint a Facebook, vagy a Gchat,
vagy a Gmail, és az oldal frissítések automatikusan újratöltése nélkül
egész képernyőt, mi történt, hogy a böngésző tett egyfajta titokban
További HTTP kérések -
nem a teljes weboldalakat, de csak kis mennyiségű adatot, mint például a
azonnali üzenetet, hogy a barátja éppen küldött, vagy az állapot frissítés
valaki csak küldte, vagy a tweet hogy valaki csak küldött.
Ez csak azzal, hogy kis kérelmek adatokat, majd a JavaScript, ez
programozási nyelv, a változás milyen Az internetes oldal úgy néz ki, mint anélkül, hogy a
server segít, anélkül, hogy a szerver generál, hogy a HTML.
>> Tehát röviden, JavaScript is kell használni, akkor nem csak letölteni az új adatokat
a szerver újratöltése nélkül az egész oldalon vagy benyújtása formában.
Azt is fel lehet használni, hogy a változás az úgynevezett DOM -
Document Object Model -
ami csak a képzelet utat mondván, a fa a HTML
hogy láttuk utoljára.
>> Tehát, hogy megnyugtassa, JavaScript szintaktikailag annyira hasonlít a C is.
Nincs fő funkciója.
Csak írjuk be a kódot és ez lesz végre, vagy
értelmezhető megfelelően.
Feltételek fog kinézni.
Nem más, mint a C vagy a PHP, ami azt illeti.
Logikai kifejezések or-ed együtt fog kinézni.
Kapcsolatba kerülnek együtt nézni, mint ez.
>> Kapcsolók fog kinézni.
A hurkok fog kinézni.
Bár a hurkok fog kinézni.
Ne while fog kinézni.
>> Ez az új.
Tehát JavaScript még nem a foreach konstrukció önmagában, de ez a konstrukció
az i változó a tömb, és én ebben a esetben válik index értéke.
Tehát ez egy kicsit más, mint foreach, bár újabb verziói
JavaScript jönnek ki minden alkalommal, így még e nyelvi funkciók
fejlődnek.
>> És mint félre, JavaScript ezekben a napokban is fel lehet használni a szerveren, mint
PHP egy olyan kerettel nevű Node.js.
Az egyik CS50 a TF, Kevin, vezetett a szeminárium Node.js ami elérhető
cs50.net/seminars.
Tehát, ha kíváncsi vagy, tudod, hogy Használhatja ezt a szerver oldalon
is, de ez egy viszonylag új keletű trend, de erőteljes egyet, hogy a.
>> Ez egy kicsit más.
Ez egy tömb a JavaScript.
És mi a sztrájk, mint a különböző szemben a C vagy PHP?
Van néhány gyors történet meg tudjuk mondani itt.
Mi hiányzik szemben PHP?
>> Közönség: [hallható].
>> DAVID MALAN: Igen?
Sajnálom, ismételje meg?
>> Közönség: Nem kijelentve a változó típusa.
>> DAVID MALAN: Mi nem nyilvánítja a változó típusa.
Tehát tulajdonképpen nagyon, mint a PHP, nem vagyunk meghatározzák a fajta ezt a változót.
Inkább mi több, általánosságban mondván var változó.
Nincs PHP kellemetlen a dollár jelet, ami ugyan unalmas
típusú, nem teszi világossá, hogy valami változó.
Míg itt vagyunk, valami vissza C megközelítése mellett csak hívja a
változó a neve akarunk hogy ez, mint a számok.
És azt is, mint a PHP, mi szögletes zárójelben a
értékek benne, hogy a tömb.
>> Így változók JavaScript is így néz ki.
Vegyük észre, itt egy string nevű s, de hasonlóképpen tettünk nincs megadva
hogy ez a szöveg.
Itt azonban az a jellemzője, hogy nem léteznek pontosan ugyanúgy a PHP,
de egy kicsit hasonló.
Ez egy objektum JavaScript.
És tárgyak fajta a svájci hadsereg Kés egy adat struktúra, amit
használja őket tetszőleges számú dolog.
>> Itt például, mi kijelentve változó nevű árajánlatot.
Az a fajta, amely változó egy objektum.
Azt hiszem, hogy ez egy C struct amely a kulcsokat és értékeket.
Symbol kulcsfontosságú.
FB egy olyan érték, látszólag állomány szimbólum.
Vessző.
Az ár egy gombot, és értéke látszólag egy lebegőpontos, vagy a
szám általában a JavaScript, a 49,26 $.
>> Tehát a PHP nem rendelkezik -
még nem láttam a PHP objektum elég mint ez, de nem látni egy analóg,
ami volt?
>> Közönség: [hallható].
>> DAVID MALAN: asszociatív tömbök.
Tehát míg a PHP asszociatív tömbök melynek szintaxisa mindig kicsit olyan
más -
láttuk, a szögletes zárójelek.
Láttuk a furcsa nyilak szimbólumok.
JavaScript tárgyak, de ez többnyire szemantikai különbséget, és a
különböző szinonimája most.
Azonban, mint egy félre, PHP is tárgyak oly módon, hogy a Java és egyéb
nyelvben tárgyak objektum-orientált programozás.
De majd használni ezeket csak az adattípusok most.
Objektumok és asszociatív tömbök.
>> Ez lehet, hogy ez egy kicsit világos.
Itt van, hogy miért egy tárgy hasznos.
Ha azt szeretné, hogy állapítsa meg a diák, mint Zamyla, mi is valójában
felölelik úgyszólván benne, hogy a objektumot zárójelek mint
mielőtt egy egész kulcscsomót és értékek itt.
Van egy azonosítót, egy házat, és egy nevet Zamyla, majd egy pontosvessző, mint
szokásos a végén.
>> Itt lent is, ez kissé különböző, de nagyon erős
ezekben a napokban.
Itt van egy sor, és tudom, hogy azért, mert van egy szögletes zárójel fel
felső és egy szögletes zárójel az alján.
És ez egy sor, amit az adatok írja látszólag JavaScript?
Ez egy tömb úgy néz ki, mint a három tárgyat.
És tudom, hogy egy tárgy csak mert a kapcsos zárójelek.
És észre, ott nyitott zárójel, néhány dolgot, közel zárójel, vessző,
majd egy kicsit, vessző, majd egy kicsit.
Szóval ez a három érv elválasztott két vessző.
>> Tehát ez egy sor három tárgyat.
És minden egyes ilyen tárgyak úgy tűnik, hogy egy diák vagy a személyzet tagja valamilyen
sort, mindegyik egy azonosítót, ház, és a nevét.
De Hívtam ezt a valamit úgynevezett JSON -
JavaScript Object Notation.
És ez egy olyan adatformátum, amely ténylegesen olyan nagyon népszerű, és
divatos manapság, hogy ha írsz egy alkalmazás, amely a Facebook
API, a Twitter API, tényleg majdnem bármely API ott ezekben a napokban,
CS50 köztük saját, a adatok vissza nem
old school CSV formátumban.
>> Mivel emlékeztetnek arra, hogy CSV szuper egyszerű.
Ez csak oszlopok egymástól vesszővel.
JSON adatokat ad további metaadatokat.
Ez hozzárendel egy kulcs minden értéket, nem kell, hogy csak feltételezni, hogy
A nulladik oszlop egy értéket, oszlop Egy másik, oszlop két másik.
Mindent egy JSON objektum itt van valami Az ön-leíró, mert minden
az egyik neve ebben a fájlban van szó neve előtt, hogy ez egy
idézett szöveg.
>> Szóval vessünk egy pillantást pár jó példa.
Hadd menjek be a készüléket.
És hadd menjen be a vhost könyvtár a nyilvánosság.
És hadd menjen be a JavaScript könyvtár.
És menjünk előre, és nyissa fel dom-0.html, ahol a DOM csak azt jelenti,
Document Object Model.
Ez a fa anyag, amely Utaltam korábban.
>> És hadd az alábbiakat javasoljuk.
Itt egy weboldal, melynek test nagyon egyszerű.
Tehát itt az alján, észre, van egy űrlap.
Már láttam ezeket korábban.
Két bemenettel, melyek közül az egyik van egy ID neve, amelyek közül az egyik egy olyan típusú
be, és az első ember típusa szöveget.
Szóval ez tényleg úgy hangzik, nagyon egyszerű.
>> Menjünk itt.
Térjünk vissza erre az oldalra itt.
Menjünk be localhost, és bemegy JavaScript könyvtár, és menj
dom-0, és itt van ebben a formában.
Szóval ez látszólag Minden ezen az oldalon nem.
Ez egy név mező a Küldés gombot.
De én nem fogom használni a PHP itt.
Fogok tenni mindent kliens oldalon hogy úgy mondjam a JavaScript alábbiak szerint.
>> Figyeljük meg, hogy én valóban kapta a nevét területén a bemenet egy egyedi
azonosító, amely ténylegesen mentsen meg egy bizonyos időt egy pillanatra.
És észre, amit be egy másik tag a fejét a weboldalamon, a
tag.
>> Tehát ebben az értelemben, hogy a JavaScript a kliens-oldali programozási nyelv.
Ebben az esetben, mint a CSS, tettem egyenesen belsejében a HTML.
De észre én nyilvánította a funkciót úgy néz ki, egy kicsit, mint a PHP
szintaktikailag, de ez valójában JavaScript, mert megint, ez
kliens oldali a böngészőben.
És akkor gondolom, hogy ez mit fog igen, még akkor is, ha néhány, a szintaxis
itt az új.
>> Közönség: Köszönj bárki.
>> DAVID MALAN: Meg fog köszönni annak, aki meglátogatja ezt az oldalt.
Igen, hogyan?
>> Tehát észre, kiderül a JavaScript van egy alert () függvényt.
Ez egy nagyon egyfajta szomorú funkció tényleg csak inkább bosszantani felhasználók számára.
Ez nem az egyik akkor tényleg használni általában, de ez egy gyors és piszkos
módon egyfajta nyomtatás valamit a grafikus felhasználói
felület, mint egy böngésző.
Figyeljük meg, hogy itt van egy karakterláncot aposztrófot.
Kiderül, hogy ellentétben a C, JavaScript lehet ténylegesen használni egy
idézi, és őszintén szólva ez csak egyfajta A stilisztikai egyezmény között
JavaScript programozó egyszerű idézőjeleket.
PHP, valójában valamivel mást jelent.
De most, csak tudom, hogy ez az egyetlen oka.
Az egyezmény a JavaScript gyakran a egyszerű idézőjeleket, de használjuk
idézőjelek mindkét helyen is.
>> Szóval ez érdekes.
Emlékezzünk vissza, utoljára, hogy mi volt, hogy kép a képernyőn, hogy felhívta a fa
ahol már a HTML csomópont, és a fej csomópont, és a test csomópont,
majd néhány szöveget.
De volt egy speciális csomópont a legtetején, hogy felhívtam a dokumentumot.
Nos, kiderült a JavaScript, minden alkalommal, amikor írni egy programot JavaScript
a böngészőben, van hozzáférése egy speciális globális változó.
Hasonló szellemben a PHP szuperglobális, ezt hívják
csupa kisbetűvel dokumentumot.
>> Olyan, mint egy struct, de ez a struktúra feladatokat is ellát belsejébe.
Tehát egy C struct csak meg az adatok általában.
De egy JavaScript objektumot, mert ez Technikailag a feladatokat is ellát,
más néven módszerekkel, belsejébe.
És akkor hívja a függvényt belsejében ezt az objektumot a szó szoros értelmében végzi a
név, pont, majd a nevét a funkciót, vagy újra módszer.
Ez csak egy szinonimája, de tényleg.
>> És mit jelent ez a funkció nem?
Ön milyen kitalálni a neve.
Get elemet azonosító.
Tehát ez fog keresni a weblapon, keresni azt a fát, keres
bármilyen csomópont, AKA elem, egy egyedi azonosítója idézet idézet vége nevét.
És akkor mit fogok csinálni?
Megyek, hogy az értéke belsejében a csomópont a fában, és meg fogom
valahogy köszönni ezt a nevet.
>> Tehát hogy a találgatás, bár most már nem látott még, mit a plusz
jelek itt és itt talán?
>> Közönség: Concatenate.
>> DAVID MALAN: Concatenate.
Igen, és ezek csak fajta tervezési döntések
nép évvel ezelőtt.
A PHP-ban összefűzi dolgok pöttyökkel.
A C, akkor ugrik a több karika és A funkciók, mint a strcopy () vagy
strcat (), vagy más hasonló funkciókat.
De JavaScript, használja pluses.
Tehát ez csak összefűző három húrok -
hello, egy nevet, majd egy felkiáltójel.
>> Szóval, mikor és miért van ez a funkció neve is?
Nos, akkor gondolom a HTML az alján.
Miért köszönt () nevű vagy mikor?
>> Úgy látszik, amennyire én tudom, a be, amikor az űrlapot elküldték,
Azt fogom tenni, amit a belül ilyen idézetek.
És különösen, fogom hívni köszönt (), majd vissza hamis.
>> Nos, lássuk, mi a net hatás itt először.
Hadd megy előre, és írja be , mondjuk, Loren, elküldése.
Helló Loren.
Lássuk, lehet, hogy ez csak szerencsés végrehajtását.
Nem.
Szóval ez írja ki, amit név, amit ténylegesen oda.
>> De vegyük észre, mi nem változik.
Az URL-cím mindig dom-0.html.
Nincs register.php.
Nincs másik fájlt.
Nincs művelet attribútum.
Szóval mi ez a return false feltehetően csinálsz?
Miért hívom üdvözlöm (), majd vissza hamis talán?
Amit általában történik, ha rákattint Küldje el olyan formában, hogy még van
látott az elmúlt héten?
>> Közönség: [hangtalan].
>> DAVID MALAN: Magától valahol, nem igaz?
Magától néhány cél URL.
De nem akarom, hogy ez megtörténjen itt.
Azt akarom, hogy a weboldal, hogy teljesen dinamikus, mint a Gmail, ahol ha egyszer már
ott, maradj ott.
Az URL nem változik oly módon, hogy jelzi, hogy a teljes oldal újratöltése.
Inkább csak azt, hogy valamit változtatni mint a nyomtatás valamit
itt a képernyőn.
>> Hát hadd tisztítsa a egy kicsit.
Hadd nyissam fel nem dom-0, de hadd nyit dom-2.
Csak így már láttam néhány szintaxis itt.
>> Kiderül, hogy amit most nem használ nyers JavaScript.
Tehát ez valóban a nyelv JavaScript.
Néhányan talán tudják a könyvtár nevű jQuery.
>> Tehát jQuery nem ugyanaz dolog, mint a JavaScript.
Ez csak egy könyvtár, egy nagyon okos férfi írta, és népszerűsítette az ilyen
, hogy szinte mindenki a világ most használ, jQuery használatakor JavaScript.
És első pillantásra, őszintén szólva, ez úgy néz ki, egy kicsit rejtélyes.
De rájössz, különösen akkor, ha megy ott a végső projekt web
fejlesztés, akkor rájössz, hogy ez tisztítja a dolgokat, és takarít meg elég
néhány sornyi kódot.
>> Úgyhogy csak pillantást, hogy milyen ebben a formában működik.
Figyeljük meg, mi nem tudom eltávolítani látszólag az én HTML-t?
Nincs a submit handler hogy úgy mondjam.
Nincs attribútum.
Mert tudod, milyen Én nem nagyon szeretem?
Úgy éreztem, hogy hullottak a régi szokások is.
Csakúgy, mint azt kezdte érezni hanyag összekeveredni a CSS-t és
HTML, mert te olyan dobás különböző nyelven jelent meg a
helyen, hasonlóan volt ez kezd érezni mint egy rossz út, hogy menjen le, ahol
Teszlek JavaScript kódot belül az én HTML helyett faktoring ki.
>> Szóval ez a tanulság.
A dom-2.html vagyok faktoring ki.
És én a dolgokat kissé másképp.
Most, megyek hullám kezem , hogy mi ez a valóban
a motorháztető alatt.
De csak most fel, hogy az első sort ebben a könyvtárban
úgynevezett jQuery éppen azt jelenti, ha a dokumentum elkészült, tegye a következőket.
>> Mivel a weboldalak is eltarthat egy ideig betölteni.
Lehet, hogy a lassú internet kapcsolat, és lehet, hogy forog
és fonás, és végül van töltve.
Ez a vonal a kód csak azt mondja várni az egész oldal készen áll, a dokumentum
kész, végrehajtása előtt ezt a kódot.
>> És most észre, ez valószínűleg a leghasznosabb első
elvenni jQuery.
Ez a vonal itt nagyon hasonló szellemben hogy ez sokkal hosszabb sort itt.
Mivel nyers JavaScript kódot, ott létezik egy dokumentum teljes objektum
egy függvényt nevű getElementById () az emberek, aki azt írta,
jQuery egyszerűsített hogy csak mondani, dollár jelet, majd a belső
zárójelben fel két idézet, majd hogy egy hash szimbólumot, majd a
egyedi azonosítója, aki megragad.
Tehát ez egyenértékű document.getElementById.
>> Közben. Submit csak azt jelenti, a benyújtása bármilyen formában te
utalva a bal oldalon, menj előre, és végre ezt.
De ez most már a kíváncsiság is.
Mi a furcsa, hogy mi Már kiemelt itt?
Nem csak ez a fajta szintaktikai új, van még valami hiányzik.
>> Közönség: Ez csak hívott függvény?
Ez nem hívják figyelmeztetés?
>> DAVID MALAN: Igen.
Nos, alert () nem működik itt, hogy tisztességes.
De nincs említés a név, mint tudod, foo vagy
valamit itt.
És valóban, ez az egyik jellemzője A JavaScript ez elég
erős, de teljesen új.
És a PHP valójában ezt is.
>> Hadd menjek előre, és nem valami gyorsan.
Hadd menjek előre, és hogy ezt itt.
Hadd csináljam én.
Funkció.
Nevezzük ezt handler ().
A függvény úgy mondjam.
Valami, ami kezeli, működését.
Hadd mossam le a behúzás.
És hogy ezt itt.
És tedd, hogy itt van.
Aha.
OK.
>> Tehát most van egy függvényt nevű handler (), hogy én nem igazán tudom
mit csinál még.
Csak még a cucc.
Hoppá.
Tuk túl sok.
Csináljuk ezt.
Rendben van.
Bocsánat.
Rendben van.
Hadd tegyem ezt.
OK.
Úgy néz ki, szép és egyenes elő most.
Hadd tegyem ezt.
Tedd ezt.
És az OK gombra.
Tehát most, tegyük ezt itt.
Nincs több programozási menet közben.
OK.
>> Tehát most, menjünk vissza a , ahol a történet elkezdődött.
Korábban azt mondtam, hogy ez a sor itt azt jelenti, ha a dokumentum elkészült, menjen
előre, és erre a célra.
Mit akarok?
Hát konkrétan akarok menni előre, és tegye a következőket.
Végre ezt a kódsort, majd mit akarok, hogy nem is hívja ezt a
működik, ha az űrlap elküldése.
>> Most ez az, ami érdekes.
Ez nem maga a funkciót.
Figyeljük meg, én nem hozta zárójel Itt a szokásos módon.
Én szó szerint halad egy függvény neve handler () másik funkció
nevezett be () az argumentumot bár ez olyan, mint egy változó.
És ez az egyik jellemzője a JavaScript, a függvények önmagukban
tényleg csak tárgyak.
Sőt, ők tényleg csak változók valamilyen.
És ha a neve a függvény handler (), nincs ok, amiért nem
adja át az argumentumként itt.
És ez azt jelenti, ha az űrlap Az ID a demo
nyújtott be, ezt a funkciót.
>> De most, ha kibont mindezt, akkor miért azt talán nem
ez egy perce?
Nos, ez egy névtelen függvény.
Mert őszintén, rájöttem, miért vagyok a fáradságot, hogy vesztegeti az idejét nyilvánító
nevű függvényt handler () csak a hívás ez az egyik, és csak egy helyen?
Ha nem kell a nevét, és én nem kell hívni, hogy több helyen,
nézzük csak végrehajtja a funkciót ott, ahol szükségem van rá.
És így JavaScript és a PHP támogatást milyen az úgynevezett anonim funkciók
engedje meg, hogy pontosan erre van.
>> De mi csak vakarja a felületet.
Nézzük kötekedik csak egy pár végső példák itt.
>> Ha bemegy quote.php.
Vegyük észre, hogy ez valójában egy PHP funkció, a PHP program, hogy én írtam
, hogy arra számít, HTTP nevű paramétert szimbólum, és én is át a
érték, mint a FB.
És ha tényleg nézd meg a forrást kód, ez lekérdezése egy ingyenes weboldalon
nevű Yahoo Finance, mint p-set hét, és ez vissza nekem
valami látszólag a formátum ismert, JSON -
JavaScript Object Notation.
Ez csak egy tárgy.
Figyeljük meg a kapcsos zárójelek, idézőjelek, a vastagbél, és a vessző.
>> Most közben, ez elég jó.
Mert valószínűleg használni egy programozási nyelv generálására URL
hogy néz ki dinamikusan, ugye?
Tudok változtatni ezt a Google és kap vissza a Google
részvényárfolyam a $ 1,017.55.
Tehát lássuk, ha nem tudjuk használni ezt most.
>> Hadd menjen ajax-0 itt, ami úgy néz ki, mint a következő.
Ez csak egy honlap, amely egy űrlapot egy gombot.
Hadd itt megy előre, és írja be a YHOO a Yahoo részvényei szimbólum, kattintson a Get
Idézet, és most észre kaptam figyelmeztetést a 32,86.
>> Hadd valóban megy egy szakértő változata ezen az oldalon, verzió kettő,
írja be mondjuk a Microsoft, MSFT.
Get Idézet.
És most veszi észre, nem állnak.
Figyeld meg, amikor azt mondja ár meg kell határozni?
Ott van a legegyszerűbb példa, hogy utal, amit Gchat, és a Facebook
Chat, és a Gmail és más hasonló weboldalak csinálnak a valóban
változik a weboldalt.
>> Figyeljük meg ezt.
Hadd töltse újra a lapot.
Hadd nyissa meg a Chrome felügyelő.
Hadd menjek, hogy az elemek fület itt.
Most már észre, ha nagyítani ide, és nyissa ki, észre, hogy ez az én
HTML DOM - a Document Object Model.
Ez az én HTML.
De most észre, annak ellenére, hogy a helyzet hogy egy kicsit nehéz, hogy azt a két
helyen egyszerre, ha azt írja az FB itt, nézd meg az alján
csak a képernyő.
>> Ez ténylegesen változik a HTML menet közben.
És ez ezt egyszerűen csinál valamit, mint ez.
Ha nyit ajax-2, értesítés végrehajtási valami olyan szexi, mint
, hogy annak ellenére, hogy elég csúnya, de olyan bonyolult, mint, hogy
funkcionálisan, van néhány HTML az alján.
De észre én is tag.
Már nem használt ilyet, de ez mint egy, de ez nem kényszeríti
Mindent rá egy új sort.
Ez csak azért egy téglalap alakú terület ugyanabban a sorban lényegében.
>> Figyeljük meg, hogy én adtam azonosító az ár.
És kiderül, ugyanazzal a JavaScript könyvtár, van egy funkcióval
úgynevezett quote (), hogy hívják, amikor Az űrlap elküldése.
És mit csinálok ez.
Én nyilvánító változó JavaScript úgynevezett url, megtakarítás az érték
quote.php? szimbólum =.
Más szóval, én magam is kezdem hogy készítsen egy HTTP kérést, majd a
Én összefűző rá, hogy a plusz bármilyen elem az azonosító
A szimbólum, amely észre, hogy text field itt lent.
Tehát ugyanúgy, mint volt formában a múltban.
>> És akkor kiderül a jQuery, ha hívni. val (), hogy hívja a val
függvény egy értéket a funkció, hogy lesz amit a felhasználó gépelt be
És akkor az összes hálózati forgalom hogy történik ez.
$. GetJSON.
>> És mint félre, dollár jel csak egy rövidített írásmódot.
Ez tényleg jQuery.getJSON.
Vigyél a JSON erről a címről, és mikor A kérés érkezik vissza, hívja ezt a
funkciót, és adja át az érvelés bármi jött vissza a szerver.
>> Más szóval, ha visszamegyek a a böngésző, és megyek vissza quote.php,
amit a böngésző tesz, hogy ez a darab az adatok.
És amikor elmegyek erre a weboldalra itt, észre, ha inkább megy a hálózat
fülre, és törölje azt, majd írja be valami hasonló GOOG a Google és a Get
Idézet észre a lap nem változott.
De egy HTTP kérelmet, és mi jött vissza ide, ha megnézzük a
válasz egy csomó JSON hogy elérhető végre a
ezt az egyszerű vonal itt.
>> Az adatok, mi ütött a szerverről.
Az ár a neve kulcs érdekel.
Tehát data.price ad nekem.
>> Most időközben, és ez a az utolsó példa.
Meg tudod csinálni még többet az oldalon.
Egy valóban jól kettő.
Mi hozhat vissza tag, ha emlékezni erre.
Ez a JavaScript.
Meg tudjuk csinálni.
Nagyon izgalmas.
Majd hagyjuk, hogy a Cliffhanger.
>> De még izgalmasan, akkor a dolgok, mint ez.
Ha elmegyek a térinformatikai-1, kiderül, hogy a Chrome tudja, hogy mi vagyunk
szélességi hosszúsági 42,37. -71,10.
Tehát van még több is az Ön rendelkezésére.
De erről bővebben a jövő héten.
Hétfőn találkozunk.