DAVID Malan: Bone. Ĉi tio estas CS50, kaj ĉi tiu estas la finon de semajno naŭ. Jam pasis ventego super La lastaj tagoj. Kaj problemo starigis sep, se vi estas genuo profunde en ĝin, rimarkas ke estas tute iom novaj tio estas en tie. Sed ni vidu, se ni ne povas Piece ĉio kune cxi tie mallonge antaŭ ol tiam zorge evitante off en ankoraŭ alian direkton kaj vidantaj kie ajn ni povas iri. Do ĝis nun, ni jam parolis pri HTML. Ni parolis pri CSS. Ni parolis pri PHP. Vi jam komencis sperti SQL. Hodiaŭ, ni parolos iom pri JavaScript. Sed kiel fari ĉiujn tiujn dispar lingvoj persvadis kune? Do ni parolis pasintsemajne pri la nocio de havi servilon. Do ni simple desegni ĉi rektangulo kiel retservilo ĉi tie. Kaj reta servilo utilas certe dosierojn. Kaj iuj el tiuj dosieroj povas esti HTML dosierojn. Do unu el la aferoj kiuj ttt-servilo povas kraĉi ekstere povus esti arkivo kiu ni nur tiros kiel tiu enhavanta kelkajn HTML. Do en laiko terminoj, kion tio HTML lasu vin fari? Spektantaro: Paĝo rigardo afabla. DAVID Malan: OK, fari paĝo aspektas bela, kvankam mi kredas ke mi jam pruvita ke alie. Do HTML ne lasu vin kuŝis ekstere paĝoj strukture, kaj permesas vin ia estetike marki supren paĝo, marki supren statika enhavo, tiel ke vi povas tiam vidi ĝin per retumilo. Sed tio estas la ŝlosilo. Ĝi estas statika enhavo. Vi skribas, vi konservos vian redakton, kaj tiam vi ŝipo. Kaj la TTT-servilo tiam utilas ĝin al viaj vizitantoj. Sed ni stylize aferojn uzante malsamajn lingvo entute. Ni komencis uzi stilo atributo sur certa etikedojn. Kaj la stilo atributo ni starigis aĵoj kiel tiparo grandeco kaj koloro. Kaj vi probable komencis malkovri, aŭ vi baldaŭ volon por fina projektoj potenciale, ankoraŭ alia propraĵoj ke vi povas uzi en CSS. Kaj tiel en laiko terminoj, kion vere tiam ĝi CSS fari? Tiuj estas nur ekzemploj de gxi. Kion tio lasu vin fari tion HTML Ne ŝajnas el kio ni vidis tiel multe? Spektantaro: Difini stilojn per vi mem. DAVID Malan: Difini stiloj per vi mem. Do difini tion kiel klasoj kiel vi eble renkontis aux unike identigi nodoj en dokumento tiel ke vi povas stylize ilin. Sed pli specife, mi dirus, ke css vere permesas preni aferoj la lasta mejlo kaj ebligas al vi difini multe pli precize la estetiko, dum HTML plejparte lasas vi strukturigi vian paĝoj. Kaj kvankam estas kelkaj defaŭltaĵoj, kiel ni vidis la etikedo por kapan etikedon, kiun malglate parolanta faris aĵojn grandaj kaj grasaj. Tio estas bela ĝenerala difino de la etikedo - grandaj kaj grasaj. Kio tiparo estas tiu? Kio koloro estas tio? Kiom aŭdaca estas tiu? Kaj CSS permesas pli fajne melodio aferojn tiel. Tiel kiel aranĝo, kiel iuj el vi jam vidis. Kaj sincere, CSS estas iom de senorda lingvo. Ĝi estas tre potenca en kiu vi povas fari laŭvorte ĉiu retpaĝaro ke vi havas vidi en la ttt hodiaŭ kun ĝi, sed ĝi estas speco de doloro en la kolo. Kaj iuj el vi batis vian kapon kontraŭ la muroj jam simple fari io stulta kiel centro menuo problemo starigis sep, se vi jam alvenis al tiu punkto jam. Sed realigi, tion akiri pli facile kun la tempo. Vi komencas rimarki ŝablonoj. Kaj cetere, Google estos via amiko por la diversaj manieroj, en kiuj vi povas solvi tiajn problemojn. Kaj mi kuraĝas diri per CSS, kaj HTML pli Ĝenerale, oni povas solvi problemojn en multaj pli vojoj, ĉiuj el kiuj eble tre bone esti ĝentila, ol vi povis en iu kiel C, eĉ nun PHP, aŭ Javascript. Ekzistas nur multajn malsamajn manieroj por arangxi aferojn. Sed ĉi komencis akiri senorda, ni diris. Nur speco de commingling via HTML kaj vian CSS kun la stilo atributo estis iom fuŝa. Kaj tial ni anstataŭ diris, ia abstrakte parolante, ke vi devus almenaŭ komencas faktoro vian CSS verŝajne. Ne estas via stilo atributoj, sed almenaŭ uzi la stilon etikedo ene kio parton de la retpaĝo? Spektantaro: Kapo. DAVID Malan: En la kapo. Ĝis nun, ni nur havis la titolon supren tie, sed vi ankaŭ povas aldoni stilo Tag, kaj vi povas meti vian CSS krude parolante al la supro de la paĝo. Sed tiam ni prenis tion unu paŝon plu kaj ni faktorita ke el pli en aparta dosiero. Kaj do tiuj du dosieroj estis iel jam ligita. Kaj efektive tio estis la etikedo kiu faris tion. Kaj kio estis unu el la komunajn motivadoj por faktoranta el niaj CSS ĉiuj pli? Spektantaro: reutilización. DAVID Malan: reutilización. Ĝuste? Vi eble vidis en p-starigis sep jam ke amaso de la paĝoj, la aĉetado paĝo, la vendado paĝo, la biletujo paĝo, verŝajne strukturitaj iom simile. Tie estas CS50 financoj logo ĉe la supron krom se vi jam decidis ŝanĝi ĝin. Tie estas piedlinio ĉe la malsupro de paĝoj. Kaj CSS permesas tiam al faktorigi ĝin ĝin en aparta dosiero por ke, se vi volas ŝanĝi ion tutmonde tra via tuta retejo, vi povas vere nur ŝanĝi ĝin en unu loko. Sed estas prezon vi pagos potenciale por esti faktorita el la CSS de mia HTML-dosieron en apartan dosiero referenco kun la tag, kiun ni vidis hieraŭ lundon. Kio povus la malavantaĝo esti de tiu? Pensante reen antaŭ semajno al kiam ni estas parolante pri HTTP kaj TCP / IP kaj kiom la interreto funkcias. Io super ĉi tie? Spektantaro: Necesas pli da tempo. DAVID Malan: Necesas pli da tempo. Kial? Spektantaro: [inaudibles]. DAVID Malan: Jes. Do ĝi disputeble prenas iom pli da tempo. Ĉar unu, la CSS estas evidente ne en la sama dosiero. Do nun vi devos fari ne unu, sed du petoj. Kaj ĉiu el tiuj petoj, kiel ni vidis en Chrome en la tn Inspektoro, kaj ni rigardis la reto langeto, ĉiu de tiuj dosieroj postulas unu HTTP peto, kiun ni vidis prenas iu kvanto de tempo. Nun, eble ĝi ne estas multe. Eble estas nur 20 milisekundoj. Eble estas 200 milisekundoj. Sed pensu pri paĝon kiel Facebook, aŭ CNN, nek Google, kiu estas multe pli granda ol la ekzemploj ni rigardis tiom. Tiuj paĝoj havu dekoj da dosieroj, el kiuj ĉiu povus postuli malŝarĝo de dosiero. Do tio povas potenciale komenci malrapidigi. Kaj speciale tiuj tagoj kiam ni ĉiuj havi poŝtelefonoj en niaj poŝoj kaj malrapida interreto rilatoj, devi atendi kelkajn pliajn milisekundoj, kelkaj pli milisekundoj por pliaj dosieroj povas reale esti malrapida. Latenta estas la vorto, kiu priskribas la speco de atendu, ke vi havas, ke vi sperti kiam atendante iu peco de informo. Sed tie estas inversita. Do ĝi ne estas por ĉia a - gxi vere estas iom de Seesaw tie. Malavantaĝo nun, sed kion retumiloj povas fari se ili estas inteligentaj por eviti devi peti la saman styles.css dosiero denove povas esti por fari kion? Cache ĝi. Do caching - C-A-C-H-E - ĝenerale signifas cxi tie nur por savi la dosiero kiun vi petis la unuan fojon, kaj tiam kontrolu viajn kaŝmemoron por ĝi. Kontrolu vi estas speco de stokado ujo, kaj se vi jam havas Kopio de styles.css, eĉ se iuj aliaj paĝo en la p-aro, aŭ iu ajn paĝo, petas ŝin denove, simple donu la uzanto tiu sama kaŝmemoro kopion. Ne ĝenu petante ĝin. Malavantaĝo tie, kvankam, kiel kelkaj el vi ili stumblis en la p-aro. Se vi faras ŝanĝo sur la servilo kaj vi iri reen al la retumilo kaj vi freŝigi, kelkfoje la retumilo faras vi favoron kaj ne ĝeni re-elŝutante via styles.css dosieron ĉar, iras, kio estas prognozo ke tiujn stilojn ke Facebook uzas tuj ŝanĝos horo al horo aŭ tagon post tago? Ĝi estas sufiĉe malaltaj. Ili povus ŝanĝi la tempo, sed ne per la minuto aŭ per la horon. Do lertaĵo, simple FYI farinte retejo evoluo, oni ofte premadu majuskliga klavo por petskribo kaj poste klaku freŝigi en via retumilo, kaj tiu volo tipe diri al la retumilo Reŝarĝi ĉiu, eĉ se vi jam havas ĝin en la kaŝmemoro. Do denove, upsides kaj downsides, sed ĉiuj el ili finfine desegni decidoj. Do nun, ni ne nur ĉesigi la rakonton tie. Se mi nun iri reen kaj reen kaj reen kaj reen, ni komencis prezenti ne nur HTML, sed PHP. Do en laiko terminoj, kion tio PHP ni faru? Spektantaro: [inaudibles]. DAVID Malan: Kio estas tio? Spektantaro: Enkonduki logikon en la kodo. DAVID Malan: Jes, enkonduki logikon en via kodo. Do ĝi estas vera programlingvo kun masxojn, variabloj, kaj funkcioj, kaj kondiĉoj, kaj ĉiuj tion ni jam estis uzanta vojon reen kiam ekde nulo. Kaj PHP, ni jam vidis, povas esti uzata ĉu ĉe la komandlinio - ĝi ne devas havi ion fari kun la retejo, eĉ se tio estas vere liaj originoj kaj kio emas esti bona kaj afabla al - sed vi povas uzi PHP-nure per naturo de la fakto ke ĝi havas print () funkcio, kaj printf () funkcion, aŭ eĥo () funkcion. Tie estas aroj da manieroj vi povas printi tekston kun PHP. Sekve, vi povas uzi tiun programadon lingvon por eligo ekzakte pri kio ni parolas pri antaŭe. Vi povas dinamike generi via HTML. Eble ne ĉiuj de ĝi. Eble vi malfacile kodo aferoj, kiel la kaplinio, kaj la piedlinio, kaj la logo, kaj via stilo littukoj, kaj ĉiujn kiuj. Sed por iu kiel p-starigis sep, kie vi manipulanta stokoj kaj montrante la uzanto biletujo, kiu estas tuj dinamike ŝanĝas, vi povus certe uzos PHP kaj la logiko donas vin kiel programlingvo al eligo dinamike subaroj de la paĝo. Do kiam oni parolas pri dinamika retejoj, aŭ TTT-programado, kiu estas kion vi vere parolas. Uzi lingvon kiel PHP, aŭ aĵoj vokis Pitono aux Rubeno, aŭ Java, aŭ tamen aliaj lingvoj, por demandi al datumbazo ofte, aŭ de alia servilo, kaj tiam dinamike kracxi el HTML. Nun la fina rezulto, kiel apartigas, estas ke la HTML de plej retejoj, inkluzive de via p-starigis sep, probable estas tuj estos grandega salato se oni rigardas la fonto kodo en retumilo. Tio ne estas granda interkonsento. Je tiu punkto, kiam ni zorgas pri stilo, oni zorgas pri la stuff, ke vi skribas. Ni ne zorgas pri la havajxoj ke tio, kion via kodo eligoj. Do ne zorgu pri deŝovon ĉi tie, se ĝi estas PHP tio reale outputting vazaro. Post ĉio, la retumilo ne zorgas, kaj homo ne rigardis ĉe la fonto de ĉiuj manieroj. Ni la bastonon, ekzemple, volus gxemados via PHP. Do lasu min doni rapidan ekzemplo nun kial alie tiu povus esti utila. Do sincere, mi ne povas memori la lasta tempo mi uzis C por solvi problemon en la reala mondo. Ĝi estis probable en postdiploma lernejo kiam Mi bezonis uzi lingvon, kiu estis sufiĉe malalta nivelo kaj ne donis al mi la ŝanco fari ion tre altan agi por vere savi kiel multaj CPU cikloj kiel mi povis, en granda parto ĉar mi uzis grandegan datenaroj, kaj cxiun CPU ciklo rakontita. Kaj sincere, eĉ en aferoj kiel telefonoj tiujn tagojn kaj aliaj aparatoj kie vi ne sufiĉe havas tiel memoro kaj vi ne sufiĉe havas kiel multe CPU, uzante pli rapida lingvoj Estas ankoraŭ vokante. Sed en la reala mondo, kiam vi nur volas ĵeti iun programon kune analizi iuj datumoj, aŭ vi jam kolektis tutan faskon da enskriboj por iu studento grupo kaj vi volas tre rapide aŭtomatigi sendas retpoŝtojn unu post unu por cxiu el tiuj, aliĝintoj, vi tuj atingos por pli altan nivelon lingvo ol C por tiel diri. Io kiel PHP aux Python aŭ Rubeno, aŭ duona dekduo aliaj ke ekzistas ĉi tiuj tagoj. Sed tiuj tri estas verŝajne la plej ŝikajn ĝuste nun. Kaj kion tio signifas ke vi povas malfermi supren tekstoredaktilo kiel gedit aŭ plej ion alian kaj poste komencu skribi kodon sen devi zorgi pri kompili, sen devi vere zorgu pri memoro demarŝon, teni en la menso kvankam tiu iom sloppiness eventuale revenu mordi vin, se la datuma aro gets pli granda aŭ la problemo gets granda. Sed kion tio signifas por ni estas la jena. Permesu al mi iri antaŭen kaj kuri Speller de problemo starigis ses. Do ĉi tiu estas mia trie-bazitaj efektivigo kiun mi uzis en la granda tabulo kie mi agis ne tiel. Ni revenos en semajno da tempo kaj reviziti tiuj, kiuj finas sur la pinto de la granda tabulo ĉe nia lasta prelego. Sed nuntempe, lasu min antaŭeniri kaj justa kuros mia solvo en teksto, kaj ni faros la Reĝo James Biblion, kaj tie ni iru. Do tiuj estas ĉiuj de la supozeble misspelled vortoj el la Reĝo James Biblio. Kaj mia efektivigo prenis duona dua en entute. Do ne tro malbone pri tiu aparta komputilo. Sed pensi pri kiom da kodo mi devis skribi. Pensu kiom kodo vi devis skribi. Pensu kiom da horoj vi elspezis en la D-salono aŭ via dormejo aux kie ajn reale kodigo supren ke solvo. Nu, se mi efektive havas pli altan nivelon lingvo kiel PHP, atentu kion mi povas fari tie. Unua, supozu, ke tio estas anstataŭ via distribuo kodo. Tiu dosiero nomata Speller. Ĝi estas disponebla kiel parto de la hodiaŭa dissendo kodo. Kaj mi tuj skuos mian manon maksimume de la detalojn, sed ĉi tiu estas efektive interesa ekzemplo de kiel Vi povus haveno lingvo kiel C super al PHP. Mi laŭlitere malfermis du teksto fenestroj, unu kun mia C versio de speller.c, kaj mi ĵus komencis traduki ĝin en mian estros por PHP kaj tajpi ĝin uzante la plej proksima ekvivalento funkcioj. Iuj do el tiuj aĵoj estas malsamaj. Ni vidis lasta fojo ke PHP ne uzas inkluzivi en tute la sama vojo. Ĝi uzas postulas tipe, kvankam inkluzivi ekzitas. Difini estas iom malsama # Difini en C, sed tio estas kiom ni faru konstantaj. $ Argc rezultas ekzistas en PHP, do ni jam vidis, ke antaŭe. Ĉi tiuj estas nur variabloj, ĉiuj kiu komencas per dolaro signoj. Memori tiuj estas nur faskon de flosanta punktoj. Do longan rakonton, vi estas bonvena klaki per ĉi se scivolema, tio estas preskaŭ linio-por-linio konvertiĝo de la C versio de speller.c sur PHP. Kaj vi povus fari tion denove por seson da aliaj lingvoj. Sed kio estas interesa estas jena. Aŭ kio estas sincere senkuraĝigaj Estas ĉi. Permesu al mi iri antaŭen kaj tajpu pri dictionary.php kaj pretendo, ke mi estas tuj iru antaŭen kaj re-apliki problemo starigis ses tie. Do ni proponas unue ke en tiu dosiero, kiu estos efektivigita en PHP, do lasu min malfermi mian etikedoj ŝatas tion. Lasu min donu al mi tutmondan variablo, $ grandeco gets nulo. Kaj mi tuj donos min hash tablo. Mi uzas hash tablon por tiu afero. Kjel mi deklari hash tablo en PHP? Farita. OK. Do malferma krampo proksime krampo reprezentas kion en PHP, kiel ni jam vidis? Tabelo, sed tabelo kiu povis esti asocieca tabelo. Asocieca tabelo estas datumstrukturo ke asocias klavojn per valoroj. Nun en la plej simpla numere indeksita tabelo, tiuj klavoj estas kio? Nulo, unu, du, tri, ĉu ne? Malnova lernejo plenigos reen de C. Sed ĝi povas ankaŭ esti kordoj kiel foo kaj trinkejo, aŭ Maxwell, aŭ iu ajn tia kordo. Do mi povos utiligi ke en nur momento. Permesu al mi iri antaŭen kaj deklari funkcio kiel - ni faru ŝarĝo () unua. Do funkcio ŝarĝo (). Kaj PHP estas iom malsama en tiu vi laŭvorte tajpi funkcion, sed vi ne tajpas revenon tipo. Mi tuj iros antaŭen kaj diru, ke la ŝarĝo () funkcio devus preni en argumento $ vortaro, simple kiel C versio faris. Mi faras, ke de la memoro. Kaj mi proponas ke mi estas tuj faros. Mi simple volas fari foreach. Mi iras por voki funkcio nomita dosiero (), pasante en la nomo de tiu fajliloj, kiu estas la variablo $ Dictionary kiel $ vorto. Kaj poste interne de mia por buklo tie, mi estas tuj iru antaŭen kaj gardi en mia $ Tabelo ke $ vorto gets vera. Farita. Ho, atendu. Farita. OK. Tio estas la ŝarĝo () funkcio diru en PHP. Nu, kial tio funkcias? Kaj mi specon de cheating tie. Do, oni, foreach ni vidis mallonge lasta tempo. Tio simple signifas ke vi povas persisti super tabelo sen tedi per i kaj n kaj plus plus, kaj ĉio pri tio. Vortaro estas kompreneble la dosiernomo, iu kiel grandaj aŭ malgrandaj, la du vortaroj oni uzas lasta tempo. Dosiero estas funkcio kiu malfermas teksto dosiero, legas ĝin en linio per la sxnuro, kaj manoj You Back grandega arsenalo, ĉiu el kies elementoj estas linio de tiu dosiero. Do tio estas la kombino de fopen, kaj fread, kaj dum buklo, kaj fclose, kaj ĉiujn kiuj. Fine, kiel vorto simple signifas, ke estas la variablo Mi tuj havas aliron al sur ĉiu ripeto en ĉi maŝo. Do mallonge, oni Liner tie signifas malfermu la dosieron kies nomo estas en vortaro, la variablo, persisti super tio linio por linio, kaj ĉiun fojon vi ricevas linio, vendejo en variablo nomata vorto, kaj tiam faru ion per vorto. Kion mi volas fari? Mi deziras meti vorton en mian hash tablo. Nu, mi povas meti ion en mia hash tablo ĝuste kiel en C per rektaj krampoj. Tiu estas la nomo por mia hash tablo. Mi iras al indekso en tiun hash tablo ĉe tiu loko. Do ne heligas nulon, ne heligas tiu. Krampo citaĵo unquote ion, kio ajn tiu vorto estas. Kaj kiel vi povus havi en via hash tablo laboro trie, vi simple vendejo efektive Bulea, implice aŭ eksplicite. Farita. Mi stoki la valoro true. Nun tie estas kelkaj aliaj aferoj Mi trancxis anguloj je ĉi tie. Teknike, oni tuj estos ĝena nova linio, / n, fine de ĉiu el tiuj vortoj. Do mi devos probable nomus PHP funkcio vokis chop (), kiu volas tute laŭvorte chop ke ekstere. Kaj mi vere bezonas fari unu alian aferon. Mi devus probable pliigo grandeco sur ĉiu ripeta, do mi konservanta trako sume el kio ĝi estas. Kaj sincere, kaj tiu estas unu el la stultis aspektoj de PHP, se vi estas uzante malloka variablo, vi bezonos eksplicite diras, ke vi estas. Do mi iros al reale tajpi en tutmondaj $ Grandeco, tutmonda $ tabelo, kaj nun mia funkcio estas plenumi. Do ne tute tiel simpla, kiel antaŭe, sed verŝajne prenis malpli da tempo ol la C versio, eble? OK. Do nun ni faru la ĉeko () funkcion. Ni vidu se tio almenaŭ prenis la horojn je fino ke ĝi kondukis nin en C. Do lasu min iri antaŭen kaj deklari kontroli kiel funkcio. Takes disputante vorto, kiu estas tuj venis el Speller. Kaj mi simple tuj kontroli, ĉu la jenaj variablo isset, tabulo krampo strtolower de vorto - ni ekvilibrigi la tuta de mia parentezoj - tiam revenu vera. Alie - ke vere estis la plej malfacila parto de tiu programo. Alie, revenu falsaj. Farita. Tio ĉeko (). Nu, kial ĉi tiu laboro? Nu, unu mi pasis en vorto, kio estas kordo. Du, mi kontrolanta ene de la hash tablo, kiu nomiĝas $ tabelo. Mi devigante ĝin minuskle nomante funkcio sufiĉe simila tolower () en C, sed tio faras la tutan vorton, Ne sola karaktero. Kaj se tiu estas metita, alivorte tie estas valoro starigis, en aliaj vortoj, se ĝi estas vera, tiam jes, jen estas la vorto. Ĉar mi metis ĝin tie kun ŝarĝo (). Kaj se ne, mi tuj revenos falsaj. Nun la aliaj estas facila. Funkcio grandeco (), kiel mi faru tion? Mi esence fari reveni $ grandeco. Sed mi teknike bezonas fari ĉi ĝena afero. Kaj efektive supren auxdas, mi trancxis unu angulo tro multaj. Mi vere bezonas fari tutmondan $ tabelo. Sed tio dirata, malŝarĝi). Malŝarĝi () estas miriga. Funkcio malŝarĝas (). Kjel mi volas apliki malŝarĝas ()? Farita. OK. Do malŝarĝi (), memoro demarŝo estas tute zorgo por vi en iu kiel PHP kaj multe de alta-nivelo lingvoj. Do ĉi tiu estas mirinda. Kiel, kial diable ni pasigis la pasinteco ok plus semajnoj sur C skribo ŝajne vere malrapida, vere tempo konsumanta problemojn kun dekoj da horoj de labori sub nia rimenojn? Nu, por unu afero, tio povas funkcii fajna por malgrandaj programoj. Certe gxi rapidis supren mia evoluo tempo. Sed ni vidu kio okazas en la reala mondo. Permesu al mi iri en tiun dosierujon en terminalo fenestro. Ekzistas Speller. Kaj rimarki kiel flanken, kaj eble vi renkontis ĉi en problemo starigis ses aŭ problemo starigis sep. Vi ne strikte devus fini PHP dosierojn kun. php. Se vi metos linion kiel tiu unua en la plejsupro, tio estas speciala linio de sintakso ke esence signifas trovi la programon nomitan PHP kaj uzi ĝin al interpreti ĉi tiun dosieron. Do nun neniu vere scias, ke Mi kuras PHP-programo. Mi povas ruli ĝin ĝuste kvazaŭ estis io kompilita en C. Sed jen la afero. Efektive, ni faru tion denove. Dropbox/pset6 /. Ekzistas Speller. OK, 0,44 sekundoj. Ĝi alvenis rapida tiu tempo. Nun ni iru en la PHP-version. Nice tuŝo. Sed pensu kiom da tempo Mi savis ĉe oficejo horoj. OK. Do 3,59 sekundoj, kio reale ne sonas precizajn ĉu. Sed tio estas ĉar longan rakonton mallonga, kiam vi presado el grandega kvanto da ŝtofo por la ekrano, por ke mem bremsas tion malsupren. Kio vere prenis la CPU en la aparato estis 3,59 sekundoj, en Kontraste al C, kiu prenis 0.44 duaj plej laste. Tio estas vere ordo de grando malsamaj. Do kie estas tiu prezo devenante? Kial estas tiel malrapida? Kial PHP plenumi tiel malbone? Danielle? Spektantaro: Vi ne vere uzi hash tablo. DAVID Malan: mi ne vere uzi hash tablo. Do mi specon de faris. Do estas asocieca tabelo. Plej verŝajne, se la homoj en PHP estas vere inteligentaj, oni uzis sub la kapuĉo reala hash tablo implementado en iu kiel C aŭ C + +. Sed. Jes. Spektantaro: [inaudibles]. DAVID Malan: Jes. Do ĉiu el la funkcioj mi skribis nun - vere, vi povas diri, ke iam pli iom pli laŭta? Spektantaro: Ĉiu el la funkcioj kiuj vi inkludis havas multe pli plena kapablo ol - DAVID Malan: Do tio estas tre vera. Estas multe pli superkape kiun ni estas ne vere vidi la enfokusigi nur en dictionary.php, kiun mi ĵus skribis. Por kontrasto, estas aro interpretisto tuj en la fono. Efektive, kiam mi kuris tiu programo, ĝi Ne estis kuranta kompilita nuloj kaj desegnita por mia Intel CPU. Pli ĝuste, ĝi kuris linio por linio PHP kodo kiu aspektas ekzakte kiel ni tajpas ĝin. Kaj tial kiam ajn vi uzas interpretita lingvo, vi fakte faras pagi tiun prezon. Ĝi tuj prenu iom da tempo por legi vian dosieron supro al malsupro, lasis al Bone, kaj poste ekzekuti ĉiun vicigas denove kaj denove. Nun en realo, speciale en la retejo, vi povas efektive akceli tiun procezon per caching la rezultoj de la PHP kodo esti interpretitaj. Kaj tio havas sencon en la retejo, ĉar se vi ne havas unu uzanto kiel mi tie, sed 1000 aŭ 10.000 uzantoj, tiam eble la unua fojo la dosiero Montrita ĝi estas malrapida, sed poste ĝi estas multe pli rapida. Sed tio ankaŭ, denove, estas komerca malproksime. Kaj por iu kiel esplorado datumoj aro, aŭ eĉ ion grandan kiel tiu, viaj uzantoj volo eventuale komenci senti ke malrapidiĝo. Do mallonge, interpretitaj lingvoj estas tre en boga, tre populara, kaj sincere estas probable la lingvojn vi devus atingi por kiam solvi problemojn postan CS50. Sed realigi kiom vi estas vere prenante por donita sub la kapuĉo vere tiuj pasintaj pluraj semajnoj en hash tabloj, kaj arbojn, kaj klopodoj, kiujn oni uzas por fakte finfine apliki aĵojn kiel malferma krampo, kvadrata krampo, kiun ni povas nun dankeme akceptas. Do ni rigardu nun en ĉi tiu retejo kuntekston. Kaj mi menciis lasta fojo, ke ekzistas faskon da superglobals en PHP ke ne estas vere gravaj ĉe la komandlinio. Ili estas pli grava en la kunteksto uzi PHP en retejo kuntekston. Do kurante PHP sur retservilo por por generi aĵoj kiel HTML. Kaj ni ekrigardis $ _GET kaj $ _POST, kaj tio estas kie aŭtomate uzantoj enigo finas simple se vi prezenti formi al dosiero ending in. php en retejo servilo kiel la aparaton. Sed ni rigardu mallonge ĉe $ Kaj $ _SESSION _COOKIE. En lego de terminoj, kio estas kuketon kiel vi komprenas ĝin en la kunteksto de uzante la retejo? Spektantaro: Dosiero en la komputilo. DAVID Malan: Jes. Estas dosieron pri la uzanto komputilo plantita per nenial afiŝinto vi hazarde vizitas. Do kiam vi iras al Facebook, kiam vi iros al bankofamerica.com, kiam vi iras al google.com, kiam vi iras al preskaŭ neniu retejo en la mondo tiuj tagoj, inkludante cs50.net, la kuketo estas plantita en via komputilo, kiu estas ĉu valoro stokita en RAM en via komputilo en via retumilo memoro, aŭ kelkfoje ja dosieron stokita sur via fiksita disko. Kaj kio normale arangxitaj en tiu dosiero ne estas via vikipediista nomo ne estas via pasvorto, tipe ne iu sentema krom se la retejo ne estas tiel bona kun lia sekureco, sed prefere estas granda unika identigilo inter aliajn aĵojn. Estas granda hazardo nombro plantita sur via komputilo sed vi povas pensi pri kiel speco de virtuala mano stampon kiel de klubon aŭ iu amuzparko ke permesas la dungitaro, la posedantoj de tiu servon, por memori, kiu vi estas. Do, se la granda hazarda nombro estas kiel 12345678, kvankam tio estas evidente ne tro hazarda, pensu ke kiel la mano stampon ke kiam vi vizitas facebook.com por la unua fojo, ili frapu tiu numero en via mano. Kaj tiam ĉar vi parolas HTTP, vi esti retumilo, kaj ĉar Facebook evidente parolas la saman kiel retejo servilo, la protokolo HTTP diras ke iam ajn vi vizitos poste facebook.com, ĉu ĝi estas dua poste, unu horon poste, eĉ la sekvan tagon, tiel longe kiel vi ne eksplicite elsalutita, kiu efektive Estas kiel lavi la manojn. HTTP diras vi prezentu viajn transdoni frapu ĉiufoje kiam vi reveni al tiu paĝo. Kio Facebook do estas ili rigardi tiu mano stampon kaj ili diras, ho, 123456789. Mi ne scias, je unua vido ke ĉi estas David Malan en Cambridge, Massachusetts, sed ili povas kontroli liajn datumbazo kaj diros, ho, la persono sur kies komputilo ni plantis 123456789 estas David Malan de Cambridge, Masaĉuseco. Ni montros ke uzanto tiam lia profilon paĝo aŭ lia Novaĵoj Feed. Sed estas problemo ĉi tie, se tio estas kiel la ttt ja funkcias. Ni rigardu rapidan ekzemplo. Ni efektive iru diri facebook.com. Sed antaŭ ol ni povus iri tien, lasu Mi iru antaŭen kaj malfermu Chrome la Inspektoro suben ĉi tien. Permesu al mi rigardi la reto langeton. Kaj nun ni iru antaŭen kaj tajpu en https://facebook.com. Kaj mi faras tio por ke ni ne vidas ĉiuj el tiuj alidirektiloj kaj malŝparo tempon rigardante tra tiuj. Lasu min batis eniri. Ĉio bone. Ni vidas tutan faskon da petoj. Venas Facebook. Ekzistas tuta fasko da dosieroj. Kaj tie, po mia mencio de latenta lasta fojo, jen multan HTTP petojn. Sed la unua estas probable la plej interesaj. Do ni rulumu malsupren tie, kaj Mi zomi en sekundo. Ĉi tuj estos speco de malordo, sed ni vidos. Facebook sendas al ni tutan faskon da aĵoj. Sed whoa, interesaj. Ili estas planti ne unu, sed kvar mano poŝtmarkojn sur mian manon tie. Aro-kuketo, Aro-kuketo, aro-kuketo, aro-kuketo. Kaj tie estas kelkaj trajtoj tie. Ĉiuj ili mencias kelkajn speco de finiĝo. Kaj ĝi aspektas kiel Facebook estas esperante memori min ĝis 2015. Do jen supozeble la tempo, per kiu Mi devas elsaluti aŭ ili timige nur aŭtomate supozas min ne revenis. Do tio estas vere decan kvanto de tempo. Kaj tie estas kelkaj aliaj aferoj okazas cxi tie. Ĉi kuketon ŝajnas esti perforte forigita dirante ĝi eksvalidiĝis en 1970 antaŭ ol kuketoj ekzistis. Do la retumilo estas simple irante supozi OK, jen kiel lavante la manojn stampon. Sed nun, kiam mia retumilo faras posta peto - lasu min iri antaŭen kaj faros cxi denove kaj reŝarĝi. Nun lasu min rulumi reen al la supro peton kaj iru malsupren ĉi tie, peti titolaj. Rimarku ĉi. Do nun mi estas sub ne respondo titolaj, sed rimarki diras peton titolaj. Kaj rimarki ke mia retumilo kiel parton de lia peto post bati Reŝarĝi havas sendis almenaŭ la jenaj informoj. Ne aro-kuketo, sed kuketo. Do tiu estas la linio, la HTTP-header tiom diri, kie mia foliumilo estas speco de sen mia scii ĝin prezenti mia mano por Facebook inspektado. Do tiuj kuketoj povas esti uzis tiam por kio? Memori, kiu vi estas, aŭ memoras kiel multajn fojojn vi jam estis tie, aŭ vere nenion. Do tie estas counter.php. Kaj lasu min zomi en la tiparo. Kaj ĉiun fojon mi reŝargi tiun paĝon, avizo ĝi estas memori, kiom da fojoj Mi estis tie. Nu, tio ne estas ĉio, kion impresaj. Ni simple fermi ke langeto, kaj nun ni reiros al http://localhost/counter.php. Ho, tio estas interesa. Ĝi memoris ankoraŭ, eĉ kvankam mi fermis la langeton. Kaj sincere, se mi fermos la krozilo, se implementado per gxusta vojo, mi povus ankoraŭ memoras, ke tiu uzanto estas kiu li aŭ ŝi estis la unua fojo, kaj nur unu fojon mi iras en Chrome menuo, kiu super ĉi tie estas tie, kaj iru al Historio, kaj klaku Klara Browsing Data, kiel kelkaj el vi povus havi en la pasinteco, nur tiam volas viajn kuketojn reale esti forigita dum retejo evoluo. Do, se ni iru - ni fermos supren gedit tie. Kaj se ni iru nun al ĉi tiu dosiero. Permesu al mi iri en nian vhosts / localhost / publiko, kaj lasu min fari counter.php. Rimarku, ke tio estas bela simpla programo. Ĝi estas sufiĉe simpla retejo. Do la supro de la dosiero Estas ĝuste komentojn. Sed ĉi tie estas nova linio kiu vi povas vidis jam en p-starigis sep, session_start (). Tiu estas linio de PHP-kodon esence diras la TTT-servilo, fari Nepre frapu manojn kaj faras Nepre kontrolu mano poŝtmarkojn. Tio estas ĉio ke linion faras, kaj tio faras ĉiu el tiu procezo por ni. Tiam rimarkos Mi ĵus ricevis du branĉoj tie. Se la vendotablo klavo interne de tiu speciala tutmonda variablon nomitan $ _SESSION Estas metita - alivorte, se ekzistas iu valoro tie - ni ricevas gxin kaj konservas ĝin en loka variablon nomitan $ vendotablo. Alie, ni atribui $ nombrilo la defaŭltan valoron de 0. Nun tie estas unu aspekto de PHP tio ambaŭ beno kaj malbeno. PHP estas iom fuŝa. Do dum en C, kio farus la medio de nombrilo estis ĉu tie aŭ tie ĉi? Ĝi estus enfermita al tiuj, krispa krampoj. Divenu kion? En PHP, ekzistas eĉ ekstere de tiuj krispa krampoj, ĉi tie, kaj ĉi tie, kaj ĉi tie, kaj ĉi tie, kaj eĉ malsupre. Do mi diru ĉi estas beno en la senco ke vi ne devas pensi kiel forte kiel ni faris semajnojn. Sed ĝi estas ankaŭ iom de malbeno en tiu negrave kie vi uzi variablon en PHP, almenaŭ en programo kiel tiu, ĝi estas tutmonde alireblaj por bona aŭ por malbona. Do vi devas teni en la menso nun ke via variabloj povas ne esti nedifinita. Vi povus esti difinita ilin aliloke. Sed kion mi tuj faros finfine? Mi iras al stoki ene de tiu tutmonda variablon kiel valoron de la nombrilo tajpi la rezulto de faranta nombrilo plus 1. Do tiu estas nur la aritmetiko kiuj faras la incrementation de tiu vendotablo. Kaj la fakto ke mi stokante ke valoro reen en ĉi tie estas duona esence aktualigi la datumbazon por memoru, ke uzanto 123456789 estis tien du fojojn. Kaj kiam Mi faros gxin denove la venontan fojon mi reŝarĝi la paĝon, ĝi estas tuj kontroli mia mano ringo kaj diras, ho, uzanto 123456789 havas nun cxi tie tri fojojn. Kaj do, kion PHP kaj similaj lingvoj faras por ni estas ke ili estas imagante el kiel kaj kie kaj por kiom da tempo stoki valorojn en ĉi tiu speciala superglobal. Kaj tion superglobal la venontan fojon mi viziti la paĝo estas speco de magie pre-popolita, plenigita kun valoroj kiuj tie estis la lasta tempo vi vizitis, ĉu tio estis dua tago, semajno antaŭe, nek en la 2013 kaj ni nun parolas pri 2015. PHP kaj la TTT-servilo enterigi de ĉiuj ke por vi. Spektantaro: [inaudibles]. DAVID Malan: Variabloj en PHP estas esence ĉiam tutmonda, krom se vi deklari ilin ene de funkcio, kaj tiam ili estas lokaj al la funkcio nur. Sed ĉar mi ne skribis ajnan funkcioj, ili estas nun efektiva tutmonda tra mia tuta dosiero tien. Spektantaro: Ĉu ekzistas maniero por fari ilin loka? DAVID Malan: CXu estas ia maniero por fari ilin loka? Nur per fluigi ilin en funkcioj. Kiu en la lasta versio de PHP, vi povas fari tion kun anonima funkcio. Sed pli pri tio en la kunteksto de JavaScript. Sed la mallonga respondo estas ne. Pli longa respondo estas jes. Agrabla. Bonan kvizo demando. Ĉiuj pravas. Do fine, la paĝo mem estas fakte sufiĉe simpla. Rimarku, ke iam mi eliros PHP moduso, recall ke ĉiuj ĉi aĵoj malsupren sube estas ĝuste tuj get kracxi el krudaj al la legilo. Kio estas pli bone, ĉar mi volas sendi la uzanto iuj HTML, sed mi volas dinamike ĝisdatigi ke HTML. Kaj unu maniero mi povas fari ĉi tion estas ordigi de tre rapide falas reen en PHP reĝimo, uzo malferma krampo demandosigno egala signo, kaj tiam eligo la valoro de vendotablo. Aŭ, se tio aspektas iom kripta, tiu egalsigno estas fakte nur iuj sintaksa sukero por tiu printf ($ counter). Sed sincere, ke estas nur iom malbela kaj iom ĝena por tajpi. Do PHP tre bele proponas tiun funkcion kie vi povas nur diri gxin pli koncize en la sama maniero. Do kio okazas malsupre la kapuĉo? Ni rapide rigardi la reto langeton tien por counter.php. Kaj lasu min antaŭeniri kaj unua ni purigi viajn kuketojn. Ni klare navigacio datumoj ekde la komenco de tempo. Nun ni revenu ĉi tien. Nun ni reŝarĝi la paĝon. Kaj mi certas reen je nulo. Ĉar mia mano stampo estas lavitaj, Mi nun ek al nova kuketon. Ja se mi rigardas la reto langeto kaj rigardi respondon titolaj, avizo ke la aparato sendas al mi biskviton kies nomo estas iom arbitre, sed speco de prudente, PHPSESSID. Kaj ĝi estas la sendo de mi cxi tiun vere big hazarda nombro. Ĝi ne estas tute nombro. Ĝi ne estas tute deksesuma. Ĝi estas ia speco de litero kaj kordo, sed supozeble ĝi estas hazarda. Kaj tio estas la mano stampon tiel paroli, ke mi raportas al. Dume, se mi klakas Reŝarĝi kaj poste rigardu tiun duan linion por mia dua peto, avizo nun ke mia peto titolaj inkluzivi PHPSESSID egalas tion, Ne aro-kuketo, sed gxuste kuketon. Kaj tio estas mia retumilo prezento de mia mano stampon. Do nun kiel teaser, kaj ni parolos pli pri tiu en semajno aŭ tiel, sed en kia maniero tio ĉi igos vin vundeblaj, via Facebook konton vundeblaj, kaj aliaj tiaj kontoj vundebla? Spektantaro: Se iu havas via kuketon. DAVID Malan: Jes, se iu havas via kuketon. Mi volas diri vere, multe kiel kelkaj el vi povus esti provinta en kiel klubo aŭ amuzparko, se vi provos ion kiel tiu por kopii la stampon, kvankam malantaŭen al alia persono manon, kaj tiam li aŭ ŝi prezentas ĝin kiel iliaj propraj, se tio vere aspektas identa, 123456789, tiam la TTT servilaj ŝajne ĝuste tuj esperas, ke tiu uzanto estas vi. Kaj cxi tiu estas vere fundamenta minaco ajn vi uzas kuketojn ĉar se iu nur spoofs tiel paroli vian kuketon, figuroj el kio ĝi estas, ĉu per vere kopii gxin rigardante vian komputilon kaj estante kiel, OK. David kuketo estas JJ3JIK ks, kaj tiam ili estas sufiĉe lertaj por scii kiel speco de manlibro sendu ke kuketo el retumilo aŭ el programo skribas, ili povis tute ensalutas en retejo kiel vi. Ĝi ne estas tiel malfacila por ŝajnigi esti iu alia krom se ni reviziti p-aro du, kiuj enkondukis kio? Spektantaro: Ĉifriko. DAVID Malan: Iom bito de ĉifriko. Simplaj ĉifriko, almenaŭ en la norma eldono, sed kripto tamen. malpli. Do rezultas se vi kodi ĉiujn tiuj titolaj uzante iun kiu vi eble nun scias pli familiare kiel SSL, sekura socket tavolo, aŭ https:// URLoj, tiam ĉiuj tiuj aferoj ni vizitis rigardante estas efektive kodita, kio signifas ke ĝi estas kiel vi ne povas legi la mano stampon. Nur facebook.com povas, aŭ google.com, aŭ en tiu kazo, la aparato povas legu tiu mano stampon. Tragike though, kaj denove, ĉi tiu estas ĉiuj tro taŭgaj kun la NSA stuff jxus, eĉ SSL estas rompema. Kaj tio fakte ne estas tiel malfacila inkluzive fendi ke ĉifrado. Ne tiom per krakas la ĉifrado, sed trompante la retumilo en decrypting la datumoj antaŭtempe. Sed denove, ni turmentus vin kun tiu antaux longe. Por nun, nur timu. Estas tragike ia vera. Ĉiuj pravas. Do, kie tio ĉi nun forlasi nin? Nu, ni faros. Ni iru antaŭen kaj preni rapidajn teaser antaŭ ni preni ripozon. Kaj mi kredas ke ni devos restadi iom pli longa hodiaŭ, sed ni iras al plonĝi en io tute nova kaj alloga, kiuj volas akrigis vian apetiton por eĉ pli. Do jen la teaser. Do SQL, ni komencis paroli pri iam tiel mallonge lasta tempo. Vi vere ricevi viajn manojn malpurajn kun iom da ĝi en p-aro sep. Kaj en laiko terminoj, kion faras la SQL - S-Q-L - faru por vi? Kio estas tio? Jes. Spektantaro: Ni vi aliro datumojn. DAVID Malan: Jes. Ĝi ni vin aliro datumoj en datumbazo. Strukturita Query Language. Kaj tio estas esence programlingvo. Esas trajtoj de tio, ke ni ne eĉ uzas en la klaso. Sed vi povas efektive difini funkciojn. Ili vokis stokitaj procedurojn en SQL. Sed ni devos konservi ĝin sufiĉe simpla kaj nur uzu ĝin por kelkaj bazaj operacioj kiel elekti datumojn, enmeto datumojn, ĝisdatigi datumojn, kaj viŝante datumoj. Kaj vi povas vere pensi pri datumbazo, kiel SQL-datumbazoj, kiel ĝuste esti Microsoft Excel. Ĉar SQL referencas al rilata datenbazo, kie rilato simple signifas tabeloj. Vicoj kaj kolumnoj. Do io vi povas meti en kalkultabelo kiel tiu aŭ Google Docs, vi povus enmeti en SQL datumbazo per deklaro tablo. Nun, kiel vi efektive aliri tiun informon? Nu, per komandoj aŭ pridemandojn kiel ĉi tio. SELECT, INSERT, UPDATE, DELETE kaj. Kaj plejparte, tiuj estas la kvar nur ingrediencojn vi bezonos fari ion tute potence en problemo starigis sep. Nun reen en la tago, vi volus vere interagi kun datumbazo per nigra kaj blanka terminalfenestro ĉe a palpebrumante prompto kiel ĉi tio. Kaj la datumbazon ni kuras en la aparato nomiĝas MySQL, kiu estas libera kaj malfermita fonto datumbaza motoro. Se vi Guglas kaj legis la Vikipedio artikolo, vi scios ke la nomo estas iom de transiro por iuj versioj de Linukso. Maria datumbazo estas reale forko tiel diri de MySQL. Longan rakonton, Oracle aĉetis MySQL. Oracle estas granda entrepreno. Homoj estis elĉerpita, ke li farus ne plu restas tiom malfermita fonto, do tio estas nur kopio de MySQL, ke estas ankoraŭ libera, ankoraux liberaj, kaj estas instalita en Fedora Linux defaŭlte. Sed tio estas speco de doloro en la kolo konatigxi kun datumbaza tiamaniere. Do ni inkluzivi en la CS50 aparato libera fonto malfermita ilo nomata phpMyAdmin. Nur koincido ke Ĝi estas skribita en PHP. Ne estas fundamenta bezonas por PHP tie. Sed tio estas nur ttt-bazita ilo kiu ni elŝutis senpage, instalitaj en La aparato, kiu permesas al ni havi grafika uzantinterfaco kun kio esplori la p-starigis sep datumbazon kun kiu krei novajn datumbazojn, diras por via propra fina projekto, se vi volas kiel, kaj finfine krei dinamikajn retejojn kiel CS50 Financoj ke vi permesas demandi datumoj kaj ĝisdatigi datumoj dinamike. Vi ne tuj devas uzi nur simpla teksta dosiero aŭ CSV. Vi povas fakte uzi inteligenta datumbazo programon tiel ke vi povas ekzekuti pli malnaiva pridemandojn ol nur legante tra ĉio lineare. Do ekzemple, tio estas, kion ni donu vin el la skatolo por p-aro sep. Tio estas tablo kun ŝajne almenaŭ tri kolumnoj, unu el kiuj estas username, unu el kiuj estas hash, kaj la alia el kiuj estas identigilo. Sed la interesa afero, kaj nur al turmentus el unu penson tie, uzantnomo Estas supozeble jam unika, ĉu ne? Mi volas diri, plej ajna TTT-ejo, se vi havas salutnomon, tie ne povas esti du Caesars. Ne povas ekzisti du malans. Ne povas ekzisti du jharvards. Lia unika. Alie, ili ne scias kion jharvard ĝi reale estas. Do kio povus esti la motivado por ankaŭ havi trian kolumnon sur la maldekstra tie nomata ID, kiu aspektas kiel numero kiu estas simile solaj? Ĝi sentas malmultan redunda al mi je la unua rigardo. Kial eble ĝi estos konvinkaj por havi ne nur unika salutnomoj, sed ankaŭ unika nombroj? Spektantaro: Ili povus havi la saman pasvorton. DAVID Malan: Homoj havu la saman pasvorton, sekura. Tio povus absolute okazos. Sed se ili havas tiun unikan salutnomon, mi argumentus ke tio ne vere afero, ĉar se oni tajpas en siaj salutnomon, mi nur bezonas kontroli iliajn pasvorto, iliaj hash largxo. Kial alie? Spektantaro: Faster serĉado. DAVID Malan: Faster serĉado. Kial? Spektantaro: ID estas nur unu. DAVID Malan: ID estas nur unu signo, aŭ por esti pli preciza, estas nombro, tial ĝi estas probable 32 bitoj aŭ io kiel tio. Dum la uzantnomo, ŝajne Jason Hirschhorn Supren ekzistas ia ridinde longajn, kaj gxi tuj prenu min multe pli da tempo al ŝnuro kompari H-mi-R-S-C-H-H-O-R-N, kaj eble a / 0 aŭ io simila, en ordo rigardi supren Jason, kontraste nur dirante al mi la uzanto numero du. Tio estas 32 bitoj. Ĝi estas sola INT ke vi devas kompari. Kaj efektive, jen ĝuste kial datumbazoj emas atribui unika IDs al vicojn en ili. Nun kion aliaj datumtipoj estas tie krom INT kaj ŝajne kordoj kiel tiu? Nu, por esti pli taŭga, SQL-datumbazoj, kiel MySQL, havas Char kampoj. Kaj char iom misleadingly ne estas sola Char. A Char kampo en MySQL datenbazo estas unu aŭ plurajn signojn, sed ĝi estas fiksita nombro da karakteroj. Do ekzemple, se mi iros al phpMyAdmin kiel vi eble jam, aŭ baldaŭ estos problemo starigis sep, kaj mi iras, al mia datumbazo, kaj nur por amuzo, ni krei novan tablon nomata testi kun nur du kolumnojn. Mi poste alklaku Go. Kaj ĉi tio fariĝis sufiĉe konata, precipe cxar vi toquetear ĉirkaŭe sur viaj propraj. Ĉi tie mi povus tajpi ID krei nova tabelo de tipo int. Sed ĉi tie mi povus entajpi salutnomon por amuzi, ke pli frue tablo. Kaj rimarki Mi havas tutan faskon de tipoj por elekti. Kaj ĉi tiu estas ankaŭ kial phpMyAdmin estas ia agrabla. Ĝi estas speco de memlernado en kiu vi povas simple ia punkto, kaj klaku, kaj rigardi dropdown menuoj, kaj konkludi el ke kion potencoj SQL donas vi. Kaj efektive, se mi elektas char, se mi tiam devas specifi la longo, aŭ kiel multaj taksas, kiom da signoj. Do tre komunaj valoroj estas aĵoj kiel 255, sed tio estas iom longa. Komune estas ok di uzantnomon. Sed tio estas iom malgranda tiuj tagoj. Do tiu estas dezajno decido. Ĉu 8 signoj maks, 32, 255, 1000? Estas vere supren al vi. Sed char kampo estas fiksa kvanto. Do elektu tro malmultaj kaj vi estas speco de ŝraŭbitaj se oni deziras plu uzantnomon. Elektu tro multaj kaj kio estas la malavantaĝo? Spektantaro: [inaudibles]. DAVID Malan: Ĝi estas malŝparema. Same kiel en C, se vi havas pli grandan eron de memoro ol vi bezonas, vi estas nur malŝparas tempon kaj malŝparas spacon. Do kiel alternativo, tie ekzistas VARCHAR, kiu solvas tiun problemon per trakti longo ne fiksita longeco sed kiel maksimuma longo, kaj uzante variablo nombro de signaĵoj, kiu tiam emas uzi nur kiel multaj signaĵoj kiel vi fakte bezonas. Tio sonas perfekta. Kial ni ne forigi la Char datumoj tajpi do? Kio povus esti la malavantaĝo de uzante VARCHARs, kiu sonas kiel ĝi estas bela venko? Jes? Spektantaro: [inaudibles]. DAVID Malan: Bone, bone. Do, se ĉiu el viaj datumoj estas la sama longo, kio estas la zorgo? Spektantaro: Ĉar vi malŝparas datumoj dirante ilin ĉiujn. DAVID Malan: Do, se ĉiu el viaj datumoj la sama longo, kvankam, mi argumentus ke preciziganta maksimuma longo sur VARCHAR ne estas malsama de preciziganta fiksita longeco sur Char se vi konas tiun numeron anticipe. Sed estas ja, kaj mi ian ĉerpi el tiu respondo la realo ke estas ankoraŭ maks, kiu povus esti ĝena, speciale se vi renkonti la nomon de persono, kiu estas nekutime longaj, ke vi ne anticipi. Kaj ĝi estas ankaŭ iom malpli efika efektive serĉu per VARCHARs kiel kontraste al serĉado signaĵoj, speciale dum longaj tabloj, kiuj havas multajn kaj multajn datumojn. Do ĉi tie tro, laŭtema estas denove neniu evidenta elekto. Do ĝuste doni al vi la senton de aliaj datumtipoj kiuj eble interesos ĉu por p-starigis sep aŭ en la estonteco, ne estas INT. Ekzistas BIGINT, kiuj estas kiel longa longa. Ĝi emas esti 64 bitojn. Tie estas dekuma, kiun vi vidos en la problemo aro, kiu estas multe purigisto respondon al la problemoj ni renkontita kun float kaj flosante noti imprecision. Kaj tiam tie estas DatoTempo. Tie estas laŭvorte datumtipo kiu havas rigardi kiel unu jaro, monato, tago, kaj horo, minuto kaj sekundo. Sed SQL-datumbazoj havas ankaŭ tion ni nomas indeksoj. Kaj indekso estas io kion vi specifi kiam kreante la tablo al fari serĉoj kaj aliaj operacioj pli efika. Specife, ekzistas io nomata La primara indekso ke vi povis deklari kiel sekvas. Ni faris tion por vi kun la uzantoj tablo ni donas al vi. Sed rimarkos se mi estis permane amuzante la uzantoj tablo tie donante ĝin nomon de la uzantoj. Mi jam specifita ID. Mi indikis INT. Mi indikis salutnomo kun maksimuma 32 signojn. Sed se ni plenumas rulumado en ĉi sufiĉe larĝa fenestro, avizo tie estas faskon da aliaj aferoj kiujn mi povas specifi. Unu, mi povas specifi atributoj kiel vi scias, kio, ĉi INT devus esti sensigna. Mi ne volas negativaj nombroj, do ni faru gxin sensigna. Nula estas ne rilatajn tie ĉar Mi volas ĉiu uzanto havas unikan numeron. Mi ne volas esti nula. Sed tio estas interesa. Mi povas specifi ke ID estas ĉu la primara ŝlosilo de ĉi datumbazo, aŭ ĝi estas unika, aŭ ĝi estas indeksita, aŭ plena teksto. Do por hodiaŭaj celoj, longa historio mallonga, PRIMARY signifas, ke cxi tio esti ambaŭ koncepte kaj teknike la kampo kiun ni uzas por unike identigi uzantoj. Do kiam ni rigardas supren uzantoj, tiu estas speco de promeso rigardi ilin plejparte per ke unika ensalutilo. Kaj la datumbazo estos certigi ke se vi havi uzanto numero 3, vi ne povas fizike enŝovu alia uzanto kun tiu sama numero 3. La datumaron, tio simple rifuzi savi viajn ŝanĝojn. Kio estas bona afero, ĉar vi povas protekti vin de vi mem. mem Alternative, por uzantnomon. Do la dua vico, recall, estas la uzantnomo kampo. Do la dua vico ĉi tie estas salutnomo, kiel ni faris en la fora lasis tie. Do, kion alian povus mi volas specifi? Mi ne permesis, laŭ SQL, specifi du primaraj ŝlosiloj. vi povas specifi aron klavo kie vi rigardi ambaŭ kampoj, sed ili ne povas individue esti primara ŝlosilojn. Do tio estas ekster la demando. Do kio povus mi volas elekti? Nu, unika estas similaj en Spirito primara ŝlosilo kie vi indiki tiun kampo estos unika, sed ĝi estas ne tuj estos la unu Mi uzas la tutan tempon. Kaj ni ne tuj uzos ĉi tiu tuta la tempo, por kio denove? Ĝi estas pli malrapida potenciale se ĝi estas longa uzantnomon. Estas nur malŝparo de tempo. INDEX, dume, precizigas, ke ĝi estas ne tuj estos sola, sed mi ŝatus vi labori via magio sub la kapuĉo por fari ĝin pli rapide por mi serĉu sur tiu kampo. Do tio probable ne estas grava ĉi tie. Por salutnomon, mi argumentas ke UNIQUE Estas bona respondo. Sed supozu ke ni faris uzantoj pli interesa ol nur salutnomoj, hashes kaj ID nombroj. Kio, se ni donis al la homo plenajn nomojn? Kio, se ni donis ilin adresoj kaj aliajn datumojn pri ili? Nu, se vi specifas ke kolumnon en datumbazo estas indeksita, tio signifas ke MySQL aŭ Oracle, aŭ kion ajn datumbazo vi uzas, devus labori lia magio kaj uzas ia imago datumoj strukturon kiel arbon, aux trie, aŭ hash tablo, aŭ ion por garantii ke kiam vi serĉu por datumoj uzante selektu je tiu aparta kampo - kiel montras min al ĉiuj ke loĝas en Oxford Street. Al demando tiel. Se vi specifitaj anticipe ke vi volas indekso sur tiu kampo, la serĉoj estos multe, multe pli rapida. Se vi ne specifas indekso, la plej bona vi povas fari estas lineara serĉo, se ĝi ne estas ordigitaj. Sed se vi specifas INDEX, la inteligenta personojn kiuj faris la datumbazon - homoj kiel vi kiu nun scias arboj kaj peras kaj hash tabloj - estos aŭtomate konstrui tian datumoj strukturo en RAM por certigi ke tiuj serĉoj estas multe pli rapida. Plena teksto dume estas similaj en spirito, sed permesas vin fari wildcard serchoj, kiel montras al mi ĉiuj, ke loĝas ĉe stratoj kiuj komencas kun la letero ho pro ajna kialo. Vi povas fari wildcard serĉoj kiel tio. Aŭ, pli konvinka aĵojn kiel spektaklo mi ĉiuj, kiuj havas la vorton - montri al mi ĉiuj, kies nomo komenciĝas kun aparta litero. Vi povas serĉi ŝlosilvortoj en tiu vojo. Ĉiuj pravas. Do, dezajno ŝancojn tie potenciale. Estas aliaj, ke mi skuos mian manojn. Rezultas, ke vi povas havi malsamaj stokado motoroj. Kaj tio estas pli arcane ol ni bezonas certe por problemo starigis sep. Defaŭlte, vi uloj abonas iu nomita InnoDB. Vi vidos mencion de ĉi ie en phpMyAdmin interfaco plej verŝajna. Sed sciu ke estas aliaj dezajno decidoj kiuj estas de potencialo intereso venis fino projektojn se vi faru ion ttt-bazita. Sed ni faros tiun. Ni iru antaŭen kaj metis tion en la ekrano kiel teaser por historio engaĝante vi, kunloĝanto, kaj glason da lakto. Ni prenu du minuto aŭ tiom rompos tie. Kaj se vi povas meti ĉirkaŭ, ni venis dorso, aspektas iom pli ĉe SQL, kaj do iom de JavaScript kun p-aro ok en menso. Ĉiuj pravas. Do, ni ekiru pensante pri angulo kazo kiu povas tre facile ekesti en la kunteksto de uzanta datumbazon, aŭ sincere, eĉ uzante reala mondo aferoj kiel ATMs akiri monon. Do jen fridujo. Supozu ke vi havas unu tro en via dormejo aux via domo. Kaj vi havas unu kunloĝanto, kaj ili ambaux vi vere ŝatas lakto ekz. Do vi venu hejmen el klaso unu tago. Li aŭ ŝi estas ankoraŭ ne revenis. Vi malfermas la fridujon. Vi vere volas grandan glason da lakto. Mankas lakton. Do, kion vi faras? Vi fermas la fridujo. Vi kaptu vian ŝlosilojn. Vi iru sur la placo. Kaj vi ricevas en linio je CVS je tiuj mem checkout aĵoj, kiuj ĉiam preni pli longa ol reale havanta kasistoj. Cxiuokaze. Tial do, dume, dot dot dot, via kunloĝanto venas hejmen kaj li aŭ ŝi simile havas hankering por iu lakto. Do li aŭ ŝi malfermas la fridujon, aspektas interne, kaj ho, malbenita. Neniu lakto. Do li aŭ ŝi estras eksteren, okazas iri al la aliaj CVS, kiu estis nur bloki for por iu kialo, kaj li aŭ ŝi metas en linion por aĉeti lakton. Dume, vi venis hejmen, li aŭ ŝi venas hejmen, kaj kion faras vi finfine havas? Duoble da lakto. Sed vi ne vere ŝatis lakto kiu multe. Do nun vi havas tiom da lakto, ke nun unu el ili estas ĝuste tuj iros nematurajn eventuale. Do tiu estas vere malbona problemo. Ĝuste? Do, kio okazis? Do fundamente, tiu estas speco de ridindan ekzemplon. Sed sub la kapuĉo, kion ni jam havis okazi tie estas ambaŭ de vi kontrolis la stato de iu peco de memoro, la fridujon. Ambaŭ el vi kontrolis la staton de iu variablo. Vi ambaŭ tiris konkludon ke vi tiam agis plu. Sed bedaŭrinde, dum via kunloĝanto estis en la vendejo, la stato de tiu variablo ŝanĝis, li aŭ ŝi revenis kaj nun volas ŝanĝi la staton, sed ĝi estas jam ŝanĝiĝis lin aŭ ŝin. Kaj kompreneble, li aŭ ŝi ne havus irinta al la vendejo, se oni sciis ke vi estis jam survoje. Do, en la reala mondo, kiamaniere vi povis eviti ĉi tiun problemon, supozante ke vi havas a fridujo, vi havas kunloĝanto, kaj vi efektive ŝatas lakto? Spektantaro: Komunikante. DAVID Malan: Komunikante. OK. Sed kiel povus vin komuniki? Spektantaro: Lasu noton. DAVID Malan: Lasu noto, ĉu ne? Ĉiam lasi noton, por ŝatantoj de la spektaklo. Enorde, do ĉiam lasas noton, aŭ meti vere ŝatas pendseruro aŭ io sur la fridujo, kiu tenas vian kunloĝanto el inspekti la staton de ke variablo. Nu, kial povus esti ĉi tio germane al problemo starigis sep, aŭ al ATMs. Nu, imagu mondon en ATM kie vi eble povos iri supren al ATM maŝino tie, kaj alia ATM tie. Kaj tio okazas tre ofte. Kaj supozu vi havis du ATM kartoj, kiu estas eble akiri. Kaj vi ensalutas en ambaŭ maŝinoj efektive samtempe, mi esperas dum nenies rigardante. Kaj tiam vi entajpu vian PIN proksimume samtempe. Kaj tiam vi faras bilancon informpeto por vidi kiom da mono vi havas. Kaj ni diras, ke vi havas $ 100 forlasis en vian konton. Do esence samtempe, vi diris unu, nulo, nulo, eniru. Kaj vi espereble reiri iom da mono. Sed kiom da mono povus vin reiri? Nun komputiloj ĉe la fino de la tago, precipe se oni parolas al serviloj, ne nepre faru tion en la ordo kiu estas atendita. Do supozu kio okazas, pro kion ajn reto rapido demandojn tie estas, aŭ CPU aferoj ekzistas, aŭ io simila al tiu, supozu ke la unua ATM kontrolas vian ekvilibron kaj iru, ho, tiu persono havas $ 100. Sed tiam gets distrata pro eble backup okazas kaj tial ĝi estas prokrasti. Aŭ eble dum kontrolanta, la reto ligo havas iom pli malrapida pro tio simple okazas. Ili estas fizikaj aparatoj. Do dume, la dua ATM estas petante la saman demandon. Kiom da mono Davido havas? $ 100 estas la respondo. Sed ĉar la unua ATM havas ankoraux ne sendis la mesaĝon subtrahi $ 100, ambaŭ ATMs ili inspektis la datenbanko volbo, vidante tie estas $ 100 tie, kaj nun ambaŭ maŝinoj potenciale estas irante kracxi el respondon. Nun, ĉi tiu estas granda por vi iusence se tio, kion la bordo faras finfine estas ŝanĝi la sumon al minus 100 por opcio la variablo egalas al viaj bankokonto egalas al 0, kontraste por fari minus 100. Nun en la plej malbona kazo por la bankon - aŭ en la plej bona por la banko, dume, Ili donos al vi $ 200, kaj via banka konto nun montras negativaj $ 100, kiun vere ne profitigi al vi. Sed la punkto estas, ke tiu raso kondiĉo por du kunloĝantoj atingi lakto, aŭ por du ATMs provante atingi kontanta mono kaj ŝanĝi la staton de volbo samtempe ekzistas neniu tempo vi havas datumbazon. Nun en problemo starigis sep, tiu temo ekestas en la senco ke se oni aĉetas parton de Facebook stock, poste pro Ekzemple vi aĉetos duan parton de Facebook stock, vi devas fari decidon kiel la programisto. Por decidi kiel ĝisdatigi la datenbazo, malakordo vi tuj havi unu vico por tiu stoko, kaj ĉi estas unu vojo por apliki ĝin. Kaj vi tuj havos unu parton de FB, kiu estas ilia trunko paperbenda simbolo por ĉi salutnomon, aŭ tiun uzanton IRU, la sola ensalutilo. Sed la sama rakonto povas okazi tie. Se vi faras unuarangan en SQL, kiel vi vidos en problemo starigis sep kiam vi vidos, oh, Davido havas unu parton de Facebook stoko. Permesu al mi ŝanĝi ĉi tion al du agoj, ĉar li volas aĉeti duan parton. Sed supozu Davido efektive havis du retumilo fenestroj malfermu, aŭ supozu ke ĝi estas komuna konto kun du edzinoj, kaj ambaux provas realigi la sama operacio, tie, ankaŭ, la potencialo ekzistas por decido esti faris el la antaŭa stato de la mondo - la konto havas unu porcion - kaj ambaŭ homoj, aŭ ambaŭ serviloj, nun provu diri pliigo gxin al du agojn. Sed en tiu kazo, vi povus esti akuzita al mi monon por ambaŭ agoj, sed incremented ĝuste tiu tempo. Do mallonge, la fundamenta problemo ĉi tie, kiel kun la ŝerco pri lasante rimarku, aŭ meti pendseruron sur ĝi, estas se du homoj, aux du fadenojn - pensas reen al nulo - povas inspekti la staton de iu variablo kaj tiam provu ŝanĝi tiun variablon, sed tiuj du aferoj ne okazas en la sama tempo sed povas akiri interrompita per aliaj aferoj okazas, datumoj povas enir tre stranga stato. Kaj vi povas profitigi aŭ vi povas suferi en la senco de la mono ekzemplo. Do problemo starigis sep, ni donos al vi ĉi tiu linio de kodo, kiu longe rakonto mallongaj, solvu ĉi problemo en MySQL. Tiu tre longa instrukcion kiu ne eĉ persvadis sur unu linio en la ekrano tie certigas, ke via operacio estas kio nomiĝas atoma. Ĉio okazas samtempe, aŭ tio ne okazas je ĉiuj. Tiu tre longa frazo neniom get interrompis parte. Kaj kion faras estas laŭvorte kio diras. Enmetu en iun tablon la sekvan tri kampoj tiuj specifaj valoroj, sed sur duplikatajn klavo, ne fari insert. Ĉu ĝisdatigon. Do tiu estas kiel faras unuarangan kaj INSERT por tiel diri, je la sama tempo. Kaj kio estas la ŝlosilo kiu probable priparolata ĉi tie? Rezultas, kaj vi vidos tion en problemo starigis sep la specifon, ĉar ni deklaris tie esti unika ŝlosilo sur tiu aparta tablo tiaj ke Vi ne povas havi multoblajn vicoj cxar la sama uzanto kun la sama denaro stock simbolo - en ĉi tiu ekzemplo tie ĉi, DVN.V estas stulta denaro stock ke ni referi al la specifon. Ĉar ni deklaras ĝin esti unika, kion tio signifas ke se vi provi enmeti duplikaton vico, vi estas anstataŭ tuj ĝisdatigi ĝin sen iu ajn alia havas ŝancon por ŝanĝi la stato de la mondo ankaŭ ne. Do mallonge, certigu aferoj estas atoma. Pli ĝenerale, tamen, datumbazoj kiel MySQL - kaj vi ne bezonas tiun karakterizaĵon por p-starigis sep, sed konservi ĝin en menso por la estonteco - apogi kio nomiĝas transakcioj, kie vi povas diri START transakcio laŭvorte. Vi povas poste ekzekuti du SQL deklaroj. Kaj SQL aserto, kiel vi vidos en p-starigis sep, aspektas iom iu kiel ĉi tio. Ĝisdatigi tablo nomata konton. Ŝanĝu la ekvilibron kolumno egalas kion ajn la ekvilibro kolumnon aktuale Estas minus 1000, kie la nombro, la konto numeron, kiel la uzantidentigilon, egalas 2, kaj tiam ĝisdatigi konto dot dot dot. Do en laiko terminoj, kion tiuj du pridemandojn ŝajnas esti farante en la reala mondo senco de la banko? Spektantaro: Kopiante al ŝparojn. DAVID Malan: Ekzakte. Kopiante fondusoj de unu rakontas al la alia. Kaj jen estas alia ekzemplo kie vi vere volas tiuj du aferoj okazis aŭ ne okazi. Vi ne volas ion por meti en la mezo de ili, kaj potenciale salato supren la matematiko, aŭ salato ĝis kiom mono vi havas, aux kiom da monon la datenbanko havas. Do kio estas vere bela pri transakcioj en MySQL estas kiu, kaj Datumbazoj pli ĝenerale, estas ke ili kaj inteligentaj homoj, kiuj jam implementado tiuj karakterizaĵoj elkompreni kiel fari certa, ke ambaŭ el tiuj aĵoj okazas aŭ tute ne. Kaj se vi estas vere aspiras fari paĝaro, kiu estas uzata de la homo sur kampuso, homoj en la reala mondo, farante io en la komenco senco, jen estas la specoj de dezajno decidoj kiuj fariĝi iam tiom grava. Alie, oni komencas perdi datumojn, perdi uzantoj, aŭ en la plej malbona kazo, kiel ni vidis tie, potenciale perdi monon. Do denove, pli pri tio en problemo starigis sep, tiel kiel eble por kelkaj el vi en fino projektoj. Do ni ŝanĝu tion bildon ni havis antaŭ momento ĝuste en pli vojo. Do mi efektive vidi se mi povas - nope, kiuj estas for. Tie ĝi estas. Do tiu estas kie ni lasis lasta tempo. Kaj ĝi rezultas ni tuj rulos alia afero en la miksaĵo tie - lingvo nomita JavaScript. Do JavaScript efektive ĝustigas en tiu peco - kaj mi ne tute lasi suficxe ĉambron, tial cxi tiu ne estas jam por grimpi. OK, tiu estas vere patosaj. OK, do tio estas JavaScript. Ĉio bone. Mi vere fari ĝin disservice. Ĉio bone. Do JavaScript estas alia programado lingvo, kaj nia lasta, Se tio helpas trankviligi, ke tie ne estas multe pli de la fajro hidrantes tie. Do JavaScript estas ankaŭ interpretitaj lingvo, kiu signifas ke vi ne faru kompili ĝin en nuloj kaj. Vi nur ruli ĝin. Sed kio estas fundamente malsama kun Javascript kutime estas, ke vi ne ruli ĝin en via TTT-servilo. Ĝi ne get kuri en la aparato per si mem. Prefere ĝi gets elŝutis de uzanto per HTTP-en iliajn retumilo - Chrome, Safari, Internet Explorer, Firefox, kio ajn - kaj gxi estas la retumilo kiu ekzekutas ĉi aparta programlingvo. Do por esti klara, PHP tiele nun estis ekzekutitaj aŭ ĉe la komandlinio en niajn nigrajn kaj blankajn fenestro, sur servilo kiel la aparato, komputilo ŝatas la aparaton, aŭ jam pasis ekzekutitaj de reta servilo kurante sur komputilo. Sed la temo estas, ke PHP tiel malproksime estis ekzekutita servilo-flanko, tiel la uzanto kaj la uzanto retumilo neniam vidas linion de PHP-kodo. Fakte, se vi iam malfermi retumilo por via retejo aŭ alian kaj vi reale vidi PHP kodon en via fenestro, iu ŝraŭbitaj supren. Ĉar ĝi ne intencis esti sendis al retumilo rekte. Oni supozis esti ekzekutita kaj turnis en iu kiel HTML. Sed JavaScript estas esence la malo. Ĝi celas esti kuri tipe interne de uzanto browser window. Kaj kion specoj de retejoj uzas Javascript tiam tiuj tagoj? Kiel laŭvorte ĉiu populara retejo. Ĉiu retejo ke vi uloj verŝajne uzu cxiutage uzi JavaScript por la simpla kaj eĉ la sexy karakterizaĵoj. Do io kiel Facebook Babili, se vi uzas tion. How does ke reale funkcias? Bone tiel malproksime, ĉiuj la aĵoj ni farita per HTML kaj PHP supozas ke vi elsxiros URL, kaj vi batas Enter, kaj vi vidas kelkajn HTML-enhavon. Kaj vi klaku la ligilon, kiu ŝanĝas la URL, ŝanĝas la paĝo, kaj lardas iu nova enhavo. Klaku alia URL aŭ prezenti formon, vi get whisked al alia paĝo kaj vi vidas iun novan enhavon. Sed uzante iun kiel Facebook Babilejo, aŭ Gchat, aŭ Google Maps, malofte tio la tuta paĝo refresxigu tiaj ke vi vidas blankan ekranon momente kaj tiam nova enhavo. Prefere retpaĝojn hodiaŭ estas dinamike getting ĝisdatigita denove kaj denove kaj denove ĉiu speco de malantaŭ la scenoj. Kaj tio rezultas, ke kiam vi iras al iu kiel Facebook, aŭ Gchat, aŭ Gmail, kaj la paĝo ĝisdatigojn aŭtomate sen reŝargi la tutan ekranon, kio okazis estas ke Via retumilo faris ian sekrete aldona HTTP petojn - Ne por ĉiu la retpaĝojn, sed nur por iom pecoj de datumo, kiel la momenteto mesaĝon ke via amiko ĵus sendis vin, aŭ statuson ĝisdatigo ke iu ĵus sendis al vi, aux la tuit ke iu simple sendis. Ĝi estas simple fari iom petoj datumoj, kaj tiam uzanta JavaScript, tio programlingvo, por ŝanĝi kion La retpaĝo aspektas kiel sen la servilo helpante, sen la servilo generante ke HTML. Do mallonge, JavaScript povas esti uzata tiam ne nur fetch novaj datumoj de La servilo sen reŝargi tutan paĝo aŭ submitting formularon. Ĝi povas ankaŭ esti uzata por ŝanĝo la tn DOM - dokumento objekto modelo - kio estas ĝuste la ornama metodo por dirante al la arbo de HTML ke ni vidis la lasta tempo. Do por trankviligi, JavaScript estas sintakse tiel simila al C tiel. Ekzistas neniu ĉefa funkcio. Vi nur komenci skribi la kodon kaj gxi estos get ekzekutitaj, aŭ interpretita pli konvene. Kondiĉoj aspektos kiel tiu. Neniu malsama de C aŭ PHP por tiu afero. Bulea esprimojn aux-ed kune similos ĉi. Anded kune aspektas kiel ĉi tio. Ŝaltiloj aspektos kiel ĉi tio. Por masxojn aspektos kiel ĉi tio. Dum masxojn aspektos kiel ĉi tio. Ĉu dum masxojn aspektos kiel ĉi tio. Tio estas nova. Do JavaScript havas ne foreach konstrui per, sed ĉi konstruo por variablo i en tabelo, kaj mi en ĉi tiu kazo iĝas indekso valoro. Do estas iom malsama ol tiu foreach, kvankam novaj versioj de Javascript estas venanta el la tuta tempo, tial eĉ tiujn lingvo trajtojn evoluas. Kaj kiel oni apartigas, JavaScript tiujn tagojn ankaŭ povas esti uzata en servanto nur kiel PHP uzante kadro alvokis Node.js. Unu el CS50 la TFS, Kevin, kiu gvidis seminario pri Node.js kiu estas havebla cxe cs50.net/seminars. Do se vi estas scivolema, sciu ke vi povas uzi tiun sur la servilo flanko kiel bone, sed tio estas sufiĉe freŝaj tendencon, sed potencan unu ĉe tio. Tio estas iom malsamaj. Tiu estas tabelo en JavaScript. Kaj kio sxajnas al vi malsamajn kontre C aŭ PHP? Tie estas kelkaj rapidaj rakontojn Ni povas diri ĉi tie. Kio mankas kontre PHP? Spektantaro: [inaudibles]. DAVID Malan: Jes? Pardonu, diru denove? Spektantaro: Ne deklarante la tipo de variablo. DAVID Malan: Ni ne deklari la tipo de variablo. Do vere tute kiel PHP, ni ne estas preciziganta la tipoj de tiu variablo. Pli ĝuste, ni estas pli genéricamente dirante var por variablo. Ni ne havas PHP la ĝeno de la dolaro-signo, kiu dum teda al tipo, ne faru pli klara, ke io estas variablo. Dum tie, ni estas speco de reen al C La alproksimiĝo por nur nomi a variablo per la nomo ni volas doni al ĝi, kiel numeroj. Kaj same kiel PHP, ni havi rektaj krampoj por la valoroj ene ke tabelo. Do variabloj en JavaScript ankaŭ povus aspekti kiel ĉi tio. Rimarku tie ĉi estas linio nomita s, sed simile ni ne specifita ke ĝi estas kordo. Ĉi tie kvankam estas karakterizaĵo kiu faras ne ekzistas en precize la sama vojo en PHP, sed iom simile. Tiu estas objekto en JavaScript. Kaj celoj estas speco de la Svisa Armeo Tranĉilo de datumstrukturo en kiu vi povas uzi ilin por ajna nombro de aĵoj. Jen, ekzemple, ni deklari variablon nomitan citaĵo. La tipo de tiu variablo estas objekto. Vi povas pensi pri tio kiel C struct kiu havas klavojn kaj valorojn. Simbolo estas ŝlosilo. FB estas valoro, ŝajne sako simbolo. Komo. Prezo estas alia tonalo, kaj ĝia valoro estas ŝajne flosanta punkto, aŭ numeron pli ĝenerale en Javascript, el $ 49,26. Do PHP ne havas - ni ne vidis en PHP celoj tute kiel tiu, sed ni vidos analoga, kio estis kion? Spektantaro: [inaudibles]. DAVID Malan: Asocia arrays. Do dum PHP havas asociajn arrays kies sintakso estas iam iomete tiel malsamaj - ni vidis la kvadrataj krampoj. Ni vidis la strangan sagoj simboloj. Javascript havas celojn, sed tiu estas plejparte semantikaj diferenco kaj malsamaj sinonimo por nun. Tamen, kiel flanken, PHP ankaŭ havas objektoj en maniero, ke Javo kaj aliaj lingvoj havas celojn en objekteman programadon. Sed ni uzos tiujn nur por datumtipoj ĝis nun. Celoj kaj asociaj tabeloj. Tiu oni povus fari gxin iom pli klara. Jen kial estas objekto utila. Kiam vi volas deklari studento, kiel Zamyla, ni povas reale encapsulan tiel paroli ene de tiu kontesti uzante krispa krampoj nur kiel antaux tuta fasko da ŝlosiloj kaj valoroj en ĉi tie. Ni havas IRU, domon, kaj nomon por Zamyla, sekvis per punktokomo kiel kutima ĉe la fino. Malsupren tie tro, jen iomete malsamaj, sed ankaŭ tre potenca ĉi tiuj tagoj. Jen tabelo, kaj mi scias, ke pro tie estas kvadrata krampo supren supre kaj kvadrata krampo ĉe la malsupro. Kaj tio estas tabelo de kio datumoj tajpi ŝajne en JavaScript? Tiu estas tabelo de ĝi aspektas kiel tri celoj. Kaj mi scias, ĝi estas objekto nur ĉar el la krispa krampoj. Kaj rimarki ke estas malferma krispa krampoj, iuj aĵoj, proksime krispa streĉa, komo, tiam iuj pli, komo, kaj tiam kelkaj pli. Do jen tri argumentojn apartigita per du komojn. Do tiu estas tabelo de tri celoj. Kaj ĉiu el tiuj objektoj ŝajnas esti studento aŭ personaro membro de iu varon, ĉiu kun ID, domo, kaj nomo. Sed mi nomis ĉi ion vokis JSON - Javascript Objekto Skribmaniero. Kaj jen estas datuma formato kiu reale Estas do tre populara kaj en modajn tiujn tagojn ke se vi skribos apliko, kiu uzas la Facebook API, Twitter API, vere preskaŭ neniu API tie tiuj tagoj, inkluzive de kelkaj de CS50 mem, la datumo vi reiros ne estas en malnova lernejo CSV-formato. Ĉar Memoru ke CSV is super simpla. Ĝi estas nur kolumnoj disigitaj per komoj. JSON datumoj donas al vi pli pridatumon. Ĝi asocias ŝlosilon kun ĉiu valoro tuj oni ne devas nur supozi ke la nula kolumno estas unu valoro, kolumno unu estas alia, kolumno du estas alia. Ĉio en JSON objekto tie estas speco de mem-priskribante, ĉar ĉiu unu el la nomoj en tiu dosiero havas laŭvorte enoficigi en fronto de ĝi kiel quoted kordo. Do ni rigardu pli kelkaj ekzemploj cxi tie. Permesu al mi iri en la aparaton. Kaj lasu al mi iri en nian vhost dosierujo en publiko. Kaj lasu al mi iri en la Javascript dosierujo. Kaj ni iru antaŭen kaj malfermu dom-0.html, kie DOM signifas nur dokumento objekto modelo. Ĝi estas la arbo uzatajxojn, por kio Mi referita al pli frua. Kaj lasu min proponi la sekvan. Jen retpaĝo kies korpo estas sufiĉe simpla. Do ĉi tie ĉe la malsupro, Rimarku ke mi havas formon. Ni jam vidis tiujn antaŭe. Ĝi havas du eniroj, unu el kiuj havas ID de nomo, unu el kiuj havas tipon de submetiĝi, kaj la unua onia tipo estas teksto. Do tio reale sonas sufiĉe simpla. Ni iru tien. Ni iru returne al tiu paĝo ĉi tien. Ni iru en localhost, kaj iru en nia JavaScript dosierujo, kaj ili iru al dom-0, kaj ĉi tie ni havas ĉi tiun formon. Do tio ŝajne ĉiuj ĉi paĝo does. Ĝi havas nomon kampo kun a Submetu butonon. Sed mi ne tuj uzos PHP-tie. Mi tuj fari ĉion kliento flanko por tiel diri en JavaScript kiel sekvas. Rimarku, ke mi ja donis la nomon kampo de tiu enigo unika ensalutilo, kio efektive savu min iam en momento. Kaj rimarki Mi enkondukis alian etikedo en la kapo de mia retpaĝo, la  etikedo. Do estas en tiu senco ke JavaScript estas kliento-flanko programlingvo. En ĉi tiu kazo, samkiel CSS, mi metis ĝin rekte interne de mia HTML. Sed Notice Mi jam deklaris funkcio kiuj aspektas iom kiel PHP sintakse, sed ĉi tiu estas efektive Javascript, ĉar denove, ĝi estas flanko de la kliento en la foliumilo. Kaj prenu diveno, kio estas tiu tuj do, eĉ se kelkaj el la sintakso ĉi tie estas nova. Spektantaro: Diru saluton al kiu ajn. DAVID Malan: Ĝi estas dironta saluton al kiu ajn vizitas ĉi paĝo. Do kiel? Do rimarki, rezultas en JavaScript tie estas garde () funkcion. Tio estas tre ian malĝojan funkcio kiu vere simple emas ĝeni uzantoj. Ĝi ne estas tiu kiun vi devas vere uzos tipe, sed ĝi estas rapida kaj malpura vojo de ia presado ion al grafika uzanto interfaco, kiel navigilo. Rimarku, ke mi hvas kordo en citiloj. Rezultas, ke kontraste C, JavaScript povas reale havas vi uzas sola citajxoj, kaj sincere estas nur speco de la stila konvencio inter Javascript programistoj uzi citiloj. PHP, ili efektive havas iomete malsamajn signifojn. Sed nuntempe, ĝuste scias ke tio estas la nura kialo. La kongreso en JavaScript estas ofte uzi citiloj, sed ni povus uzi duoblaj citiloj en ambaŭ lokoj kiel bone. Do ĉi tiu estas interesa. Rememoran lasta fojo ke ni havis tiun bildo sur la ekrano, kiu tiris arbo kie vi havis la HTML nodo, kaj la estras nodo, kaj la korpo nodo, kaj tiam iu teksto. Sed tie estis unu speciala nodo ĉe la plejsupro ke mi nomis la dokumenton. Nu, tio rezultas en JavaScript, ia tempo vi skribi programon en JavaScript en foliumilo, vi havas aliron al speciala tutmonda variablo. Similaj spirite al PHP la superglobals, ĉi tiu estas vokita en ĉiuj minuskle dokumenton. Estas kiel struct, sed ĉi struct havas ankaŭ funkcioj ene de ĝi. Do C struct nur havas datumoj tipe. Sed JavaScript objekto kiel tiu teknike estas ankaŭ havas funkciojn, alie sciata kiel la metodoj, interne de ĝi. Kaj vi povas voki funkcion ene de tiu celo tute laŭvorte farante lia nomo, streketo kaj tiam la nomo de la funkcio, aŭ denove metodo. Ĝi estas nur sinonimo, vere. Kaj kion faras tiu funkcio faras? Vi povas ia diveni el lia nomo. Akiru elemento por identigo. Do tiu tuj serĉi la TTT-paĝon, serĉi tiu arbo, serĉante kion ajn nodo, AKA elemento, havas Unika identigo de citaĵo unquote nomo. Kaj tiam kion mi faros? Mi iros por ricevi la valoron ene de ke nodo en la arbo, kaj mi iros por iel diri saluton al tiu nomo. Do prenu konjekto, eĉ se ni ne vidinta ĉi tamen, kion faru la pli simboloj signifas ĉi tie kaj ĉi tie probable? Spektantaro: Concatenate. DAVID Malan: Concatenate. Ĝuste, kaj tio estas ĝuste speco de desegni decidoj homoj faris antaŭ jaroj. En PHP, vi concatenate aĵoj kun punktoj. En C, vi saltas tra pluraj aros kaj voki funkciojn kiel strcopy () aŭ strcat () aŭ aliajn tiajn funkciojn. Sed en JavaScript, vi uzu pluses. Do tiu estas justa concatenando tri kordoj - saluton, nomo, kaj poste ekkrion punkto. Do, kiam kaj kial estas tiu funkcio vokis kvankam? Nu, prenu diveno de la HTML ĉe la malsupro. Kial saluti () nomas, aŭ kiam? Ŝajne, kiel bona mi povas diri, sur submetiĝi, kiam tiu formo estas donita, Mi tuj fari kion estas ene de tiuj citiloj. Kaj specife, mi tuj vokos Salutas () kaj tiam revenu falsaj. Nu, ni vidu kion la reto efekto tie estas unua. Do lasu min iri antaŭen kaj tajpu en, ekzemple, Loren, Submetu. Saluton Loren. Ni vidu se eble tio estis nur bonsorta efektivigo. Nope. Do ĝi estas tajpado el kio ajn nomon mi fakte metis tie. Sed rimarki kio ne ŝanĝas. La URL estas ankoraŭ dom-0.html. Mankas register.php. Mankas dua dosiero. Tie estas nenia ago atributo. Do kio estas tiu reveno malvera supozeble faras? Kial mi vokas saluti () kaj poste redoni malvera probable? Kio kutime okazas kiam vi premas Submetu sur formo ke eĉ ni havas vidis en la pasinta semajno? Spektantaro: [inaudibles]. DAVID Malan: Ĝi iras ien, ĉu ne? Ĝi iras al iu celloko URL. Sed mi ne volas, ke okazos tie. Mi volas mian retpaĝon estos tute dinamika kiel Gmail, kie iam vi estas tie, vi restu tie. La retadreso ne ŝanĝiĝas en maniero kiu indikas la tuta paĝo estas reŝargi. Prefere, mi nur volas ŝanĝi ion kiel presi ion ĉi tie sur la ekrano. Nu lasu min purigi ĉi supren iomete. Permesu al mi malfermi Ne dom-0, sed lasu min malfermi dom-2. Ĝuste tiel vi vidis iuj sintakso tie. Rezultas, ke kion ni ĵus ne estas uzanta krudan JavaScript. Do tiu estas vere la lingvo Javascript. Iuj el vi eble scias pri biblioteko nomita jQuery. Do jQuery ne estas la sama aĵo kiel JavaScript. Estas nur la biblioteko, ke oni vere inteligenta ulo skribis kaj popularigis tiajn ke preskaŭ ĉiuj en la mondo nun uzas jQuery kiam uzi JavaScript. Kaj je la unua rigardo, honeste, ĝi aspektas iom pli kamufla. Sed vi trovos, speciale se vi iros tie por via fina projekto kun ttt evoluo, vi trovos, ke tiu purigas tion supren kaj savas vin tute malmultaj linioj de kodo. Do ni nur rigardis kiel ĉi tiu formo estas laborante. Rimarku kion mi forpelus ŝajne de miaj HTML? Mankas je submit traktilo por tiel diri. Ne estas atributo. Ĉar vi scias, kion Mi ne vere ŝatas? Mi sentis, kiel ni estis falanta en malnovajn kutimojn tie. Ĝuste kiel oni komencas senti fuŝa al intermiksas ambaŭ CSS kun HTML, ĉar vi estas speco de ĵetante malsamaj lingvoj ĉie en la lokon, simile ĝisvenis komenci senti kiel malbonan vojon al iri malsupren kie Mi metante Javascript-kodon ene de mia HTML anstataŭ faktoranta ĝin. Do jen la leciono ĉi tie. En dom-2.html, mi faktoranta ĝin. Kaj mi faras aferojn iomete malsame. Nuntempe, mi tuj skuu miajn manojn je kio tiu vere faras sub la kapuĉo. Sed nur por momento supozus, ke tiu unua linio de kodo en tiu biblioteko vokis jQuery simple signifas, kiam la dokumento estas preta, do jeno. Ĉar retpaĝoj povas preni iom da tempo por ŝarĝi. Vi povus esti sur malrapida interreto rilato, kaj gxi eble ŝpinante kaj ŝpini, kaj fine ĝi estas ŝarĝita. Tiu linio de kodo nur diras atendi ĝis la tuta paĝo estas preta, la dokumento estas preta, antaŭ ekzekuti tiun kodon. Kaj nun rimarkas, tio estas probable la plej utila unue forpreni el jQuery. Tiu linio tie estas tre simila en spirito al ĉi multe pli longa linio tie. Dum en kruda JavaScript kodo, tie Ekzistas dokumento tutmonda objekto havas funkcion nomata getElementById (), la homoj kiuj skribis jQuery simplificó ke nur diru dolaro-signo, kaj poste interne de krampoj metu du citaĵoj, kaj poste metu hash simbolo sekvas la unika ID vi volas ekpreni. Do tiu estas ekvivalento al document.getElementById. Dume,. Submit simple signifas la submetiĝo de ajn formon vi estas raportante al maldekstre, iru antaŭeniris kaj ekzekuti ĉi. Sed tio estas nun la scivolo tro. Kio estas stranga pri kio Mi jam elstaris tie ĉi? Ne nur estas speco de sintakse nova, estas ankaŭ iu mankanta. Spektantaro: Ĝi simple nomata funkcio? Ĝi ne nomas garde? DAVID Malan: Jes. Bone, do garde () estas sube tie ĉi, por esti justa. Sed estas nenia mencio pri nomo, same kiel vi scias, foo aŭ io ĝis ĉi tie. Kaj efektive, tiu estas unu el la trajtoj de JavaScript, tio estas tute potenca, sed ankaŭ sufiĉe nova. Kaj PHP efektive havas ĉi tiel. Permesu al mi iri antaŭen kaj fari io reala rapida. Permesu al mi iri antaŭen kaj metis tiun ĉi tie. Lasu min fari tion. Funkcio. Ni nomas tiun traktilo (). A traktilo funkcio tiel diri. Iu kiu manipulas iu operacio. Lasu min purigi mian deŝovon. Kaj metu ĉi tien. Kaj metis tiun ĉi tie. Yep. Akcepti. Do nun mi havas funkcio nomata traktilo () ke mi ne vere scias, kio faras ankoraŭ. Ĝi nur ankoraŭ havas tiun materialon. Whoops. Prenis tro multe. Ni faras tion. Ĉio bone. Pardonon. Ĉio bone. Lasu min fari tion. Akcepti. Tio aspektas bela kaj rekta antaŭen nun. Lasu min fari tion. Ĉu ĉi tio. Kaj OK. Do nun, ni metas ĉi tie. Ne plu programadon en la muŝo. Akcepti. Do nun, ni reiru al kie la rakonto komencis. Antaŭe, mi diris ke ĉi tiu lineo tie signifas kiam la dokumento estas preta, iru antaŭeniras kaj fari ĉi tion. Kion mi volas fari? Nu specife, Mi volas iri antaŭen kaj faru la sekvajn. Plenumu ĉi tiu linio de kodo, kaj poste kion mi volas ke vi devas fari estas nomas tiun funkcii kiam la formo estas donita. Nun tio estas kio estas interesa. Ĉi tio ne estas sin funkcio. Rimarku Mi ne metante krampoj tie en la normala maniero. Mi laŭvorte pasi funkcio nomata traktilo () al alia funkcio vokis submeti () kiel argumento kiel kvankam estas kiel variablo. Kaj ĉi tiu estas unu el la trajtoj de Javascript estas funkcioj sin estas vere nur celoj. Fakte, ili estas vere ĝuste variabloj de iu varo. Kaj se la nomo de la funkcio estas traktilo (), ne ekzistas kialo mi ne povas pasi ĝin en kiel argumento tie. Kaj tio signifas kiam la formo kun la ID de demo estas donita, nomas tiun funkcion. Sed nun se mi malfari ĉio ĉi, kial do mi eble faru ĉi antaŭ momento? Nu, tiu estas anonima funkcio. Ĉar sincere, mi rimarkis kial mi tedante malŝpari tempon deklari funkcio nomata handler () nur por alvoki ĝin en unu kaj nur unu loko? Se mi ne bezonas la nomon, kaj mi ne bezonas nomi ĝin pli ol unu lokon, ni nur havas la funkcion ĝuste kie mi bezonas ĝin. Kaj tiel JavaScript kaj PHP subteno kio estas nomitaj anonima funkcioj kiuj permesu al mi fari ĝuste tio ĉi tie. Sed ni simple skrapante la surfacon. Ni turmentus kun nur paro fina ekzemplojn ĉi tie. Se mi iros en quote.php. Rimarku ke tiu estas fakte PHP funkcio, PHP programo, kiun mi skribis ke atendas HTTP parametro nomata simbolo, kaj mi povas pasi en valoro kiel FB. Kaj se ni vere rigardas la fonto kodo, ĉi tiu estas informpeti libera afiŝinto vokis Yahoo Financoj, ĝuste kiel p-aro sep, kaj ĝin redoni al mi io en la ŝajne formato konata estas JSON - Javascript Objekto Skribmaniero. Estas nur objekto. Rimarku la krispa krampoj, la citaĵoj, la dupunkto, kaj la komoj. Nun dume, ĉi tiu estas sufiĉe freŝa. Ĉar mi probable povas uzi programado lingvo por generi URLoj ne aspektas kiel ĉi dinamike, ĉu ne? Mi povas ŝanĝi ĉi tion al Google kaj reiri de Google stock prezo de $ 1,017.55. Do ni vidu, se ni ne povas uzi ĉi nun. Permesu al mi iri al ajax-0 tie, kiuj aspektas kiel la jena. Estas nur retejo kiu havas formo kun butono. Permesu al mi ĉi tie iri antaŭen kaj tajpu en YHOO por Yahoo la agoj simbolo, klaku Get Citaĵo, kaj nun rimarkas mi alveninta garde kun 32,86. Permesu al mi efektive iru al amatoro versio de tiu ĉi paĝo, versio du, kaj tipo en Diru Microsoft, MSFT. Get Citaĵo. Kaj nun rimarkas, neniu garde. Rimarku kie diras prezo esti decidita? Tie estas la plej simpla de ekzemploj ke aludoj je kio Gchat, kaj Facebook Babili, kaj Gmail, kaj aliaj tiaj retejoj faras per efektive ŝanĝi la retpaĝo. Rimarku ĉi. Lasu min reŝarĝi la paĝon. Permesu al mi malfermi Chrome la inspektoro. Permesu al mi iri al la elementoj langeton cxi tie. Nun rimarkos se mi zomi en cxi tie kaj malfermu ĉi supre, rimarki ke ĉi tiu estas mia HTML DOM - mia dokumento objekto modelo. Ĉi tio estas mia HTML. Sed nun rimarkas, kvankam tio okazas esti iom malfacile vidi ĝin en ambaŭ lokoj samtempe, se mi tajpas en FB ĝis tie, rigardas la malsupro de la ekrano nur. Ĝi estas efektive ŝanĝanta miaj HTML en la muŝo. Kaj ĝi estas fari tion sufiĉe simple farante iun kiel ĉi tio. Se mi malfermas ajax-2, rimarki apliki ion kiel sexy kiel ke, kvankam ĝi estas sufiĉe malbela, sed kiel kompleksa kiel tiu funkcie, ĝi havas iujn HTML ĉe la malsupro. Sed rimarki mi uzis por marki. Ni ne uzas tiun antaŭe, sed ĉi tiu estas kiel, sed ĝi ne devigas ĉion sur nova linio. Ĝi nur faras rektangula regiono sur la sama linio esence. Rimarku, ke mi donis al ĝi ID de prezo. Kaj ĝi rezultas per la sama Javascript biblioteko, mi havas funkcio vokis citaĵo () kiu nomiĝas kiam ajn la formo estas donita. Kaj kion mi faras estas tiu. Mi deklaras variablon en JavaScript vokis url, savante la valoro quote.php? simbolo =. Alivorte, mi mem estas komencante prepari HTTP peto, kaj poste Mi concatenando sur tiu kun pli kion ajn la elemento kun la ID de simbolo, kiu avizo estas ke teksto kampon dekstren suben ĉi tien. Do ĝuste kiel ni havis formoj en la estinteco. Kaj tiam ĝi rezultas en jQuery, se vi voki. val (), kiu nomas de val funkcio, valoro funkcio, kiu alvenas kion ajn la uzanto tajpas in Kaj tiam ĉiuj el la reta trafiko kio okazas estas tiu. $. GetJSON. Kaj kiel oni apartigas, dolaro signo estas nur stenografio skribmaniero. Estas vere jQuery.getJSON. Get Min JSON el tiu retadreso, kaj kiam peto venas reen, nomas tiun funkcio migru en la argumento kion ajn li relevigxis el la servilo. Do, en aliaj vortoj, se mi reirus al la retumilo, kaj mi reiros al quote.php, kion mia retumilo faras estas atingi ĉi chunk de datumoj. Kaj kiam mi iras al tiu retpaĝo ĉi tie, rimarki, se ni anstataŭ iri al la reto langeton kaj purigi ĝin, kaj tiam tajpi en iu kiel GOOG por Google kaj Get Citaĵo: rimarki la paĝo ne ŝanĝi. Sed HTTP peto estis farita, kaj kio venis ĉi tien, se ni rigardas la respondo estas tuta fasko da JSON ke ni Montrita fine kun tiun simplan linion tie. Datumoj estas kio alvenis de la servilo. Prezo estas la nomo de la ŝlosilo interesas min. Do data.price donas al mi tion. Nun dume, kaj ĉi estas la lasta ekzemplo. Vi povas fari ankoraŭ pli kun la paĝon. Oni efektive, krom du. Ni povas revenigi la Tag, se vi memoras ĉi tio. Tio estas JavaScript. Ni povas fari tion. Tre interesa. Ni lasos ke kiel cliffhanger. Sed pli excitingly, vi povas fari tion kiel ĉi tio. Se mi iras al geolocalización-1, rezultas ke Chrome scias ke ni estas ĉe latitudo longitudo 42,37. -71,10. Do tie estas eĉ pli tie je via dispono. Sed pli sur tiu proksima semajno. See you lundon.