DAVID Malan: Добре. Това е CS50, и това е края на седмица девет. Той е бил вихрушка над През последните няколко дни. И проблем създаде седем, ако сте на коляното дълбоко в нея, да разбере, че има доста Малко ново, което е там. Но нека да видим дали не можем да сглобя всичко заедно тук накратко преди това Veering разстояние в още друга посока и виждайки Къде другаде можем да отидем. Така че до този момент, ние сме говорили за HTML. Ние говорихме за CSS. Ние говорихме за PHP. Започнали сте да изпитате SQL. Днес ние ще говорим малко за JavaScript. Но как всички тези разнородни езици поберат заедно? Така че ние говорихме миналата седмица за понятие като сървър. Така че нека просто да се направи този правоъгълник като уеб сървър тук. А уеб сървър служи непременно файлове. А някои от тези файлове може да бъде HTML файлове. Така че едно от нещата, които един уеб сървър може да изплюе може да е файл, който ние просто ще се направи по този начин съдържащ някои HTML. Така че от гледна точка на лаик, какво HTML е да ви позволи да направите? ПУБЛИКАТА: Page поглед хубаво. DAVID Malan: Добре, да направи страница изглежда добре, макар че аз мисля, че съм доказал че в противен случай. Така че HTML няма да ви позволи да изложи страници структурно, и ви позволява да се вид естетически маркирате дадена страница, марка на статично съдържание, така че да можете След това може да го видите с уеб браузър. Но това е ключът. Това е статично съдържание. Можете да го напиша, да го спаси, и след това да го достави. И уеб сървъра след това служи It Up на посетителите си. Но ние стилизирам неща с помощта на различни език напълно. Ние започнахме да се използва атрибут стил на определени тагове. И атрибут стил нека настроите неща като размер на шрифта и цвят. И вероятно сте започнали да откриват, или скоро ще за окончателно потенциални проекти, още други свойства, които можете да използвате в CSS. И така, от гледна точка на лаик, какво Наистина тогава се CSS направя? Това са само примери от тях. Какво означава това да ви позволи да направите това HTML изглежда не от това, което сме виждали до този момент? ПУБЛИКАТА: Определете стилове от себе си. DAVID Malan: Определете стилове от себе си. Така определи неща като класове, както ви може да са се натъкнали, или уникално идентифицират възли в документ така че можете да ги стилизирам. Но по-конкретно, бих казал, че CSS наистина ви позволява да правите неща, които последна миля и ви позволява да определите много по-точно на естетиката, като има предвид, HTML за по-голямата част позволява структурирате вашите страници. И въпреки че има някои настройки по подразбиране, като видяхме етикет за позиция, тагове, които грубо казано прави нещата мащабен и смел. Това е доста общо определение на етикет - голям и удебелен шрифт. Какво големината на шрифта е това? Какъв цвят е това? Как смело е това? И CSS ви позволява по-фино Уточнявайте такива неща. Както и оформление, като някои от вас са виждали. И честно казано, CSS е малко на разхвърлян език. Това е много мощен в които можете да направите буквално всеки сайт, че сте видян на интернет днес с него, но това е нещо като болка в областта на шията. И някои от вас са Ударих си главата срещу стените вече само за да направят нещо глупаво като център за менюто на проблем създаде седем, ако сте стигнали до този въпрос вече. Но осъзнавам, тези неща стане по-лесно с течение на времето. Можете да започнете да усещате модели. И отново, Google ще бъде твой приятел за различните начини, по които можете да решаване на тези проблеми. И смея да кажа с CSS и HTML повече като цяло, можете да решите проблемите в много други начини, в които може много добре да бъде вярна, отколкото бихте могли в нещо като C, дори сега PHP или JavaScript. Има само много различни начини да се определят нещата. Но това започна да се разхвърлян, казахме. Просто вид на смесването си HTML и Вашата CSS с атрибута стил е малко помия. И така, вместо да заяви, нещо абстрактно казано, че трябва да най-малко да започне да фактор вашия CSS вероятно. Не е твоя стил атрибути, но най-малко използвате таг стил вътре какво част от уеб страница? ПУБЛИКАТА: Head. DAVID Malan: В главата. Досега имахме само заглавието нагоре там, но можете също така да добавите стил маркирате, и можете да поставите вашия CSS грубо говорейки към горната част на страницата. Но тогава ние взехме нещата една стъпка напред и ние отразено, че повече в отделен файл. И така, тези два файла са някак си сега свързани. И наистина това беше маркер, който е направил това. И това, което е един от общите мотивации за факторинг нашия CSS още повече? ПУБЛИКАТА: повторна употреба. DAVID Malan: повторна употреба. Нали така? Може да сте виждали в р-определя седем вече че много от страниците, на купуване страница, страницата продажби, на портфолио страница, вероятно са структуриран малко по подобен начин. Има CS50 финанси лого в горната освен ако не сте решили да го смените. Има един букмейкър в дъното на страниците. И CSS ви позволява след това да го фактор от то в отделен файл, така че, ако искате да промените нещо в световен мащаб през целия си сайт, вие наистина може да просто го промените на едно място. Но има една цена, която плащате потенциално До като заложен навън на CSS от моя HTML файл в отделен файл, той съотнасяне с тагове, които видяхме в понеделник. Какви биха могли да бъдат в неблагоприятна посока на това? Мислене обратно преди седмица, когато сме Говорим за HTTP и TCP / IP и как Интернет работи. Нещо тук? ПУБЛИКАТА: Това отнема повече време. DAVID Malan: Това отнема повече време. Защо? ПУБЛИКАТА: [недоловим]. DAVID Malan: Да. Така че може би отнема малко повече време. Защото едно, СГО е очевидно не в един и същи файл. Така че сега ще трябва да не се правят една, а цели две искания. И всеки един от тези искания, както видяхме в Chrome в така наречената инспектор, и ние погледна раздела мрежа, всеки на тези файлове изисква една HTTP искане, което видяхме отнема някакъв период от време. Сега, може би не е много. Може би това е само 20 милисекунди. Може би това е 200 милисекунди. Но мисля, че за една страница като Facebook, или CNN, или Google, които са много по-голям от примерите, с които сме погледна към този момент. Тези страници може да има десетки файлове, всеки от които може да изисква изтегляне на файл. Така че нещата може потенциално започне да се забавя. И най-вече тези дни, когато всички ние имат мобилни телефони в нашите джобове и ниска скорост на интернет връзки, се налага да изчакайте още няколко милисекунди, няколко повече милисекунди за допълнителна файлове може действително да бъде бавно. Latency е думата, която описва вид на изчакване, че сте, че сте изпитате, когато чакаш някаква част от информацията. Но там е наобратно. Така че това не е всичко, нещо като - тя всъщност е малко на зигзаг отсечка тук. Отрицателните сега, но това, което браузъри могат да направят ако си умен, за да се избегне се налага да поиска същото styles.css подаде отново може да бъде да се направи какво? То кеш. Така кеширане - С-А-С-Н-Е - обикновено означава тук само за да се спаси файла, който поиска за първи път, и След това проверете вашата кеш за него. Проверете, че сте нещо като контейнер за съхранение, и ако вече имате копие от styles.css, дори и ако някои друг страница в р-сет, или който и да е сайт, поиска отново, само за да даде потребител, който същия кеширано копие. Да не се притеснява да го иска. Отрицателните там, въпреки че, както някои от вас са спъна в р-сет. Ако се направи промяна на сървъра и можете да се върнете към браузъра и ви презареди, понякога браузъра прави ти една услуга и не се притеснява повторно изтегляне на вашия styles.css файл защото, хайде, какви са шансовете че тези стилове, които Facebook използва ще променим час на час или ден за ден? Това е доста ниска. Те могат да се променят с течение на времето, но не и от минута или с всеки изминал час. Така че един трик, просто FYI, когато правиш уеб развитие, често се задръжте натиснат смени ключов например и след това щракнете върху заредете в браузъра си и това ще обикновено кажа презареждане на браузъра всичко, дори и ако вече имате то в кеш паметта. Така че отново, плюсове и минуси, но всички от тях в крайна сметка се изработи решения. Така че сега, ние не само трябва да края на историята тук. Ако сега се върнем и назад и назад и Обратно, ние започнахме да се въведе не само HTML, но PHP. Така че от гледна точка на лаик, какво няма PHP нека правим? ПУБЛИКАТА: [недоловим]. DAVID Malan: Какво е това? ПУБЛИКАТА: Въвеждане на логика в кода. DAVID Malan: Да, да се въведе логика във вашия код. Така че това е един истински език за програмиране с примки, и променливи, както и функции и условия, както и всички нещата, които са използвали обратния път когато от нулата. И PHP, които сме виждали, може да се използва или в командния ред - това не трябва да има нищо общо с интернет, въпреки че това е наистина си произход и това, което тя е склонна да бъде добър в и благоприятна за - но можете да използвате PHP просто от природата на факта, че има печат () функция, и ФОРМАТ () функция, или ехо () функцията. Има пропуснати ползи от начина, по които може да печата текст с PHP. Следователно, можете да използвате този програмен език за извеждане на точно това, което ние говорим за преди. Можете да динамично генериране Вашата HTML. Може би не всички от него. Може би вие твърдите код неща, подобно на хедър, и долния, и логото, и вашия стил листове, и всичко това. Но за нещо като р-определя седем, къде манипулиране запаси и показва портфейла на потребителя, което е ще се променя динамично, бихте могли да със сигурност се използва PHP и логиката му придава вие като език за програмиране, за да изход динамично подгрупи на страницата. Така че, когато говорим за динамични уеб сайтове, или уеб програмиране, че е това, което наистина говори. Използването на език, като PHP, или неща нарича Python, Ruby, или, или Java, или още други езици, да се правят заявки база данни често, или друг сървър, и след това динамично изплюе HTML. Сега крайния резултат, като настрана, е че HTML на повечето сайтове, включително и р-определя седем, е вероятно ще бъде огромна бъркотия, ако погледнете при източника код в браузъра. Това не е голяма работа. В този момент, когато ние се грижим за стил, ние се грижим за неща, които пиша. Ние няма да се грижи за нещата, че това, което кода на изхода. Така че не се тревожи за отстъп тук, ако това е PHP, че е всъщност извеждане неща. В края на краищата, браузърът няма да се интересува, и човек няма да се търси при източника или иначе. Ние персонала, например, би да се търси в своя PHP. Така че позволете ми да дам един бърз пример сега защо иначе това може да бъде полезно. Така че, честно казано, не мога да си спомня последния път I използва C за решаване на проблема в реалния свят. Той вероятно е бил в завършил училище, когато Имах нужда да се използва език, който беше сравнително ниско ниво и ми даде възможност да се направи нещо много висока извършване наистина да спаси колкото се може повече CPU цикъла, колкото можех, в голямата си част защото бях с огромни масиви от данни, и всеки CPU цикъл брои. И честно казано, дори и в неща като телефони тези дни и други устройства където не са съвсем толкова памет и да не са съвсем като много CPU, използвайки бързо езици все още е привлекателен. Но в реалния свят, когато просто Искам да хвърлят някоя програма заедно, за да анализираме някои данни, или сте събрали цял куп регистрации за някои студент група и искате да много бързо автоматизиране на изпращане на имейли един по един на всеки един от тези регистранти, ти започваш да се достигне за език, по-високо ниво от C, така да се каже. Нещо като PHP или Python, Ruby, или, или на които съществуват половин дузина други тези дни. Но тези три вероятно са най-модните в момента. И какво означава това е, че можете да отворите текстов редактор като Gedit или почти всичко друго и след това започвам писане на код, без да се налага да се притеснявате за съставяне, без да се налага да наистина се притеснявате за управление на паметта, като се има предвид обаче, че малко небрежност в крайна сметка ще се върне да те ухапе, ако масивът от данни получава по-голям или проблемът се голям. Но какво означава това за нас е следното. Позволете ми да отида напред и да тичам правопис от проблем създаде шест. Така че това е моето изпълнение Trie-базирани че аз бях на големия борда, където не се представи толкова добре. Ще се върнем във времето една седмица и преразгледа тези, които са в крайна сметка на върха на голям борда в последната ни лекция. Но за сега, нека да вървим напред и просто тече моето решение в текст, и ние ще направим Библията на крал Джеймз, и тук ние тръгваме. Така че всички тези неща са на общо мнение сгрешени думи от Джеймс Библията Кинг. И ми отне изпълнение половин секунда в общия. Така че не е твърде лошо за този определен компютър. Но мисля за това колко код аз трябваше да пиша. Помислете колко код, който трябваше да се напише. Помислете колко часа, прекарани в D-зала или общежитието или където всъщност кодирам това решение. Е, ако аз действително имат по-високо ниво език като PHP, да вземе под внимание какво мога да направя тук. Първо, се предполага, че това е вместо кода си разпространение. Това е файл, наречен правопис. Той е достъпен като част от днешната код разпределение. И аз отивам да махам с ръка най-много на детайлите, но това е всъщност интересен пример за това как вие може пристанище език като C към PHP. Аз буквално откри два текстови прозорци, едно с моя C версия на speller.c, и аз просто започнах да я превеждат в моя отправят към PHP и да го пишете, като се използват най-близките еквивалентни функции. Така че някои от тези неща са различни. Ние видяхме за последен път, че PHP не използва включва в доста по същия начин. Той използва изискват обикновено, макар включва не съществува. Дефинирайте е малко по-различна от # Определят в C, но това е как ние правим постоянно. $ Argc се оказва, съществува в PHP, така сме виждали това и преди. Това са само променливи, всички от които започват с доларови знаци. Припомнете си, те са просто един куп плаващи точки. Така че, дълга история кратко, вие сте добре дошли да флип чрез това, ако любопитен, това е почти една линия за онлайн превръщане на C версия на speller.c в PHP. И бихте могли да направите това отново, за половин дузина други езици. Но това, което е интересно е това. Или това, което е казано отчайваща е това. Позволете ми да отида напред и да напишете за dictionary.php, и твърдят, че аз съм ще отида напред и да приведе отново в действие проблем създаде шест тук. Така че нека да предложи първо, че в този файл, който ще се реализира в PHP, така че нека се отвори тагове ми като това. Позволете ми да се даде глобален променлива, размер на $ стане нула. И аз ще дам себе си хеш таблица. Ще се използва хеш таблица за това нещо. Как мога да декларирам, хеш таблица в PHP? Готово. OK. Така отворена скоба близо скоба представлява какво в PHP, както сме виждали? Масив, но масив, който би могъл е асоциативен масив. An асоциативен масив е структура на данни, който асоциира ключове със стойности. Сега в най-простите числено индексирани масив, тези ключове са това? Нула, едно, две, три, нали? Старата школа нещата обратно от C. Но това може да също така да бъде струни като Foo, и бар, или Максуел, или друго такова низ. Така че мога да се наберат, че само за миг. Нека да вървим напред и да се обяви функция като - нека да направим натоварване () първо. Така функция натоварване (). И PHP е малко по-различна с това, че буквално напишете функция, но не въвеждайте връщания тип. Отивам да вървим напред и да кажем, че натоварване () функция, трябва да предприеме в аргумент $ речник, просто като C версия направих. Правя това от паметта. И аз предлагам, че съм ще направя това. Аз съм просто ще направи foreach. Отивам да се обадя на функция, наречена подадете (), която преминава в името на това файл, който е променлива $ Речник, колкото $ дума. И тогава вътре в мен за линия тук, аз съм ще отида напред и да се съхранява в моя $ $ Таблица, която се разчуе вярно. Готово. О, чакай. Готово. OK. Това е натоварване () функция казват в PHP. Сега, защо се случва това? И аз съм един вид измама тук. Така че, един, foreach видяхме накратко за последен път. Това просто означава, че можете да обхождане масив, без да пречи с I и п и плюс плюс, и всичко това. Dictionary е, разбира се, името на файла, нещо като големи или малки, на две речници ние използвахме за последен път. File е функция, която открива текст файл, се чете в ред по ред, както и ръцете ви връща обратно огромен масив, всеки един от които елементи е ред от този файл. Така че това е комбинация от FОтваряне на, и fread и линия, докато и неуспешно, и всичко това. И накрая, като думата просто означава, че е променлива Отивам да имат достъп до на всяка итерация в тази линия. Така че, накратко, това означава линейното тук отваряне на файл, чието име е в речник, променливата, обхождане той ред по ред, и всеки път, когато получите линия, се съхранява в променлива наречена дума, и след това направете нещо с думата. Какво искате да направите? Искам да сложа думата в хеш моята маса. Е, мога да сложа нещо в моя хеш таблица точно както в C използвате квадратни скоби. Това е името, за хеш моята маса. Отивам да се индекс в този хеш масата на това място. Така че не скоба нула, не една скоба. Bracket нещо цитат кавички, каквото и да е дума. И както може да се наложи в хеш Trie работна маса, просто съхранява ефективно булева, имплицитно или изрично. Готово. Аз съм съхраняване на стойността вярно. Сега има няколко неща, Аз просото тук. Технически, там ще бъде досадно нов ред, / п, в края на всяка от тези думи. Така че може би трябва да се обадя на функция PHP нарича котлет (), която ще съвсем буквално нарежете го. И аз всъщност трябва да направи още нещо. Вероятно трябва да увеличите размера на всяка итерация, така че аз съм следене в световен мащаб на какво е то. И честно казано, и това е една от най- глупав аспекти на PHP, ако сте с помощта на глобална променлива, трябва изрично да се каже, че сте. Така че аз ще действително да напишете в световната $ Размер, глобалната $ масата, а сега ми функция е завършена. Така че не е толкова просто, колкото преди, но вероятно отне по-малко време, отколкото на C версия, може би? OK. Така че сега нека да направим проверката () функцията. Да видим дали това най-малко се появиха на часове наред, че ни отне в C. Така че нека да вървим напред и да се обяви проверите като функция. Счита аргумент в слово, което ще дойдат правопис. И аз съм просто ще провери дали след променлива Isset, маса скоба strtolower на думата - нека да балансира всички мои скоби - след това се върнете вярно. Друго - че е наистина трудно част от тази програма. Иначе, връщане фалшиви. Готово. Това е проверка (). Сега, защо става това? Е, едно минах с една дума, която е низ. Второ, аз съм проверка вътрешността на хашиш маса, който се нарича $ масата. Аз съм принуждавайки го в малки букви, като се обадите функция доста сходен tolower () в C, но това прави цялата дума, не един символ. И ако това е зададено, с други думи има е зададена стойност, с други думи, ако това е вярно, тогава да, това е думата. Защото аз го слагам там с товар (). И ако не, аз ще се върне фалшиви. Сега другите са лесни. Функция размер (), как мога да направя това? Аз основно се връщат $ размер. Но технически трябва да направите това досадно нещо. И всъщност се чуе, бях рязане единия ъгъл твърде много. Наистина трябва да се направи глобална $ масата. Но това се каза, разтоварване). Разтоварване () е невероятно. Функция разтоварване (). Как искам да приложи разтоварят (?) Готово. OK. Така разтоварване (), управление на паметта е напълно се погрижили за вас в нещо като PHP и много на по-високо ниво езици. Така че това е невероятно. Харесва ми защо, по дяволите, сме прекарали миналото плюс осем седмици за писане C очевидно много бавно, наистина времето консумират проблеми с десетки часа на работа по нашите колани? Е, за едно нещо, това може да работи Глобата за малки програми. Това със сигурност ускорява ми времето за разработка. Но нека да видим какво ще стане в реалния свят. Нека да отидат в тази директория в терминал. Има правопис. И забележи Като настрана, и може да са срещали този проблем в комплект шест или седем определен проблем. Не стриктно трябва да края PHP файлове с. PHP. Ако сложите ред като че първата такава оценка на самия връх, това е специална линия на синтаксис, който по същество означава, че на програма, наречена PHP и да го използвате, за да тълкува този файл. Така че сега никой не знае, че Бягам на PHP програма. Мога да го стартирате просто като че ли бяха нещо, съставен в C. Но тук е нещо. Всъщност, нека да го направим отново. Dropbox/pset6 /. Има правопис. OK, 0.44 секунди. Тя има по-бързо този път. Сега нека да отидат в PHP версия. Хубаво докосване. Но просто мисля, колко време Спасих в работно време. OK. Така че 3,59 секунди, което всъщност Не звучи точно от двамата. Но това е, защото дълга история кратко, , когато сте отпечатване на огромно количество неща на екрана, че се забавя нещата. Какво е това наистина е процесора в на уред е 3,59 секунди, в За разлика от C, която е взела 0.44 секунди най-скоро. Това е наистина един ред по отношение на величина различно. Е, къде е тази цена идва? Защо е толкова много по-бавно? Защо PHP изпълнява толкова зле? Даниел? ПУБЛИКАТА: Вие всъщност не използвате хеш таблица. DAVID Malan: Аз наистина не използвате хеш таблица. Така че аз вид направих. Така че това е асоциативен масив. Най-вероятно, ако хората в PHP са наистина умни, те са използвали под качулка действително хеш таблица, приложена в нещо като C или C + +. Но. Да. ПУБЛИКАТА: [недоловим]. DAVID Malan: Да. Така че всяка една от функциите, които съм написал сега - всъщност, може ли да се каже, че по веднъж малко по-силно? ПУБЛИКАТА: Всеки от функциите, които сте включили има много по-пълна капацитет, отколкото - DAVID Malan: Така че това е много вярно. Има много по-отгоре, че сме наистина не виждам, като се фокусира само върху dictionary.php, което аз току-що написах. От друга страна, има цяла преводач става във фонов режим. В действителност, когато се натъкнах на тази програма, тя не е действал, събрани нули и единици проектиран за моя Intel CPU. Напротив, той е действал ред по ред PHP код, който изглежда точно като сме го въвели. И така всеки път, когато използвате интерпретиран език, можете всъщност плащаме тази цена. Това ще отнеме известно време, за да прочетете вашия файл отгоре надолу, наляво, за да Добре, и после за изпълнението на всяка Онлайн отново и отново. Сега в действителност, особено в интернет, всъщност може да се ускори този процес от кеширане на резултатите от PHP код се интерпретира. И това има смисъл в интернет, тъй като ако не сте един потребител като ме тук, но 1000 или 10 000 потребители, а след това Може първи път файла е преглеждана това става бавно, но след това това е много по-бързо. Но това също, отново, е компромис. И за нещо подобно на данните от научните изследвания настроен, или дори нещо голямо като това, потребителите в крайна сметка ще започнете да се чувствате, че забавяне. Така че по-кратко, тълкува езици са много на мода, много популярен, и честно казано, са може би вие езици трябва да достигне, когато решаването на проблемите след CS50. Но осъзнавам колко сте наистина приема за даденост, намираща се под капака наистина тези последните няколко седмици в хеш таблици, и дървета, и се опитва, които се използват в крайна сметка действително приложат неща като отворена скоба, квадратна скоба, която можем сега с благодарност приемаме за даденост. Така че нека да погледнем сега в този уеб контекст. И споменах миналия път, че има куп свръхглобални в PHP, че наистина не са от значение в командния ред. Те са по-подходящи в контекста за използване в PHP уеб контекст. Така работи PHP на уеб сървър, за за генериране на подобни неща HTML. И ние погледна $ _GET и $ _POST, и това е, когато автоматично потребители " вход завършва просто ако подадат образуват във файл завършва на. PHP в уеб сървъра като уреда. Но нека да разгледаме накратко $ _COOKIE И $ _SESSION. От гледна точка на лаик, какво е бисквитка, като можете да го разбере в контекста на с помощта на интернет? ПУБЛИКАТА: файл на компютъра. DAVID Malan: Да. Това е файл на компютъра на потребителя засадена с каквото уебсайт се случи да посетите. Така че, когато отидете на Facebook, когато отидеш да bankofamerica.com, когато отидеш до google.com, когато отидете на почти всеки уебсайт в света тези дни, включително cs50.net, бисквитка е засадена на вашия компютър, която е или стойност, съхранявана в RAM във вашата компютъра в паметта на браузъра си, или понякога наистина е файл, съхраняван на вашия твърд диск. И това, което е обикновено се съхраняват в този файл не е вашето потребителско име, не ви парола, обикновено не е нещо, чувствителен освен ако сайта не е толкова добре с тяхната сигурност, а по-скоро това е голям уникален идентификатор сред други неща. Това е голям случайни числа засадени на вашия компютър, но можеш да се сетиш като нещо като виртуален печат ръка като от клуб или някакъв увеселителен парк, който позволява на служителите, собствениците на които услуга, за да си спомня кой сте. Така че, ако на големия случайно число е като 12345678, въпреки че е очевидно не е твърде произволен, мисля за това, тъй като ръка печат, че когато посещавате facebook.com за първи път, те подпечатва този номер на ръката си. И след това, защото вие говорите HTTP, вие е браузър, и защото Facebook очевидно говори същото като уеб сървър, протокол HTTP, казва, че по всяко време след това, посетете facebook.com, независимо дали това е втори по-късно, един час по-късно, дори и на следващия ден, толкова дълго, колкото ви е нужно изрично Излязохте, които ефективно е като измиване на ръцете. HTTP казва, че трябва да представите ръка печат всяко ваше време се върнете към този сайт. Какво Facebook след това се е, че те погледнете, че ръката печат и казват те, о, 123456789. Аз не знам на пръв поглед, че това е David Malan в Кеймбридж, Massachusetts, но те могат да проверят своята база данни и да кажа, о, лицето на чийто компютър засадихме 123456789 е David Malan от Cambridge, Масачузетс. Нека покажем, че потребителят след това профила си страница или негов News Feed. Но има един проблем тук, ако това е как наистина работи в интернет. Нека да разгледаме един бърз пример. Нека действително отиде да каже facebook.com. Но преди да можем да отидем там, да ми давай напред и да се отворят на Chrome Инспектор тук. Нека да погледнем в раздела мрежа. А сега да вървим напред и да въведете в https://facebook.com. И аз правя това, така че ние не виждаме всички тези пренасочвания и отпадъци време в търсене чрез тези. Нека ме удари влиза. Добре. Ние виждаме цял куп искания. Идва Facebook. Има цял куп файлове. И тук, на моето споменаване на последно време латентност, че е много HTTP заявки. Но първият е вероятно най-интересното. Така че нека да превъртите надолу, тук, и Ще увеличите в секунда. Това ще бъде един вид бъркотия, но нека да видим. Facebook ни изпращаща цял куп неща. Но чакай, интересно. Те засаждане не един, а четири ръчни печати върху ръката ми тук. Set-бисквитка, Set-бисквитка, настройка бисквитка, настройка бисквитка. И има няколко функции тук. Всички от тях спомена някои вид на годност. И изглежда, че Facebook се надява да ме помниш до 2015. Така че това е вероятно момента, до който Трябва да излезете или те просто ще автоматично се предположи, че съм няма да се върне. Така че това е действително един достоен период от време. А има и някои други неща се случват тук. Бисквитката изглежда насилствено заличава като казва, че е изтекъл през 1970 г. преди съществували бисквитки. Така че браузърът е просто ще да се предположи, OK, това е все едно измиване печат на ръце. Но сега, когато навигаторът ми прави последващо искане - позволете ми да отида напред и да направите това отново и презареждане. Сега нека да превъртите обратно до Съвета за топ искане и слизат тук, да поиска заглавки. Забележете това. Така че сега аз съм под заглавията не реагиране, но забележите, че казва заглавки на заявки. И забележете, че браузъра си, като част от искането си, след като удари презареждане има изпрати най-малко следните информация. Не настройка бисквитка, но бисквитка. Така че това е линията, заглавката HTTP така да се каже, когато навигаторът ми е нещо , без да ми знае, че това представяне ръката ми за проверка на Facebook. Така че тези бисквитки могат да бъдат използва след това за какво? За да си спомня кой си ти, или си спомня как много пъти съм бил там, или наистина нищо. Така че тук е counter.php. И нека да увеличите шрифта. И всеки път, когато презареди тази страница, бележка тя си спомни колко пъти Аз съм бил там. Е, това не е всичко, което впечатляващо. Нека просто да затворите този раздел, а сега нека се върнем към http://localhost/counter.php. О, това е интересно. Тя все още помни, дори макар че аз затворих раздела. И честно казано, ако затворите браузъра, ако се изпълнява по правилния начин, аз все още може да си спомни, че този потребител заслужава кой е той или тя за първи път, и само веднъж и да отида в менюто на Chrome, която тук е тук, и да отидете История и щракнете Clear Browsing Data, Както някои от вас може да имате в Минало, само тогава ще бисквитките действително да бъде заличена по време на Мрежата развитие. Така че, ако се върнем - нека затворим Gedit тук. И ако се върнем сега към този файл. Позволете ми да отида в нашия vhosts / Localhost / публично, и позволете ми да направя counter.php. Забележете, че това е доста проста програма. Това е доста прост сайт. Така че в началото на файла е само на коментари. Но ето един нов ред, който може да са видели вече в р-настроите седем, session_start (). Това е една линия на PHP код, който по същество казва на уеб сървъра, правят забравяйте да изкорени ръце и да направи забравяйте да проверите ръчни печати. Това е всичко, тази линия прави, и го прави всичко на този процес за нас. Тогава забележите Просто имам два клона тук. Ако ключът за борба вътре в този специален глобална променлива, наречена $ _SESSION Е настроен - с други думи, ако има някаква стойност там - нека си го получите и да го съхранява в локална променлива с име $ брояч. Иначе, нека да присвоите $ брояч стойността по подразбиране на 0. Сега тук е един от аспектите на PHP, че е едновременно благословия и проклятие. PHP е малко небрежен. Така че, докато в C, Какво би обхват на борбата са били тук или тук? Тя щеше да бъде ограничено към тези фигурни скоби. Познайте какво? В PHP, тя съществува дори извън тези, фигурни скоби, тук и тук, и тук, и тук, и дори по-долу. Така че аз казвам това е благословия в смисъл, , че не е нужно да се мисли като трудно, както направихме преди седмица. Но тя също е малко на проклятие в тази без значение къде се използва променлива в PHP, най-малко в една програма като тази, това е глобално достъпна за добро или за лошо. Така че трябва да се има предвид, че сега променливите си не може да бъде дефинирано. Може би сте ги определили другаде. Но какво ще правя в крайна сметка? Отивам да се съхранява вътре, че глобалното променлива като стойност на брояч въведете резултата от прави брояч плюс един. Така че това е просто аритметика , който прави incrementation на този брояч. А фактът, че аз съм съхраняване че стойност обратно в тук е средство за същество актуализира базата данни за не забравяйте, че потребителското 123456789 е тук два пъти. И когато го направим отново следващия път, когато презаредите страницата, че ще ходи да се провери ръката ми печат и да кажа, о, потребителското 123456789 има сега тук от три пъти. И така, какво PHP и други подобни езици се прави за нас е, че те са фигуриращ как, къде и за колко време за съхраняване на ценности в този специален свръхглобална. И това свръхглобалните следващия път I посетете страницата е нещо като магически предварително населена, изпълнен със стойности, които бяхме там за последен път сте посетили, дали това беше преди секунди, една седмица Преди, или през 2013 г. и сега се говори около 2015. PHP и уеб сървър се грижи на всичко това за вас. ПУБЛИКАТА: [недоловим]. DAVID Malan: Променливи в PHP са по същество винаги глобален, освен ако не ги декларира вътре в дадена функция, и след това те са локални за само функцията. Но тъй като аз не съм написал нито един функции, сега те са ефективно глобално през целия ми файл тук. ПУБЛИКАТА: Има ли начин да ги направят местен? DAVID Malan: Има ли някаква начин да ги направят местен? Само от тях опаковане в функции. Което в най-новата версия на PHP, можете да направите това с анонимен функция. Но повече за това, че в контекст на JavaScript. Но Краткият отговор е не. По-дълъг отговор е да. Ница. Добър викторина въпрос. Добре. Така че накрая, на самата страница е всъщност е доста прост. Забележете, че след като аз излезете PHP режим, отзоваване че всички тези неща надолу по-долу е просто ще се изплюе от сурова към браузъра. Което е добре, защото аз искам да изпратите потребителят някои HTML, но аз искам динамично да се актуализира, че HTML. И един начин да направите това е да сортирате на много бързо пуснете обратно в PHP режим, използване отворена скоба въпросителен знак знак за равенство, а след това на изхода на стойността на брояч. Или, ако това изглежда малко загадъчен, този знак за равенство е всъщност само някои синтактична захар за това ФОРМАТ ($ брояч). Но честно казано, това е само малко по-грозна и малко досадно да пишете. Така че много добре PHP предлага тази функция където може просто да го кажа по- накратко по същия начин. Така че това, което става под качулката? Нека най-бързо да потърсите в мрежата раздела тук за counter.php. И нека да вървим напред и първа нека да изчистите бисквитките. Нека е ясно, тъй като данните за сърфирането началото на времето. Сега нека се върнем тук. Сега нека да се презарежда страницата. И аз съм обратно на нула. Защото ръката ми печат е била измита, Сега получите нова бисквитка. Всъщност, ако погледнем в раздела мрежа и погледнете заглавията на отговор, известие че уредът ме изпраща бисквитка, чието име е донякъде произволно, но вид разумно, PHPSESSID. И това ме изпращане на тази наистина голям случайни числа. Това не е доста голям брой. Това не е съвсем в шестнадесетичен вид. Това е някакъв вид на буквено-цифров низ, но се предполага, че е случаен. И това е печат на ръката, така че да говори, че аз съм, отнасящи се до. В същото време, ако щракна презареждане и след това погледнете тази втора линия за моята втора искане, сега, че молбата ми заглавията включват PHPSESSID равнява на тази, Не настройвайте-бисквитка, но просто бисквитка. И това е моята презентация на браузъра от ръката ми печат. Така че сега като закачка, и ние ще говорим повече за това в една седмица или така, но по какъв начин това да направите уязвими, вашият Facebook акаунт уязвими, и други такива сметки уязвими? ПУБЛИКАТА: Ако някой има бисквитка. DAVID Malan: Да, ако някой има си бисквитка. Искам да кажа, наистина, много прилича на някои от вас може да са се опитали най-като клуб или увеселителен парк, ако се опитате нещо като това да копирате печата, макар и назад върху ръката на друг човек, и тогава той или тя го представя като собствената си, ако тя действително изглежда идентични, 123456789, тогава мрежата сървър е очевидно просто ще Вярвам, че този потребител, си ти. И това е наистина фундаментален заплаха всеки път, когато използвате бисквитки защото, ако някой просто така да се Пародии говорим си бисквитка, разбере какво е, или чрез наистина да го копирате , като погледнете в компютъра си и е като, OK. Бисквитка David е JJ3JIK и така нататък, и след това те са достатъчно умни, за да знаят как да се подреди на ръчно изпращате че бисквитка от браузър или от програма те пишат, те биха могли напълно влезете в уеб сайт, като теб. Това не е толкова трудно да се преструвам, да бъде някой друг, освен ако ние отново р-комплект две, което въведе какво? ПУБЛИКАТА: криптографията. DAVID Malan: Малко малко на криптографията. Simple криптография, поне в стандартно издание, но крипто все пак. по-малко. Така се оказва, ако криптира цялата тези заглавки, използвайки нещо, което сега може да знае по-известна като SSL, Secure Socket Layer, или https:// URL адреси, След това всички тези неща, които ние сме били поглеждайки всъщност са криптирани, което означава, че тя е като теб не може да чете печат на ръката. Само facebook.com може или google.com, или в този случай, уредът може да Четох, че ръката печат. За съжаление обаче, и отново, това е твърде подходящо с нещата НСА на края, дори SSL е чупливо. И това всъщност не е толкова трудно дори да се справи, че криптирането. Не толкова от напукване на криптирането но от надхитри браузър в декодиране данните преждевременно. Но отново, ние ще ви дразни с които не след дълго. За сега, просто се страхува. Това е трагично нещо вярно. Добре. Така, откъде идва това сега ни остави? Е, нека го направим. Да вървим напред и да се бърза закачка, преди да си вземе почивка. И мисля, че ние ще се бавим малко по-дълго днес, но ние ще се потопите в нещо съвсем ново и секси, която ще загрявка за още повече. Така че това е закачка. Така че, SQL, ние започнахме да говорим за все така накратко последен път. Наистина ще си изцапаш ръцете с част от него в р-комплект седем. И от гледна точка на лаик, какво прави SQL - S-Q-L - направя за вас? Какво е това? Да. Публика: Да те достъп до данни. DAVID Malan: Да. Това нека да има достъп до данни в база данни. Structured Query Language. И това е по същество език за програмиране. Не са характеристики на това, че ние дори няма да използват в клас. Но вие може ефективно да определят функции. Наричат ​​се съхраняват процедури SQL. Но ние ще се запази сравнително лесно и просто я използва за някои основни операции като избор на данни, въвеждане на данни, актуализиране на данни и изтриване на данни. И наистина може да се мисли за база данни, като база данни SQL, като просто е Microsoft Excel. Тъй като SQL отнася до релационна база данни, когато връзка просто означава, таблици. Редове и колони. Така че всичко, което можете да поставите в електронна таблица подобен на този или Google Docs, бихте могли да поставите в база данни SQL от обявяване на масата. Сега, как всъщност достъп тази информация? Е, с команди или запитвания по този начин. SELECT, вмъкване, обновяване и изтриване. И по-голямата част, тези, които са четири единствените съставки, които ще трябва да направи нещо доста силно в проблем определени седем. Сега през деня, нали всъщност взаимодействат с база данни, в черно и бяло терминален прозорец в мигащ бързо по този начин. И на базата данни, че бягаме от Уредът се нарича MySQL, което е безплатен и с отворен код за база данни. Ако Google и прочетете Wikipedia статия, вие ще знаете, че името е малко преход за някои версии на Linux. Maria база данни е всъщност вилицата така да се каже на MySQL. Накратко, Oracle купи MySQL. Oracle е голяма компания. Хората са притеснени, че ще вече не съществуват толкова отворен код, така че това е просто копие на MySQL, че е все още е свободен, все още отворен код, и инсталирани в Fedora Linux по подразбиране. Но това е нещо като болка в врата да се запознаят с база данни по този начин. Така че ние включваме в уреда CS50 безплатен отворен код инструмент, наречен PhpMyAdmin. Просто съвпадение, че това е писано в PHP. Не е фундаментална необходимо за PHP тук. Но това е само на уеб-базиран инструмент, който ние свален абсолютно безплатно, инсталирани в уреда, която ни позволява да имаме графичен потребителски интерфейс, с която да проучи р-комплект седем база данни с които да създават нови бази данни, казват за вашия собствен окончателен проект, ако искате харесва, и в крайна сметка създават динамични сайтове като CS50 финансите които ви позволяват да заявки за данни и актуализират данните динамично. Вие не ще трябва да се използва само обикновен текстов файл или CSV. Всъщност можете да използвате смарт база данни програма, така че да могат да изпълняват по- сложни заявки не само четене през всичко линейно. Така например, това е, което ние даваме ви от кутията за р-комплект седем. Това е таблица с очевидно по-малко три колони, един от които е потребителско име, една от които е хашиш, а другата от които е ID. Но интересното, и само за да разнищват една мисъл тук, потребителско име е вероятно вече е уникален, нали? Искам да кажа, най-всеки уеб сайт, ако имате потребителско име, там не може да бъде два Caesars. Не може да има две Malans. Не може да има две jharvards. Уникалното му. В противен случай, те не знаят коя jharvard е в действителност. И така, какво може да е мотивация за също като трета колона в ляво там нарича ID, което изглежда като номер, който е уникален по същия начин? Той се чувства малко съкратени на мен на пръв поглед. Защо може да бъде убедителна да има не само уникални потребителски имена, но също така и уникални номера? Публика: Те биха могли да имат една и съща парола. DAVID Malan: Хората могат да имат една и съща парола, разбира се. Това може да се случи абсолютно. Но ако те имат това уникално потребителско име, I биха казали, че това не може да кажем, въпрос, защото, ако не въведат в тяхната потребителско име, аз само трябва да се провери тяхната парола, техните хеш него. Защо иначе? Публика: По-бързо търсене. DAVID Malan: По-бързо търсене. Защо? Публика: ID е само един. DAVID Malan: ID е само един символ, или по-точно, това е номер, така че е вероятно 32 бита или нещо подобно. Като има предвид, потребителско име, очевидно Jason Hirschhorn е там е нещо абсурдно дълго, и че ще ми отнеме много повече време, за да низ за сравнение H-I-R-S-С-Н-Н-О-Р-М, а може би а / 0 или нещо подобно, за да да търсите Джейсън, за разлика от просто каза ми даде ръководство за номер две. Това е 32 бита. Това е един INT, че имате за сравнение. И наистина, това е точно защо бази данни са склонни да присвоите уникални идентификатори за редове в тях. Сега това, което другите типове данни са там Освен INT и очевидно струни като този? Е, за да бъде по-правилно, SQL бази данни, като MySQL, са CHAR полета. И ЧАР малко подвеждащо не е единичен CHAR. Поле CHAR в база данни MySQL е един или повече знаци, но това е фиксиран брой знаци. Така например, ако отида да PhpMyAdmin, тъй като може да има вече, или скоро ще създаде проблем, седем, и аз отивам в моята база данни, а просто за забавление, нека да създадете нова таблица, наречена тествате само с две колони. Тогава аз ще кликнете Go. И това ще стане доста познато, особено като си калайджия около по своему. Тук може да въведете ID, за да създадете нова таблица от тип INT. Но тук бих могъл да въведете потребителско име, за да пресъздаде, че по-рано маса. И забележи Имам цял куп на видове, за да избирате. И това също е защо PhpMyAdmin е нещо хубаво. Това е вид на самообучение, че може просто вид на точка и кликнете, и погледнете падащи менюта, и заключил от че това, което ви дава правомощия SQL. И наистина, ако избера CHAR, аз след това трябва да определят продължителността, или как много стойности, колко символа. Така че много общи ценности са неща, като 255, но това е малко по-дълго. Често е осем за потребителско име. Но това е малко по-малки, тези дни. Така че това е решение за дизайн. Дали е 8 символа, 32, 255, 1000? Това е наистина зависи от вас. Но поле CHAR е фиксиран номер. Така че изберете твърде малко, а ти си вид прецакани, ако искате по-дълго име. Изберете твърде много и това, което е В посока надолу? ПУБЛИКАТА: [недоловим]. DAVID Malan: Това е разточително. Точно както в C, ако имате по-голяма парче памет, отколкото ви трябва, вие сте просто губене на време и губи пространство. Така като алтернатива, съществува VARCHAR, който решава този проблем, като лечение на дължина, не като фиксирана дължина, но като максимална дължина, и се използва променлив брой символи, които след това има тенденция да се използва само като много символи като вас действително се нуждаят. Това звучи перфектно. Защо не можем да се отървем от Данни CHAR тип тогава? Какви могат да бъдат в неблагоприятна посока на използвайки VARCHARs, което звучи като това е хубава победа? Да? ПУБЛИКАТА: [недоловим]. DAVID Malan: Добре, добре. Така че, ако всички ваши данни е същата дължина, какъв е грижа? ПУБЛИКАТА: Защото ти си губиш данни от всички тях казвам. DAVID Malan: Така че, ако всички ваши данни е със същата дължина, все пак, бих казал, че посочите максимална дължина на VARCHAR е по-различно от задаване на фиксирана дължина на CHAR ако Вие знаете, че редица по-рано. Но там е наистина, и аз ще вид извлечете от този отговор реалността че все още има максимум, което би могло да бъде досадно, особено ако натъкнете на име на човек, който е необичайно дълго време, че не си го направил предвиждане. И тя също е малко по-малко ефективно действително да се търси в VARCHARs като за разлика от търсенето символа, особено за дълги таблици, които имат много и много данни. Така че тук също е тематична отново няма очевиден избор. Така че, само за да ви даде усещане за друга типове данни, които могат да бъдат от интерес или за р-определя седем или в бъдеще, има INT. Има BIGINT, които е като дълго, дълго. Тя има тенденция да бъде 64 бита. Има DECIMAL, които ще видите в набор проблем, който е много чисти отговор на проблемите, с които срещнали с плувка и плаващ посочи неточности. И тогава там е DATETIME. Има буквално тип данни, който има да изглежда като година, месец, ден, и час, минута и секунда. Но SQL бази данни също имат неща, които ще наричат ​​индекси. И индекс е нещо, което укажете при създаването на таблицата, за да правят претърсвания и други операции по-ефективно. По-конкретно, че има нещо, наречено първичния индекс, който бихте могли да Декларирам, както следва. Ние направихме това за вас с маса потребители ние ви даваме. Но забележете, ако аз бяха ръчно пресъздаване таблицата на потребителите тук давайки това име на потребители. Аз вече определено ID. Аз определено INT. Аз определено потребителско име с максимално 32 символа. Но ако продължавате да превъртате, в това сравнително широк прозорец, известие, че има куп други неща, които могат да определят. One, не мога да се уточни атрибути като, знаете ли какво, това INT трябва да бъде грозен. Аз не искам отрицателни числа, така че нека го направим по-грозен. Null не е от значение тук, защото Аз искам всеки потребител да има уникален номер. Аз не искам това да се счита за нищожна. Но това е интересно. Мога да се уточни, че ID е или първичен ключ на тази база данни, или това е уникален, или това е индексиран, или пълен текст. Така че за днешните цели, дълга история Накратко, PRIMARY означава, че това ще бъде концептуално, така и технически областта, която ние използваме за да може еднозначно идентифициране на потребители. Така че, когато ние с нетърпение до потребителите, това е нещо като на обещание да ги търсите най-вече от този уникален идентификатор. И на базата данни ще се гарантира, че ако имате потребителски номер 3, не можеш физически вмъкнете друг потребител със същия номер 3. Базата данни просто ще откаже да запазите промените. Което е добре, защото можете защитят себе си от себе си. същност Алтернативно, за потребителско име. Така че на втория ред, изземване, е полето за потребителско име. Така че на втория ред тук е потребителско име, както направихме в левия там. Така че какво друго бих могъл да искам да посоча? Не ми е позволено, според SQL, да посочите две първични ключове. можете да укажете съвместна ключ, където можете Посетете двете полета, но те не могат индивидуално бъде първични ключове. Така че това е вън от въпроса. Така че, който може да искам да избера? Е, UNIQUE е подобна в дух на първичен ключ можете да зададете този полето трябва да бъде уникален, но е не ще бъде един Аз използвам през цялото време. И ние няма да използвате този един всички времето, поради каква причина отново? Това е по-бавно, ако потенциално това е дълга потребителско име. Това е просто загуба на време. INDEX, междувременно, се уточнява, че това е няма да бъде уникален, но бих искал да работят магията си под качулка да стане по-бързо за мен да търси в тази област. Така че това вероятно не е от значение тук. За потребителско име, щях да твърдят, че UNIQUE е добър отговор. Но да предположим, че сме направили потребителите по- интересно, отколкото само на потребителски имена, хешове и ID номера. Ами ако дава на хората трите имена? Какво става, ако им даваме адреси и други данни за тях? Е, ако се уточни, че на колона в Базата данни се индексира, това означава, че MySQL или Oracle, или каквото и база данни който използвате, трябва да работи магията му и използват някакъв вид фантазия данни структура като дърво, или Trie, или хеш таблица, или нещо, което да гарантира че когато търсите за данни, използвайки изберете по тази конкретна област - харесва ми покаже на всички, че живее на улица Оксфорд Стрийт. Заявка подобно. Ако сте задали предварително, че искате индекс на тази област, търсено ще бъде много, много по-бързо. Ако не зададете индекс, най-добрият можете да направите, е линейна търсене, ако това не е сортиран. Но ако посочите INDEX, смарт хора, които са направили на базата данни - хора като вас, които сега знаят дървета и се опитва и хеш таблици - автоматично изграждането на такава информация структура в RAM за да се уверите, че тези търсения са много по-бързо. Пълен текст междувременно е подобна по дух, но ви позволява да направите маска търсения, харесва ми покаже на всички, че живота на улиците, които започват с буквата O, независимо от причината. Можете да направите заместващи търсения харесва. Или по-непреодолими неща като шоу мен всеки, който има думата - Покажи ми всички, чието име започва с определена буква. Можете да търсите по ключови думи по този начин. Добре. Така че, дизайн възможности има потенциално. Има и други, че ще махна с ръце. Оказва се, че може да има различни двигатели за съхранение. И това е по-мистична, отколкото е необходимо сигурност за проблем определени седем. По подразбиране, вие използвате нещо, наречено InnoDB. Ще видите споменаване на това някъде в интерфейса за управление е най-вероятно. Но знаете, че има друг дизайн решения, които са от потенциален интерес идват окончателните проекти, ако правиш нещо, уеб-базирана. Но нека го направим. Да вървим напред и да направим тази на екрана като закачка за историята участието ви, съквартирант, и чаша мляко. Нека да дваминути или така пробие тук. И ако можете да си наоколо, нека дойде обратно, изглежда малко повече на SQL, и След това малко JavaScript с р-определени осем в ума. Добре. Така че, нека да си мислиш за При ъгъл, че може много лесно да възникнат в контекста на използване на база данни или честно казано, дори при използването на реални неща света като банкомати, за да получите пари. Така че тук е хладилник. Да предположим, че имаме една твърде в общежитието или къщата си. И имаш един съквартирант, и двете наистина желаете мляко например. Така ти се върнеш от клас един ден. Той или тя не е все още назад. Отваряш хладилника. Наистина ли искаш голяма чаша мляко. Не е мляко. И така, какво ще направиш? Затваряте хладилник. Вие вземете ключовете си. Излизаш на площада. И ще получите на опашка в CVS при тези самостоятелно касата неща, които винаги отнеме повече време, отколкото в действителност като касиери. Във всеки случай. Така че тогава, междувременно, точка точка точка, вашият съквартирант се прибира вкъщи и той или тя По същия начин има копнеж за мляко. Така че той или тя отваря хладилника, изглежда отвътре, и о, по дяволите. Не мляко. Така че той или тя тръгва, се случва да отида на другите CVS, която е само пресечка по някаква причина, и той или тя получава в съответствие да си купи мляко. Междувременно се върне у дома, той или тя дойде у дома, и това, което правя Вие в крайна сметка има? Два пъти повече мляко. Но наистина не се харесва мляко, което много. Така че сега имате толкова много мляко, което сега един от тях е отивал кисел в крайна сметка. Така че това е наистина лош проблем. Така ли е? И така, какво се е случило? Така че основно, това е вид на нелепо например. Но под капака, това, което сме имали се случи и тук е и на двама ви проверяват състоянието на някои парчета памет, хладилник. И двамата проверява състоянието на някои променливи. И двамата си пое заключение че тогава действал. Но за съжаление, докато си съквартирант е в магазина, състоянието на които променлива промени, той или тя се върна и сега иска да се промени държавата, но тя вече е променена на него или нея. И разбира се, той или тя няма да има отиде до магазина, ако те са знаели които вече са били на път. Така че в реалния свят, как можа се избегне този проблем, като се предполага че имате хладилник, може да има съквартирант, и всъщност като мляко? Публика: Да общуваме. DAVID Malan: Да общуваме. OK. Но как може да комуникирате? ПУБЛИКАТА: Оставете бележка. DAVID Malan: Остави бележка, нали? Винаги оставяйте бележка, за феновете на шоуто. Добре, така че винаги оставя бележка, или сложи наистина като катинар или нещо на вратата на хладилника, която поддържа вашия съквартирант от проверка на състоянието на тази променлива. Сега, защо това може да бъде уместен за проблем създаде седем, или да банкомати. Е, представете си един свят, в банкомат, където може да успеете да отидете до банкомат машина тук, а друг ATM тук. И това се случва доста често. И предполагам, че е имал два АТМ карти, което е възможно да се получи. И вие влизате в двете машини ефективно едновременно, да се надяваме Макар че никой не гледа. И тогава въведете във вашия PIN приблизително едновременно. И след това да направите заявка за баланс , за да видите колко пари имате. И нека да кажем, че имате $100 оставен в профила си. Така че по същество едновременно, можете казват едно, нула, нула, въведете. И да се надяваме да се върнем малко пари. Но колко пари може да се върнеш? Сега компютри в края на деня, особено ако говорим за сървъри, не е задължително да правят неща в реда, в който се очаква. Така че предполагам, че това, което се случва, защото на каквито мрежа скоростта въпроси там са, или въпроси CPU има, или нещо подобно, да предположим, че първо ATM проверява равновесие и вижда, о, този човек има $ 100. Но след това е разсеян, защото може би резервно копие се случва и затова е забавя. Или може би, докато проверявате, мрежата връзка имам малко по-бавно, тъй като това просто се случва. Те са физически устройства. Така че, междувременно, втората банкомата е задават едни и същи въпрос. Колко пари David имате? $100 Е отговорът. Но тъй като първият банкомат все още не е изпратил съобщението се изважда 100 щатски долара, както Банкоматите са инспектирани трезора на банката, видим там 100 долара там, и сега двете машини са потенциално ще изплюе отговор. Сега, това е чудесно за вас в някакъв смисъл ако това, което банката прави в крайна сметка се променя размера на минус 100 от задаване на променлива, равна на банкова сметка, равна на 0, за разлика от да правиш минус 100. Сега в най-лошия случай за банката - или в най-добрия за банката, междувременно, те ви дам $ 200, и банковата си сметка сега показва отрицателна $100, Които наистина не прави се възползват вас изобщо. Но въпросът е, че това състезание условие за две съквартирантки стават мляко, или за две банкомати, които се опитват да получите пари и промяна на състоянието на трезора в същото време съществува нито време имате база данни. Сега в проблем създаде седем, този въпрос възниква в смисъл, че ако си купите акции на Facebook склад, и след това за Например купувате втори дял от Facebook склад, трябва да се направи решение като програмист. За да се реши как да се актуализира база данни, шансовете са ти започваш да се има един ред за този запас, и това е един от начините да го приложат. И ти започваш да има право на един дял на FB, която е техният символ на акция за това потребителско име, или този потребител ID, уникалният идентификатор. Но същата история може да се случи тук. Ако го направите SELECT в SQL, както ще видите в проблем създаде седем, когато те видя, О, Дейвид има една акция на Facebook склад. Позволете ми сега да се промени това, за да бъде два броя акции, защото той иска да си купи втората акция. Но предполагам, че Дейвид всъщност имаше две прозорци на браузъра се отварят, или се предполага, че това е една обща сметка с двама съпрузи, и двете от тях се опитват да изпълняват на една и съща операция, има също на съществува потенциал за решение да бъде извършва въз основа на предишната състояние на света - сметка има една акция - и двете хора, или и двете сървъри, сега опитайте се да кажа, че нарастване на две акции. Но в този случай, може да се зарежда ми пари и за двете акции, но увеличен само, че едно време. Така че по-кратко, основният проблем и тук, както с виц за напускане на имайте предвид, или поставяне на катинар върху него, е Ако двама души или две теми - мисля, че обратно към нулата - да инспектира състоянието на някои променлива и след това се опитват да променят тази променлива, но тези две неща не се случват в В същото време, но може да се прекъсва от други неща, които се случват, данните могат да получите в много странно състояние. И вие може да се ползва или може да пострада в смисъл на примера пари. Така че в определен проблем седем, ние ви даваме този един ред с код, който дълго Казано накратко, решава този проблем в MySQL. Това много дълго инструкция, която не прави дори се поберат на една линия върху екран тук гарантира, че вашата работа е това, което се нарича атомен. Всичко това се случва веднага, или това не се случи на всички. Това много дълго изречение не може да се прекъсва частично. И това, което той прави, е буквално това, което казва. Поставете в някаква маса следното три области тези специфични ценности, но на дубликат ключ, не правете вложка. Направете актуализация. Така че това е все едно да правиш SELECT и INSERT така да се каже по едно и също време. И това, което е ключът, който е вероятно се наричат ​​тук? Оказва се, че и вие ще видите това в проблем създаде седем е спекулация, защото ние сме там, за да бъде обявен за уникален ключ на тази маса, така че не може да има няколко реда за един и същи потребител с същия символ стотинка състав - в този пример тук, DVN.V е глупаво стотинка състав, който ние вижте в спецификацията. Защото ние сме декларирали, че тя да бъде уникален, Какво означава това е, че ако опитайте да поставите дубликат ред, вие сте вместо да го актуализира, без да Някой друг има шанс да се промени състоянието на света, един от двамата. Така че по-кратко, това ще гарантира, нещата са атомните. По-общо казано обаче, бази данни като MySQL - и не е нужно тази функция за р-определя седем, но имайте предвид, за бъдещето - подкрепят това, което се нарича сделки, , където можете да се каже, За започване на транзакцията буквално. След това можете да изпълните две SQL отчети. И една SQL изявление, както ще видите в р-определя седем, изглежда малко нещо като това. Актуализиране на таблица, наречена сметка. Задайте колоната баланс равен на каквото и Колоната на баланс в момента е минус 1000, където е цифрата, номер на сметка, като потребителско име, е равно на 2, и след това се актуализира сметка Дот дот точка. Така че от гледна точка на лаик, какво тези два заявки изглежда да се прави в на реалния свят, чувство за банкиране? ПУБЛИКАТА: Прехвърляне към спестявания. DAVID Malan: Точно така. Прехвърляне на средства от една сметка на другия. И това е още един пример, където можете наистина искам тези две неща да се случат или не се случи. Вие не искате нещо да получите в средната от тях и потенциално обърквам по математика, или обърквам колко пари имаш, или колко пари банката има. Така че това, което е наистина хубаво за сделки в MySQL е, че и бази данни, по-общо, е, че те и интелигентни хора, които са приложени тези функции да разбера как да се направи сигурен, че и двете от тези неща се случват или изобщо не. И ако наистина сте се стремят да направят уеб сайт, който се използва от хора на кампуса, хората в реалния свят, правят нещо в смисъл на стартиране, те са видове проектни решения, които стане някога толкова важно. В противен случай, да започнете да загубите данни, губят потребители, или в най-лошия случай, тъй като сме виждали тук, потенциално губят пари. Така че отново, повече за това в определен проблем седем, както и може би някои от ти в крайните проекти. Така че нека да се промени тази картина имахме миг преди просто в още един начин. Така че нека всъщност да видим дали мога - Не, че го няма. Ето го. Така че това е мястото, където ние напуснахме за последен път. И се оказва, че ще хвърля още едно нещо в микс тук - един език, наречен JavaScript. Така че JavaScript всъщност се вписва в това парче - и аз не съм съвсем остави достатъчно място, така че това не е сега, за да мащабирате. ОК, това е наистина жалко. ОК, така че това е JavaScript. Добре. Аз съм наистина го прави лоша услуга. Добре. Така че JavaScript е друг програмиране език, и нашата последна, ако това помага уверя, че там не е много по- на пожарните хидранти тук. Така че JavaScript е интерпретиран език, което означава, че не го компилирате в нули и единици. Ти просто го стартирате. Но това, което е коренно различна с JavaScript обикновено е, че не го изпълни на вашия уеб сървър. Тя не се изпълняват в уред сам по себе си. Напротив, той се изтегля от потребителя чрез HTTP в браузъра си - Chrome, Safari, Internet Explorer, Firefox, каквото - и това е браузър, който изпълнява тази конкретен език за програмиране. Така че, за да бъде ясно, PHP до този момент е било изпълнено, в командния ред в нашия черен и бял прозорец, на предприятието на сървъра като уредът, компютър Харесва уреда, или това е било екзекутиран от уеб сървър работи на компютър. Но темата тук е, че PHP досега е изпълнен от страна на сървъра, така че потребителя и браузъра на потребителя никога не вижда линията на PHP код. В действителност, ако сте някога отвори браузър за друга вашия сайт или и вие всъщност виждате PHP код в прозореца, някой се е прецакал. Тъй като това не е писано да бъде изпраща на сваляне директно. Той е трябвало да бъде изпълнена и се обърна в нещо като HTML. Но JavaScript е по същество обратното. Тя е предназначена да се управлява обикновено вътре на прозореца на браузъра на потребителя. И какви видове уеб сайтове използват JavaScript тогава тези дни? Подобно буквално всеки популярен уебсайт. Всеки сайт, че вие ​​вероятно използват ежедневно използват JavaScript за на простият и дори най-секси черти. Значи нещо като Facebook Чат, ако използвате това. Как се работи в действителност? Ами до този момент, всички неща, които съм направено с HTML и PHP приема, че вие издърпайте нагоре URL, и ви удари Enter, и ще видите някои HTML съдържание. И като кликнете върху връзката, която променя URL, промени на страницата, и презарежданията някои ново съдържание. Кликнете друг URL, или да внесе формуляр, можете се набързо към друга страница и можете да видите някои ново съдържание. Но с помощта на нещо като Facebook Chat, или Gchat, или Google Maps, рядко прави цялата страница на опресняване, така че ще видите бял екран за миг и след това ново съдържание. По-скоро, уеб страници днес са динамично Първи актуализиран отново и отново и отново всички видове от зад кулисите. И се оказва, че когато ходят на нещо като Facebook, или Gchat, или Gmail и актуализации на страницата автоматично, без презареждане на целия екран, това, което се е случило е, че браузъра си е направил нещо като тайно допълнителни HTTP заявки - не за цели уеб страници, но само за малки парчета на данни, както и мигновено съобщение, че вашият приятел просто Вие или актуализацията на състоянието изпратено че някой просто ви, или чуруликане изпратен че някой току-що е пратил. Това е просто вземане на малки искания за данни, и след това с помощта JavaScript, този език за програмиране, за да се промени това, което уеб страница изглежда като без съгласието на сървър помага, без сървъра генериране, че HTML. Така че в кратко, JavaScript може да се използва след това да донесе не само нови данни от сървъра без презареждане цяло страница или подаване на формуляр. Тя може също да се използва за промяна т. нар. Дом - документ обектен модел - която е само фантазия начин за заявявайки, че дървото на HTML че видяхме за последен път. Така че да се успокои, JavaScript е синтактично, така че подобно на C, както добре. Няма никаква основна функция. Просто започнете да пишете кода и тя ще се изпълнява, или тълкува по-правилно. Условия ще изглеждат по този начин. Не различен от C или PHP за този въпрос. Булеви изрази или-Ед заедно ще изглежда така. Anded заедно да изглежда така. Ключове ще изглеждат по този начин. За вериги ще изглеждат по този начин. Докато линии ще изглеждат по този начин. Смятате докато примки ще изглеждат по този начин. Това е нещо ново. Така че JavaScript не е foreach изграждане на себе си, но този конструкт за променлива аз в масив, и аз в тази случай става стойност индекс. Така че е малко по-различна от тази foreach, че новите версии на JavaScript излизат през цялото време, , така че дори тези черти на езика се развива. И Като настрана, JavaScript тези дни може да се използва на сървър, както PHP, използвайки рамка, наречена Node.js. Един от TFS CS50 е, Кевин, е водил семинар по Node.js че е на разположение на cs50.net/seminars. Така че, ако сте любопитни, знам, че ти можете да използвате тази на сървъра страна като добре, но това е една сравнително нова тенденция, но мощен при това. Това е малко по-различна. Това е масив в JavaScript. И това, което ви се струва различен в сравнение с C или PHP? Има няколко бързи истории ние можем да кажем тук. Какво липсва в сравнение с PHP? ПУБЛИКАТА: [недоловим]. DAVID Malan: Да? Съжаляваме, повтарям? ПУБЛИКАТА: Не се обявява вида на променлива. DAVID Malan: Ние не се обявява вида на променлива. Така че всъщност съвсем като PHP, ние не сме определяне на видовете тази променлива. Напротив, ние сме по-генерично казвайки VAR за променлива. Ние не разполагаме с противообществените прояви на PHP е знак за долар, което, докато досадно да тип, прави по-ясно, че нещо не е променлива. Има предвид, че тук, ние сме нещо като обратно към Подход C, като просто се обадите променлива с името, което искаме да му се даде, като номера. И също като PHP, ние имаме квадратни скоби за ценности вътре в този масив. Така променливи в JavaScript също може да изглежда така. Забележете, тук това е низ, наречен S, но по подобен начин имаме не са посочени че това е низ. Тук обаче е функция, която не прави съществуват в абсолютно същия начин в PHP, но малко по подобен начин. Това е един обект в JavaScript. И обекти са сортиране на швейцарската армия Нож на структурата на данните, в които можете може да ги използва за произволен брой неща. Ето, например, ние сме за обявяване променлива наречена цитат. В зависимост от типа на тази променлива е обект. Можете да мислите за това като C структура който има ключове и стойности. Символ е ключов. FB е стойност, очевидно символ на склад. Comma. Цена е друг ключов, и неговата стойност е очевидно е с плаваща запетая, или номер по-общо в JavaScript, за $ 49.26. Така че PHP не разполага - което не сме виждали в PHP обекти доста по този начин, но ние видяхме аналогов, което е какво? ПУБЛИКАТА: [недоловим]. DAVID Malan: асоциативни масиви. Така че, докато PHP има асоциативни масиви чиито синтаксис е все така леко различен - видяхме квадратните скоби. Видяхме странни стрели символи. JavaScript има предмети, но това е предимно семантична разлика и различен синоним за сега. Въпреки това, както настрана, PHP има обекти по начин, че Java и други езици имат обекти в обектно-ориентирано програмиране. Но ние ще ги използват само за типове данни, за сега. Обекти и асоциативни масиви. Този човек може да го направи малко по-ясно. Ето защо един предмет е полезно. Когато искате да се декларира един студент, като Zamyla, ние можем действително капсулиране така да се каже, че вътре в обект чрез фигурни скоби точно като преди един куп ключове и стойности в тук. Имаме ID, къща, и име за Zamyla, последван от точка и запетая като обикновено в края. Първа тук, това е малко по- различен, но също така много мощен тези дни. Ето един масив, и аз знам, че тъй като има една квадратна скоба нагоре отгоре и квадратна скоба в дъното. И това е масив от какви данни въведете очевидно в JavaScript? Това е набор от изглежда като три обекта. И аз знам, че е само един обект защото на фигурните скоби. И забележи, че има отворена къдрава скоба, някои неща, в близост къдрава скоба, запетая, после още малко, запетая, и след това още. Така че това е три аргумента разделени от две запетаи. Така че това е един масив на три обекта. И всяка от тези обекти изглежда студент или член на персонала на някои сортиране, всеки с ID, къща, и име. Но аз съм този, наречен нещо наречен JSON - JavaScript Notation Object. Това е формат на данни, които действително е толкова много популярен и в Vogue тези дни, че ако пишете на приложение, което използва Facebook API, API на Twitter, наистина почти всяко API там тези дни, включително някои от собствения CS50, The данни се върнеш не е в старото училище CSV формат. Защото отзоваване, че CSV е супер проста. Той е само на колони разделят със запетаи. Данни JSON ви дава повече метаданни. Тя свързва ключова с всяка стойност, така че те не трябва просто да се предположи, че Колоната нулевия е една стойност, колона един друг, втора колона е друг. Всичко в JSON обект тук е нещо на самостоятелно описване, защото всеки едно от имената в този файл има буквално назове пред него като цитиран низ. Така че нека хвърлим един поглед към няколко примера тук. Позволете ми да отида в уреда. И нека да отидат в нашата vhost директория в обществения. И нека да отидат в JavaScript директория. И да вървим напред и да се отворят Dom-0.html, където DOM просто означава, документ обектен модел. Това е неща на дърво, за които се I, посочени по-рано. И нека да предложа следното. Ето една уеб страница, чийто тялото е доста проста. Така че тук долу в дъното, забележите, че имам форма. Виждали сме тези, които преди това. Той има два входа, един от които е с ID на име, едно от които е с вид на представи и първия нечии тип е текст. Така че това всъщност звучи доста просто. Нека да отидем тук. Нека да се върнем към тази страница тук. Нека отидем в Localhost, и иди в указател нашата JavaScript, и отидете на Dom-0, и тук имаме тази форма. Така че това е очевидно всичко това прави страница. Тя има поле с име бутона Submit. Но аз няма да се използва PHP тук. Аз ще направя всичко, от страна на клиента така да се каже в JavaScript, както следва. Забележете, че аз наистина съм дал името област на въвеждане на уникален идентификатор, който действително ще ме спаси от известно време в един миг. И забележи съм въведени друг етикет в главата на моята уеб страница, на  маркер. Така че това е в този смисъл, че JavaScript е език за програмиране от страна на клиента. В този случай, точно като CSS, аз слагам тя направо вътре в моя HTML. Но забележете, че съм обявен за функция че изглежда малко като PHP синтактично, но това е действително JavaScript, защото отново, това е от страна на клиента в браузъра. И да предположите какво това ще направи, въпреки че някои от синтаксиса тук е нещо ново. ПУБЛИКАТА: Кажи здравей на който. DAVID Malan: Ще кажа здрасти на всеки, който посещава тази страница. Е, как? Така че забележите, тя се превръща в JavaScript има сигнал () функцията. Това е един много тъжен вид функция, която наистина просто тенденция да дразнят потребителите. Това не е един наистина трябва да използвате обикновено, но това е една бърза и мръсни начин за сортиране на печат нещо на графичен потребителски интерфейс, като браузър. Забележете, че тук имам стринг в единични кавички. Оказва се, че за разлика от C, JavaScript действително могат да имат използвате единичен цитира, и честно казано това е просто вид на Конвенцията сред стилистични JavaScript програмисти да използвате единични кавички. PHP, те всъщност имат малко различно значение. Но за сега, просто знам, че Това е единствената причина. Конвенцията в JavaScript е често да използвате единични кавички, но бихме могли да използваме двойни кавички и на двете места, както добре. Така че това е интересно. Спомнете си последния път, че сме имали, че картината на екрана, който нарисува дърво където сте имали HTML възел, и Главният възел, и тялото възел, и след това някакъв текст. Но имаше един специален възел в самия връх, че се обадих на документа. Е, оказва се, в JavaScript, всеки път, когато се напише програма на JavaScript в браузъра, можете да имат достъп до специален глобална променлива. Подобни в духа на свръхглобални на PHP, това един се нарича в всички малки букви документ. Това е като структура, но това структура също има функции във вътрешността му. Така C структура просто има данни обикновено. Но JavaScript обект на това технически е също има функции, иначе известни методи, вътре в него. И вие можете да се обадите функция вътре в този обект съвсем буквално си върши име, точка, и след това името на функцията, или отново метод. Това е просто синоним, наистина. И какво общо има тази функция направя? Можете да вид се досетите от името му. Вземи елемент от ID. Така че това ще намерите на уеб страницата, търси онова дърво, търсейки каквото възел, AKA елемент, има уникален идентификатор на кавички име. И тогава какво ще правя? Отивам да получите стойността вътре в този възел в дървото, и аз отивам по някакъв начин да кажа здравей на това име. Така че предполагам, въпреки че не сме виждал това все пак, това, което правите на плюс символи означават, тук и тук може би? ПУБЛИКАТА: свързвам. DAVID Malan: свързвам. Точно така, и това са само вид дизайн решения хора, направени преди години. В PHP, вие се слеят неща, с точици. В C, да скочи през няколко обръчите и наричаме функции като strcopy () или strcat (), или други подобни функции. Но в JavaScript, вие използвате плюсове. Така че това е просто конкатенация три струни - Здравейте, едно име, а след това удивителен знак. Така че, кога и защо е тази функция нарича все пак? Е, да предположите от HTML в дъното. Защо се поздравят (), наречен, или кога? Очевидно, като най-добре мога да кажа, на представи, когато се подава тази форма, Аз ще направя всичко, което е във вътрешността на тези цитати. И по-специално, аз отивам да се обадя поздрави () и след това се върнете фалшива. Е, нека да видим какво мрежата ефект тук е на първо място. Така че позволете ми да отида напред и да въведете в, да речем, Лорен, Изпращане. Здравейте Лорен. Да видим дали може би това е просто Късметлия изпълнение. Nope. Така че това е писането на всякакви името, което всъщност е сложил там. Но забележете това, което не се променя. URL адресът е все още дом-0.html. Няма по register.php. Няма по втория файл. Не е атрибут действие. И така, какво е това завръщане невярна вероятно правиш? Защо съм се обадите поздрави () и след това връщане фалшиви вероятно? Какво обикновено се случва, когато щракнете върху Подаване на формуляр, че дори имаме виждал през изминалата седмица? ПУБЛИКАТА: [недоловим]. DAVID Malan: Тя отива някъде, нали? Той отива до известна дестинация URL. Но аз не искам това да се случи тук. Искам моята уеб страница, за да бъде напълно динамичен като Gmail, където някога сте там, да останеш там. URL адресът не се променя по начин, който показва цялата страница се презарежда. По-скоро, аз просто искам да променя нещо като отпечатване на нещо тук на екрана. Ами нека да почистите този нагоре малко. Позволете ми да се отвори не Dom-0, но Нека отворим дом-2. Само да съм виждал някои синтаксис тук. Оказва се, че това, което току-що се използва сурово JavaScript. Така че това е наистина на езика JavaScript. Някои от вас може би знаят за библиотека, наречена Jquery. Така Jquery не е същото нещо като JavaScript. Това е просто една библиотека, която наистина умен човек пише и популяризирана като че почти всички хора по света сега Jquery използва при използване на JavaScript. И на пръв поглед, честно казано, тя изглежда малко по-загадъчен. Но вие ще откриете, особено ако отидете има за своя окончателен проект с уеб развитие, вие ще откриете, че този почиства нещата и ви спестява доста няколко реда код. Така че нека просто поглед към това как тази форма се работи. Забележете какво съм премахнете очевидно от моя HTML? Не е за да представи манипулатор така да се каже. Не е атрибут. Защото знаеш, какво Аз наистина не харесва? Чувствах се като бяхме падане в старите навици там. Точно както тя беше започнала да се чувства помия да общувам както с CSS HTML, защото си вид хвърляне различни езици по целия място, по същия начин започна това да се чувстват като лош път да отида там, където Слагам JavaScript код вътре в моя HTML, вместо да го факторинг навън. Така че това е урок тук. В Дом-2.html, аз съм го факторинг навън. И аз правя нещата малко по- различно. За сега, аз отивам да размахва ръцете си в това, което наистина прави това под предния капак. Но просто за сега приемем, че тази първа ред код в тази библиотека наречен Jquery просто означава, когато документ е готов, направете следното. Тъй като уеб страници могат да се известно време да се зареди. Може да бъде на бавен интернет връзка, и това може да се върти и се върти, и най-накрая, че е зареден. Тази линия на код просто казва, изчакайте, докато цялата страница е готов, документът е готово, преди да изпълни този код. А сега забележи, че това е най-вероятно най-полезните първа отнеме от JQuery. Тази линия тук е много подобен по дух до този много по-дълъг ред тук. Има предвид, че в суров JavaScript код, там съществува документ глобален обект, който има функция, наречена getElementById (), хората, които са писали Jquery опростена, че просто да се каже, знак за долар, а след това вътре в скоби, поставени две кавички, и след това сложи символ хеш следвана от уникален идентификатор, който искате да вземете. Това е еквивалентно на document.getElementById. В същото време,. Представя просто означава на подаване, независимо от формата си позовавайки се на ляво, отидете напред и да изпълни това. Но сега това е любопитството също. Какво е странно за това, което Подчертала съм тук? Не само, че е вид синтактично нов, има и нещо, което липсва. ПУБЛИКАТА: Това е просто нарича функция? Това не се нарича сигнал? DAVID Malan: Да. Е, така предупреждение () е надолу тук, за да бъдем честни. Но никъде не се споменава за име, като знаете, Foo или нещо тук. И наистина, това е една от характеристиките на JavaScript, който е доста мощен, но също е доста нова. И PHP всъщност има това, както добре. Нека да вървим напред и да направим нещо наистина бързо. Нека да вървим напред и да направим тази тук. Позволете ми да направя това. Function. Нека наречем това товарач (). Функция A манипулатор така да се каже. Нещо, което обработва някои операция. Позволете ми да си чистя вдлъбнатина. И да направим тази тук. И сложи това тук. Да. OK. Така че сега имам нарича функция товарач (), че аз наистина не знам какво прави той, все още. Просто все още има тези неща. Опа. Отне твърде много. Да го направим. Добре. Извинете. Добре. Позволете ми да направя това. OK. Това изглежда добре и прави напред сега. Позволете ми да направя това. Направете това. И OK. Така че сега, нека да поставим този тук. Няма повече програмиране в движение. OK. Така че сега, нека се върнем към където историята започва. По-рано казах, че тази линия тук означава, когато документът е готов, проверете напред и да го направя. Какво искате да направите? Ами конкретно, искам да отида напред и да направите следното. Изпълнете тази линия на код, а след това това, което искам да направя е наричат ​​това функционира, когато формулярът се подава. Сега това е, което е интересно. Това само по себе си е функция. Забележете, аз не съм пускането скоби тук по нормалния начин. Аз буквално преминава функция, наречена товарач () за друга функция нарича представя () като аргумент като въпреки че това е като променлива. И това е една от характеристиките на JavaScript е функциите си наистина са само предмети. В действителност, те са наистина само променливи от някакъв вид. И ако името на функцията е товарач (), няма причина да не може да мине това в като аргумент тук. А това означава, че когато формата с ID на демо е представени, обадете се на тази функция. Но сега, ако ли да отменя всичко това, Защо тогава аз може би правя това преди малко? Е, това е анонимна функция. Защото честно казано, аз осъзнах защо съм притеснява да губите време за обявяване на функция, наречена товарач () само да се обадя то в едно и само на едно място? Ако аз не се нуждаят от име, а аз не трябва да го наричаме повече от едно място, нека просто изпълнение на функцията точно там, където имам нужда от него. И така, JavaScript и PHP поддръжка какво се наричат ​​анонимни функции, които позволете ми да правя точно това тук. Но ние просто надраскване на повърхността. Да дразни само с няколко крайните примери тук. Ако отида в quote.php. Забележете, че това всъщност е PHP функция, програма, PHP, че съм написал че очаква HTTP нарича параметър символ, и аз може да премине в стойност, като FB. И ако ние действително изглежда при източника код, това се заявки безплатен сайт наречена Yahoo Finance, точно като р-комплект седем, и това е връщане към мен нещо очевидно известен формат е JSON - JavaScript Object Notation. Това е просто един обект. Обърнете внимание на фигурни скоби, на котировки, дебелото черво, и запетаи. Сега същото време, това е много готино. Защото вероятно може да се използва програмиране език за генериране на URL адреси че изглежда така динамично, нали? Мога да го смените с Google и да се върнат на Google цената на акциите от $ 1,017.55. Така че нека да видим дали не можем да използваме това сега. Нека отида до 0 Аякс тук, които изглежда по следния начин. Това е просто един уеб сайт, който има формуляр с един бутон. Позволете ми тук вървят напред и въведете в YHOO за склад символ на Yahoo, кликнете Вземи Цитат, а сега забелязвам съм намерила сигнал с 32,86. Нека действително отиде на любител версия на тази страница, версия две, и напишете Да речем, Microsoft, MSFT. Вземи цитат. И сега забелязвам, не предупреждение. Забележете, където се казва цена се определя? Има най-простите примери, които загатва какво Gchat и Facebook Чат и Gmail, както и други такива сайтове се прави от действително промяна на уеб страница. Забележите това. Позволете ми да се презарежда страницата. Позволете ми да се отворят Инспектор на Chrome. Нека да отидем на елементи раздела тук. Сега, ако забележите, че увеличение в тук и отвори нагоре, забележите, че това е моят HTML DOM - моя документ обектен модел. Това е моят HTML. Но сега забелязвам, макар и да става да бъде малко трудно да го видя и в двете места едновременно, ако напишете в FB тук, да гледате дъното на екрана само. Това е действително се променя ми HTML в движение. И прави това просто , като направите нещо подобно. Ако се отворят Аякс-2, забележите прилагане нещо толкова секси, колкото че, въпреки че това е доста грозно, но като сложна, тъй като това функционално, има някои HTML в долната част. Но забележете, че за да се бележат. Ние не сме използвали и преди, но това е като, но не принуждава всичко на нов ред. Тя просто има правоъгълна област на същата линия по същество. Забележете, че аз го даде ID на цената. Оказва се, с помощта на същата JavaScript библиотека, имам функция наречен цитат (), които се нарича, когато формулярът е подаден. И това, което правя е това. Аз съм за обявяване на променлива в JavaScript наречен URL, запис на стойност quote.php? символ =. С други думи, аз съм започнал да изготви искане HTTP, а след това Аз съм конкатенация върху които с плюс каквато и да е елемент с ID на символ, които бележка е, че текстово поле чак тук. Така че точно като имахме форми в миналото. И тогава се оказва, в Jquery, ако обадя. Вал (), която призовава на Вал функция, а стойността функция, която получава каквото потребителят е въвел инча И тогава всички на мрежовия трафик , което се случва е това. $. GetJSON. И като настрана, знака за долар е само на краткото записване. Това е наистина jQuery.getJSON. Дайте ми да JSON от този URL, и когато искането се връща, наричаме това функция и да премине в като аргумент каквото се върна от сървъра. Така че с други думи, ако се върна към браузъра, и се върна в quote.php, какво ми браузър прави става това парче от данни. И когато отида в тази уеб страница тук, забележите, ако вместо да отиде до мрежата раздела и ясно, и след това въведете нещо като GOOG за Google и да получите Извадка, забележите, че страницата не се промени. Но искане HTTP е направено, и това, което се върна тук, ако се вгледаме в отговор е цял куп JSON че достъп накрая с тази проста линия. Данни е това, което е намерила от сървъра. Цената е на името на ключ ме интересува. Така data.price ми дава това. Сега същото време, и това е последният пример. Можете да направите още повече на страницата. Една действително, както две. Можем да върне етикет, ако си спомняте това. Това е JavaScript. Ние можем да направим това. Много е вълнуващо. Ще оставим това за Катерачът. Но още по-вълнуващо, можете да правят нещата по този начин. Ако отида в геолокация-1, се оказва, че Chrome знае, че ние сме най- ширина дължина 42.37. -71.10. Така че има още по-там на ваше разположение. Но повече за това следващата седмица. Ще се видим в понеделник.