1 00:00:00,000 --> 00:00:11,330 2 00:00:11,330 --> 00:00:12,360 >> DAVID Malan: Добре. 3 00:00:12,360 --> 00:00:15,970 Това е CS50, и това е края на седмица девет. 4 00:00:15,970 --> 00:00:18,560 Той е бил вихрушка над През последните няколко дни. 5 00:00:18,560 --> 00:00:21,580 И проблем създаде седем, ако сте на коляното дълбоко в нея, да разбере, че има доста 6 00:00:21,580 --> 00:00:23,340 Малко ново, което е там. 7 00:00:23,340 --> 00:00:26,660 Но нека да видим дали не можем да сглобя всичко заедно тук накратко 8 00:00:26,660 --> 00:00:29,230 преди това Veering разстояние в още друга посока и виждайки 9 00:00:29,230 --> 00:00:30,510 Къде другаде можем да отидем. 10 00:00:30,510 --> 00:00:32,630 >> Така че до този момент, ние сме говорили за HTML. 11 00:00:32,630 --> 00:00:33,740 Ние говорихме за CSS. 12 00:00:33,740 --> 00:00:34,705 Ние говорихме за PHP. 13 00:00:34,705 --> 00:00:36,520 Започнали сте да изпитате SQL. 14 00:00:36,520 --> 00:00:38,360 Днес ние ще говорим малко за JavaScript. 15 00:00:38,360 --> 00:00:41,230 Но как всички тези разнородни езици поберат заедно? 16 00:00:41,230 --> 00:00:44,970 >> Така че ние говорихме миналата седмица за понятие като сървър. 17 00:00:44,970 --> 00:00:48,470 Така че нека просто да се направи този правоъгълник като уеб сървър тук. 18 00:00:48,470 --> 00:00:52,200 А уеб сървър служи непременно файлове. 19 00:00:52,200 --> 00:00:54,640 А някои от тези файлове може да бъде HTML файлове. 20 00:00:54,640 --> 00:00:58,270 Така че едно от нещата, които един уеб сървър може да изплюе може да е файл, който 21 00:00:58,270 --> 00:01:01,290 ние просто ще се направи по този начин съдържащ някои HTML. 22 00:01:01,290 --> 00:01:04,786 Така че от гледна точка на лаик, какво HTML е да ви позволи да направите? 23 00:01:04,786 --> 00:01:06,036 >> ПУБЛИКАТА: Page поглед хубаво. 24 00:01:06,036 --> 00:01:09,670 25 00:01:09,670 --> 00:01:12,310 >> DAVID Malan: Добре, да направи страница изглежда добре, макар че аз мисля, че съм доказал 26 00:01:12,310 --> 00:01:13,370 че в противен случай. 27 00:01:13,370 --> 00:01:18,250 Така че HTML няма да ви позволи да изложи страници структурно, и ви позволява да се 28 00:01:18,250 --> 00:01:22,410 вид естетически маркирате дадена страница, марка на статично съдържание, така че да можете 29 00:01:22,410 --> 00:01:23,640 След това може да го видите с уеб браузър. 30 00:01:23,640 --> 00:01:24,690 >> Но това е ключът. 31 00:01:24,690 --> 00:01:26,130 Това е статично съдържание. 32 00:01:26,130 --> 00:01:28,590 Можете да го напиша, да го спаси, и след това да го достави. 33 00:01:28,590 --> 00:01:31,130 И уеб сървъра след това служи It Up на посетителите си. 34 00:01:31,130 --> 00:01:35,700 >> Но ние стилизирам неща с помощта на различни език напълно. 35 00:01:35,700 --> 00:01:40,150 Ние започнахме да се използва атрибут стил на определени тагове. 36 00:01:40,150 --> 00:01:43,400 И атрибут стил нека настроите неща като размер на шрифта и цвят. 37 00:01:43,400 --> 00:01:46,460 И вероятно сте започнали да откриват, или скоро ще за окончателно 38 00:01:46,460 --> 00:01:50,160 потенциални проекти, още други свойства, които можете да използвате в CSS. 39 00:01:50,160 --> 00:01:54,710 И така, от гледна точка на лаик, какво Наистина тогава се CSS направя? 40 00:01:54,710 --> 00:01:57,810 Това са само примери от тях. 41 00:01:57,810 --> 00:02:00,730 Какво означава това да ви позволи да направите това HTML изглежда не от това, което 42 00:02:00,730 --> 00:02:02,606 сме виждали до този момент? 43 00:02:02,606 --> 00:02:04,850 >> ПУБЛИКАТА: Определете стилове от себе си. 44 00:02:04,850 --> 00:02:06,700 >> DAVID Malan: Определете стилове от себе си. 45 00:02:06,700 --> 00:02:10,280 Така определи неща като класове, както ви може да са се натъкнали, или уникално 46 00:02:10,280 --> 00:02:13,800 идентифицират възли в документ така че можете да ги стилизирам. 47 00:02:13,800 --> 00:02:16,890 Но по-конкретно, бих казал, че CSS наистина ви позволява да правите неща, които 48 00:02:16,890 --> 00:02:20,790 последна миля и ви позволява да определите много по-точно на естетиката, 49 00:02:20,790 --> 00:02:24,340 като има предвид, HTML за по-голямата част позволява структурирате вашите страници. 50 00:02:24,340 --> 00:02:27,310 >> И въпреки че има някои настройки по подразбиране, като видяхме етикет за 51 00:02:27,310 --> 00:02:30,690 позиция, тагове, които грубо казано прави нещата мащабен и смел. 52 00:02:30,690 --> 00:02:34,250 Това е доста общо определение на етикет - голям и удебелен шрифт. 53 00:02:34,250 --> 00:02:35,260 Какво големината на шрифта е това? 54 00:02:35,260 --> 00:02:36,080 Какъв цвят е това? 55 00:02:36,080 --> 00:02:36,890 Как смело е това? 56 00:02:36,890 --> 00:02:39,830 И CSS ви позволява по-фино Уточнявайте такива неща. 57 00:02:39,830 --> 00:02:42,150 Както и оформление, като някои от вас са виждали. 58 00:02:42,150 --> 00:02:45,180 >> И честно казано, CSS е малко на разхвърлян език. 59 00:02:45,180 --> 00:02:48,370 Това е много мощен в които можете да направите буквално всеки сайт, че сте 60 00:02:48,370 --> 00:02:51,880 видян на интернет днес с него, но това е нещо като болка в областта на шията. 61 00:02:51,880 --> 00:02:54,440 И някои от вас са Ударих си главата срещу стените вече само за да направят 62 00:02:54,440 --> 00:02:58,560 нещо глупаво като център за менюто на проблем създаде седем, ако сте стигнали до 63 00:02:58,560 --> 00:02:59,470 този въпрос вече. 64 00:02:59,470 --> 00:03:01,530 >> Но осъзнавам, тези неща стане по-лесно с течение на времето. 65 00:03:01,530 --> 00:03:02,820 Можете да започнете да усещате модели. 66 00:03:02,820 --> 00:03:06,020 И отново, Google ще бъде твой приятел за различните начини, по които можете да 67 00:03:06,020 --> 00:03:07,220 решаване на тези проблеми. 68 00:03:07,220 --> 00:03:11,520 >> И смея да кажа с CSS и HTML повече като цяло, можете да решите проблемите в 69 00:03:11,520 --> 00:03:15,910 много други начини, в които може много добре да бъде вярна, отколкото бихте могли 70 00:03:15,910 --> 00:03:18,900 в нещо като C, дори сега PHP или JavaScript. 71 00:03:18,900 --> 00:03:21,080 Има само много различни начини да се определят нещата. 72 00:03:21,080 --> 00:03:22,570 >> Но това започна да се разхвърлян, казахме. 73 00:03:22,570 --> 00:03:26,480 Просто вид на смесването си HTML и Вашата CSS с атрибута стил е 74 00:03:26,480 --> 00:03:27,590 малко помия. 75 00:03:27,590 --> 00:03:31,460 И така, вместо да заяви, нещо абстрактно казано, че трябва да 76 00:03:31,460 --> 00:03:34,050 най-малко да започне да фактор вашия CSS вероятно. 77 00:03:34,050 --> 00:03:37,430 Не е твоя стил атрибути, но най-малко използвате таг стил вътре какво 78 00:03:37,430 --> 00:03:38,840 част от уеб страница? 79 00:03:38,840 --> 00:03:39,560 >> ПУБЛИКАТА: Head. 80 00:03:39,560 --> 00:03:40,120 >> DAVID Malan: В главата. 81 00:03:40,120 --> 00:03:43,270 Досега имахме само заглавието нагоре там, но можете също така да добавите стил 82 00:03:43,270 --> 00:03:47,230 маркирате, и можете да поставите вашия CSS грубо говорейки към горната част на страницата. 83 00:03:47,230 --> 00:03:52,550 Но тогава ние взехме нещата една стъпка напред и ние отразено, че повече 84 00:03:52,550 --> 00:03:54,130 в отделен файл. 85 00:03:54,130 --> 00:03:57,240 >> И така, тези два файла са някак си сега свързани. 86 00:03:57,240 --> 00:03:59,550 И наистина това беше маркер, който е направил това. 87 00:03:59,550 --> 00:04:02,920 И това, което е един от общите мотивации за факторинг нашия CSS 88 00:04:02,920 --> 00:04:04,057 още повече? 89 00:04:04,057 --> 00:04:05,280 >> ПУБЛИКАТА: повторна употреба. 90 00:04:05,280 --> 00:04:05,785 >> DAVID Malan: повторна употреба. 91 00:04:05,785 --> 00:04:06,150 Нали така? 92 00:04:06,150 --> 00:04:09,470 Може да сте виждали в р-определя седем вече че много от страниците, на 93 00:04:09,470 --> 00:04:12,260 купуване страница, страницата продажби, на портфолио страница, вероятно са 94 00:04:12,260 --> 00:04:13,550 структуриран малко по подобен начин. 95 00:04:13,550 --> 00:04:17,579 Има CS50 финанси лого в горната освен ако не сте решили да го смените. 96 00:04:17,579 --> 00:04:19,839 Има един букмейкър в дъното на страниците. 97 00:04:19,839 --> 00:04:24,315 И CSS ви позволява след това да го фактор от то в отделен файл, така че, ако 98 00:04:24,315 --> 00:04:27,780 искате да промените нещо в световен мащаб през целия си сайт, вие наистина може да 99 00:04:27,780 --> 00:04:29,390 просто го промените на едно място. 100 00:04:29,390 --> 00:04:32,750 >> Но има една цена, която плащате потенциално До като заложен навън на 101 00:04:32,750 --> 00:04:38,380 CSS от моя HTML файл в отделен файл, той съотнасяне с 102 00:04:38,380 --> 00:04:40,650 тагове, които видяхме в понеделник. 103 00:04:40,650 --> 00:04:43,850 Какви биха могли да бъдат в неблагоприятна посока на това? 104 00:04:43,850 --> 00:04:48,830 Мислене обратно преди седмица, когато сме Говорим за HTTP и TCP / IP и как 105 00:04:48,830 --> 00:04:52,070 Интернет работи. 106 00:04:52,070 --> 00:04:53,530 Нещо тук? 107 00:04:53,530 --> 00:04:54,730 >> ПУБЛИКАТА: Това отнема повече време. 108 00:04:54,730 --> 00:04:55,470 >> DAVID Malan: Това отнема повече време. 109 00:04:55,470 --> 00:04:56,750 Защо? 110 00:04:56,750 --> 00:04:59,450 >> ПУБЛИКАТА: [недоловим]. 111 00:04:59,450 --> 00:04:59,750 >> DAVID Malan: Да. 112 00:04:59,750 --> 00:05:01,240 Така че може би отнема малко повече време. 113 00:05:01,240 --> 00:05:04,290 Защото едно, СГО е очевидно не в един и същи файл. 114 00:05:04,290 --> 00:05:06,920 Така че сега ще трябва да не се правят една, а цели две искания. 115 00:05:06,920 --> 00:05:11,230 И всеки един от тези искания, както видяхме в Chrome в така наречената инспектор, 116 00:05:11,230 --> 00:05:15,740 и ние погледна раздела мрежа, всеки на тези файлове изисква една HTTP 117 00:05:15,740 --> 00:05:18,360 искане, което видяхме отнема някакъв период от време. 118 00:05:18,360 --> 00:05:19,290 Сега, може би не е много. 119 00:05:19,290 --> 00:05:20,670 Може би това е само 20 милисекунди. 120 00:05:20,670 --> 00:05:22,260 Може би това е 200 милисекунди. 121 00:05:22,260 --> 00:05:25,530 >> Но мисля, че за една страница като Facebook, или CNN, или Google, които са много 122 00:05:25,530 --> 00:05:28,060 по-голям от примерите, с които сме погледна към този момент. 123 00:05:28,060 --> 00:05:32,070 Тези страници може да има десетки файлове, всеки от които може да изисква 124 00:05:32,070 --> 00:05:33,550 изтегляне на файл. 125 00:05:33,550 --> 00:05:35,800 Така че нещата може потенциално започне да се забавя. 126 00:05:35,800 --> 00:05:39,280 >> И най-вече тези дни, когато всички ние имат мобилни телефони в нашите джобове и 127 00:05:39,280 --> 00:05:43,010 ниска скорост на интернет връзки, се налага да изчакайте още няколко милисекунди, няколко 128 00:05:43,010 --> 00:05:46,110 повече милисекунди за допълнителна файлове може действително да бъде бавно. 129 00:05:46,110 --> 00:05:50,430 Latency е думата, която описва вид на изчакване, че сте, че сте 130 00:05:50,430 --> 00:05:53,110 изпитате, когато чакаш някаква част от информацията. 131 00:05:53,110 --> 00:05:54,430 >> Но там е наобратно. 132 00:05:54,430 --> 00:05:56,600 Така че това не е всичко, нещо като - 133 00:05:56,600 --> 00:05:58,170 тя всъщност е малко на зигзаг отсечка тук. 134 00:05:58,170 --> 00:06:02,970 Отрицателните сега, но това, което браузъри могат да направят ако си умен, за да се избегне 135 00:06:02,970 --> 00:06:08,870 се налага да поиска същото styles.css подаде отново може да бъде да се направи какво? 136 00:06:08,870 --> 00:06:09,390 >> То кеш. 137 00:06:09,390 --> 00:06:10,370 Така кеширане - 138 00:06:10,370 --> 00:06:11,690 С-А-С-Н-Е - 139 00:06:11,690 --> 00:06:15,810 обикновено означава тук само за да се спаси файла, който поиска за първи път, и 140 00:06:15,810 --> 00:06:17,440 След това проверете вашата кеш за него. 141 00:06:17,440 --> 00:06:20,400 Проверете, че сте нещо като контейнер за съхранение, и ако вече имате 142 00:06:20,400 --> 00:06:24,520 копие от styles.css, дори и ако някои друг страница в р-сет, или който и да е сайт, 143 00:06:24,520 --> 00:06:28,560 поиска отново, само за да даде потребител, който същия кеширано копие. 144 00:06:28,560 --> 00:06:30,140 Да не се притеснява да го иска. 145 00:06:30,140 --> 00:06:32,560 >> Отрицателните там, въпреки че, както някои от вас са спъна в р-сет. 146 00:06:32,560 --> 00:06:35,870 Ако се направи промяна на сървъра и можете да се върнете към браузъра и ви 147 00:06:35,870 --> 00:06:39,250 презареди, понякога браузъра прави ти една услуга и не се притеснява 148 00:06:39,250 --> 00:06:43,660 повторно изтегляне на вашия styles.css файл защото, хайде, какви са шансовете 149 00:06:43,660 --> 00:06:47,620 че тези стилове, които Facebook използва ще променим час на час или 150 00:06:47,620 --> 00:06:48,140 ден за ден? 151 00:06:48,140 --> 00:06:48,800 Това е доста ниска. 152 00:06:48,800 --> 00:06:52,260 Те могат да се променят с течение на времето, но не и от минута или с всеки изминал час. 153 00:06:52,260 --> 00:06:55,810 >> Така че един трик, просто FYI, когато правиш уеб развитие, често се задръжте натиснат 154 00:06:55,810 --> 00:06:59,500 смени ключов например и след това щракнете върху заредете в браузъра си и това ще 155 00:06:59,500 --> 00:07:03,280 обикновено кажа презареждане на браузъра всичко, дори и ако вече имате 156 00:07:03,280 --> 00:07:04,180 то в кеш паметта. 157 00:07:04,180 --> 00:07:06,630 Така че отново, плюсове и минуси, но всички от тях 158 00:07:06,630 --> 00:07:08,260 в крайна сметка се изработи решения. 159 00:07:08,260 --> 00:07:11,520 >> Така че сега, ние не само трябва да края на историята тук. 160 00:07:11,520 --> 00:07:15,790 Ако сега се върнем и назад и назад и Обратно, ние започнахме да се въведе не само 161 00:07:15,790 --> 00:07:18,060 HTML, но PHP. 162 00:07:18,060 --> 00:07:20,786 Така че от гледна точка на лаик, какво няма PHP нека правим? 163 00:07:20,786 --> 00:07:22,770 >> ПУБЛИКАТА: [недоловим]. 164 00:07:22,770 --> 00:07:24,258 >> DAVID Malan: Какво е това? 165 00:07:24,258 --> 00:07:25,250 >> ПУБЛИКАТА: Въвеждане на логика в кода. 166 00:07:25,250 --> 00:07:26,620 >> DAVID Malan: Да, да се въведе логика във вашия код. 167 00:07:26,620 --> 00:07:29,570 Така че това е един истински език за програмиране с примки, и променливи, както и 168 00:07:29,570 --> 00:07:32,620 функции и условия, както и всички нещата, които са използвали обратния път 169 00:07:32,620 --> 00:07:33,780 когато от нулата. 170 00:07:33,780 --> 00:07:36,780 И PHP, които сме виждали, може да се използва или в командния ред - това 171 00:07:36,780 --> 00:07:39,190 не трябва да има нищо общо с интернет, въпреки че това е 172 00:07:39,190 --> 00:07:43,150 наистина си произход и това, което тя е склонна да бъде добър в и благоприятна за - 173 00:07:43,150 --> 00:07:47,130 но можете да използвате PHP просто от природата на факта, че има печат () 174 00:07:47,130 --> 00:07:49,660 функция, и ФОРМАТ () функция, или ехо () функцията. 175 00:07:49,660 --> 00:07:52,440 Има пропуснати ползи от начина, по които може да печата текст с PHP. 176 00:07:52,440 --> 00:07:56,540 >> Следователно, можете да използвате този програмен език за извеждане на точно 177 00:07:56,540 --> 00:07:58,460 това, което ние говорим за преди. 178 00:07:58,460 --> 00:08:01,360 Можете да динамично генериране Вашата HTML. 179 00:08:01,360 --> 00:08:02,300 Може би не всички от него. 180 00:08:02,300 --> 00:08:06,460 Може би вие твърдите код неща, подобно на хедър, и долния, и логото, 181 00:08:06,460 --> 00:08:07,950 и вашия стил листове, и всичко това. 182 00:08:07,950 --> 00:08:11,190 Но за нещо като р-определя седем, къде манипулиране запаси и 183 00:08:11,190 --> 00:08:14,690 показва портфейла на потребителя, което е ще се променя динамично, бихте могли да 184 00:08:14,690 --> 00:08:18,960 със сигурност се използва PHP и логиката му придава вие като език за програмиране, за да 185 00:08:18,960 --> 00:08:22,320 изход динамично подгрупи на страницата. 186 00:08:22,320 --> 00:08:25,900 >> Така че, когато говорим за динамични уеб сайтове, или уеб програмиране, че е 187 00:08:25,900 --> 00:08:27,200 това, което наистина говори. 188 00:08:27,200 --> 00:08:31,450 Използването на език, като PHP, или неща нарича Python, Ruby, или, или Java, или 189 00:08:31,450 --> 00:08:35,900 още други езици, да се правят заявки база данни често, или друг сървър, и 190 00:08:35,900 --> 00:08:38,580 след това динамично изплюе HTML. 191 00:08:38,580 --> 00:08:42,470 >> Сега крайния резултат, като настрана, е че HTML на повечето сайтове, 192 00:08:42,470 --> 00:08:45,970 включително и р-определя седем, е вероятно ще бъде огромна бъркотия, ако 193 00:08:45,970 --> 00:08:48,060 погледнете при източника код в браузъра. 194 00:08:48,060 --> 00:08:49,010 Това не е голяма работа. 195 00:08:49,010 --> 00:08:51,550 В този момент, когато ние се грижим за стил, ние се грижим за 196 00:08:51,550 --> 00:08:52,740 неща, които пиша. 197 00:08:52,740 --> 00:08:56,240 Ние няма да се грижи за нещата, че това, което кода на изхода. 198 00:08:56,240 --> 00:08:59,520 Така че не се тревожи за отстъп тук, ако това е PHP, че е 199 00:08:59,520 --> 00:09:01,190 всъщност извеждане неща. 200 00:09:01,190 --> 00:09:04,430 В края на краищата, браузърът няма да се интересува, и човек няма да се търси 201 00:09:04,430 --> 00:09:05,400 при източника или иначе. 202 00:09:05,400 --> 00:09:09,000 Ние персонала, например, би да се търси в своя PHP. 203 00:09:09,000 --> 00:09:13,440 >> Така че позволете ми да дам един бърз пример сега защо иначе това може да бъде полезно. 204 00:09:13,440 --> 00:09:18,620 Така че, честно казано, не мога да си спомня последния път I използва C за решаване на проблема в 205 00:09:18,620 --> 00:09:19,620 реалния свят. 206 00:09:19,620 --> 00:09:22,330 Той вероятно е бил в завършил училище, когато Имах нужда да се използва език, който 207 00:09:22,330 --> 00:09:26,710 беше сравнително ниско ниво и ми даде възможност да се направи нещо много висока 208 00:09:26,710 --> 00:09:30,720 извършване наистина да спаси колкото се може повече CPU цикъла, колкото можех, в голямата си част 209 00:09:30,720 --> 00:09:33,990 защото бях с огромни масиви от данни, и всеки CPU цикъл брои. 210 00:09:33,990 --> 00:09:37,750 И честно казано, дори и в неща като телефони тези дни и други устройства 211 00:09:37,750 --> 00:09:39,910 където не са съвсем толкова памет и да не са съвсем като 212 00:09:39,910 --> 00:09:44,160 много CPU, използвайки бързо езици все още е привлекателен. 213 00:09:44,160 --> 00:09:47,290 >> Но в реалния свят, когато просто Искам да хвърлят някоя програма заедно, за да 214 00:09:47,290 --> 00:09:50,340 анализираме някои данни, или сте събрали цял куп регистрации за 215 00:09:50,340 --> 00:09:53,330 някои студент група и искате да много бързо автоматизиране на изпращане на имейли 216 00:09:53,330 --> 00:09:56,240 един по един на всеки един от тези регистранти, ти започваш да се достигне за 217 00:09:56,240 --> 00:09:59,240 език, по-високо ниво от C, така да се каже. 218 00:09:59,240 --> 00:10:04,060 Нещо като PHP или Python, Ruby, или, или на които съществуват половин дузина други 219 00:10:04,060 --> 00:10:04,550 тези дни. 220 00:10:04,550 --> 00:10:07,200 Но тези три вероятно са най-модните в момента. 221 00:10:07,200 --> 00:10:10,840 >> И какво означава това е, че можете да отворите текстов редактор като Gedit или 222 00:10:10,840 --> 00:10:14,030 почти всичко друго и след това започвам писане на код, без да се налага да се притеснявате 223 00:10:14,030 --> 00:10:17,800 за съставяне, без да се налага да наистина се притеснявате за управление на паметта, 224 00:10:17,800 --> 00:10:20,820 като се има предвид обаче, че малко небрежност в крайна сметка ще се върне 225 00:10:20,820 --> 00:10:24,790 да те ухапе, ако масивът от данни получава по-голям или проблемът се голям. 226 00:10:24,790 --> 00:10:27,230 Но какво означава това за нас е следното. 227 00:10:27,230 --> 00:10:29,860 >> Позволете ми да отида напред и да тичам правопис от проблем създаде шест. 228 00:10:29,860 --> 00:10:33,480 Така че това е моето изпълнение Trie-базирани че аз бях на големия 229 00:10:33,480 --> 00:10:35,500 борда, където не се представи толкова добре. 230 00:10:35,500 --> 00:10:38,720 Ще се върнем във времето една седмица и преразгледа тези, които са в крайна сметка на върха на 231 00:10:38,720 --> 00:10:40,430 голям борда в последната ни лекция. 232 00:10:40,430 --> 00:10:44,520 Но за сега, нека да вървим напред и просто тече моето решение в текст, и ние ще направим 233 00:10:44,520 --> 00:10:48,460 Библията на крал Джеймз, и тук ние тръгваме. 234 00:10:48,460 --> 00:10:51,080 >> Така че всички тези неща са на общо мнение сгрешени думи от 235 00:10:51,080 --> 00:10:52,240 Джеймс Библията Кинг. 236 00:10:52,240 --> 00:10:55,560 И ми отне изпълнение половин секунда в общия. 237 00:10:55,560 --> 00:10:58,270 Така че не е твърде лошо за този определен компютър. 238 00:10:58,270 --> 00:11:01,540 Но мисля за това колко код аз трябваше да пиша. 239 00:11:01,540 --> 00:11:02,880 Помислете колко код, който трябваше да се напише. 240 00:11:02,880 --> 00:11:06,170 Помислете колко часа, прекарани в D-зала или общежитието или където 241 00:11:06,170 --> 00:11:07,890 всъщност кодирам това решение. 242 00:11:07,890 --> 00:11:11,850 >> Е, ако аз действително имат по-високо ниво език като PHP, да вземе под внимание 243 00:11:11,850 --> 00:11:13,350 какво мога да направя тук. 244 00:11:13,350 --> 00:11:16,410 Първо, се предполага, че това е вместо кода си разпространение. 245 00:11:16,410 --> 00:11:17,790 Това е файл, наречен правопис. 246 00:11:17,790 --> 00:11:20,220 Той е достъпен като част от днешната код разпределение. 247 00:11:20,220 --> 00:11:22,670 И аз отивам да махам с ръка най-много на детайлите, но това е всъщност 248 00:11:22,670 --> 00:11:25,500 интересен пример за това как вие може пристанище език 249 00:11:25,500 --> 00:11:28,870 като C към PHP. 250 00:11:28,870 --> 00:11:33,420 Аз буквално откри два текстови прозорци, едно с моя C версия на speller.c, 251 00:11:33,420 --> 00:11:36,960 и аз просто започнах да я превеждат в моя отправят към PHP и да го пишете, като се използват 252 00:11:36,960 --> 00:11:38,840 най-близките еквивалентни функции. 253 00:11:38,840 --> 00:11:40,100 >> Така че някои от тези неща са различни. 254 00:11:40,100 --> 00:11:43,730 Ние видяхме за последен път, че PHP не използва включва в доста по същия начин. 255 00:11:43,730 --> 00:11:47,050 Той използва изискват обикновено, макар включва не съществува. 256 00:11:47,050 --> 00:11:50,330 Дефинирайте е малко по-различна от # Определят в C, но това е 257 00:11:50,330 --> 00:11:51,890 как ние правим постоянно. 258 00:11:51,890 --> 00:11:55,860 $ Argc се оказва, съществува в PHP, така сме виждали това и преди. 259 00:11:55,860 --> 00:11:58,650 Това са само променливи, всички от които започват с доларови знаци. 260 00:11:58,650 --> 00:12:00,590 Припомнете си, те са просто един куп плаващи точки. 261 00:12:00,590 --> 00:12:03,970 >> Така че, дълга история кратко, вие сте добре дошли да флип чрез това, ако любопитен, това е 262 00:12:03,970 --> 00:12:10,010 почти една линия за онлайн превръщане на C версия на speller.c в PHP. 263 00:12:10,010 --> 00:12:12,630 И бихте могли да направите това отново, за половин дузина други езици. 264 00:12:12,630 --> 00:12:14,910 >> Но това, което е интересно е това. 265 00:12:14,910 --> 00:12:16,910 Или това, което е казано отчайваща е това. 266 00:12:16,910 --> 00:12:20,790 Позволете ми да отида напред и да напишете за dictionary.php, и твърдят, че аз съм 267 00:12:20,790 --> 00:12:23,670 ще отида напред и да приведе отново в действие проблем създаде шест тук. 268 00:12:23,670 --> 00:12:27,530 >> Така че нека да предложи първо, че в този файл, който ще се реализира в 269 00:12:27,530 --> 00:12:30,550 PHP, така че нека се отвори тагове ми като това. 270 00:12:30,550 --> 00:12:34,780 Позволете ми да се даде глобален променлива, размер на $ стане нула. 271 00:12:34,780 --> 00:12:36,710 И аз ще дам себе си хеш таблица. 272 00:12:36,710 --> 00:12:38,110 Ще се използва хеш таблица за това нещо. 273 00:12:38,110 --> 00:12:42,070 Как мога да декларирам, хеш таблица в PHP? 274 00:12:42,070 --> 00:12:42,990 Готово. 275 00:12:42,990 --> 00:12:43,980 OK. 276 00:12:43,980 --> 00:12:48,870 >> Така отворена скоба близо скоба представлява какво в PHP, както сме виждали? 277 00:12:48,870 --> 00:12:51,850 Масив, но масив, който би могъл е асоциативен масив. 278 00:12:51,850 --> 00:12:54,320 An асоциативен масив е структура на данни, който 279 00:12:54,320 --> 00:12:55,860 асоциира ключове със стойности. 280 00:12:55,860 --> 00:12:59,430 >> Сега в най-простите числено индексирани масив, тези ключове са това? 281 00:12:59,430 --> 00:13:02,250 282 00:13:02,250 --> 00:13:03,960 Нула, едно, две, три, нали? 283 00:13:03,960 --> 00:13:08,780 Старата школа нещата обратно от C. Но това може да също така да бъде струни като Foo, и бар, 284 00:13:08,780 --> 00:13:12,210 или Максуел, или друго такова низ. 285 00:13:12,210 --> 00:13:14,240 Така че мога да се наберат, че само за миг. 286 00:13:14,240 --> 00:13:17,550 >> Нека да вървим напред и да се обяви функция като - 287 00:13:17,550 --> 00:13:19,020 нека да направим натоварване () първо. 288 00:13:19,020 --> 00:13:20,690 Така функция натоварване (). 289 00:13:20,690 --> 00:13:23,440 И PHP е малко по-различна с това, че буквално напишете функция, но 290 00:13:23,440 --> 00:13:24,930 не въвеждайте връщания тип. 291 00:13:24,930 --> 00:13:28,760 Отивам да вървим напред и да кажем, че натоварване () функция, трябва да предприеме в 292 00:13:28,760 --> 00:13:31,000 аргумент $ речник, просто като C версия направих. 293 00:13:31,000 --> 00:13:32,510 Правя това от паметта. 294 00:13:32,510 --> 00:13:34,910 >> И аз предлагам, че съм ще направя това. 295 00:13:34,910 --> 00:13:37,080 Аз съм просто ще направи foreach. 296 00:13:37,080 --> 00:13:40,710 Отивам да се обадя на функция, наречена подадете (), която преминава в името на това 297 00:13:40,710 --> 00:13:44,990 файл, който е променлива $ Речник, колкото $ дума. 298 00:13:44,990 --> 00:13:49,410 И тогава вътре в мен за линия тук, аз съм ще отида напред и да се съхранява в моя 299 00:13:49,410 --> 00:13:57,440 $ $ Таблица, която се разчуе вярно. 300 00:13:57,440 --> 00:13:57,918 Готово. 301 00:13:57,918 --> 00:14:01,264 О, чакай. 302 00:14:01,264 --> 00:14:02,422 Готово. 303 00:14:02,422 --> 00:14:02,760 OK. 304 00:14:02,760 --> 00:14:04,970 >> Това е натоварване () функция казват в PHP. 305 00:14:04,970 --> 00:14:05,865 Сега, защо се случва това? 306 00:14:05,865 --> 00:14:07,010 И аз съм един вид измама тук. 307 00:14:07,010 --> 00:14:09,980 >> Така че, един, foreach видяхме накратко за последен път. 308 00:14:09,980 --> 00:14:13,680 Това просто означава, че можете да обхождане масив, без да пречи с I 309 00:14:13,680 --> 00:14:16,150 и п и плюс плюс, и всичко това. 310 00:14:16,150 --> 00:14:21,350 Dictionary е, разбира се, името на файла, нещо като големи или малки, на две 311 00:14:21,350 --> 00:14:22,830 речници ние използвахме за последен път. 312 00:14:22,830 --> 00:14:26,715 File е функция, която открива текст файл, се чете в ред по ред, както и 313 00:14:26,715 --> 00:14:29,840 ръцете ви връща обратно огромен масив, всеки един от които елементи е 314 00:14:29,840 --> 00:14:31,340 ред от този файл. 315 00:14:31,340 --> 00:14:36,040 Така че това е комбинация от FОтваряне на, и fread и линия, докато и неуспешно, 316 00:14:36,040 --> 00:14:37,080 и всичко това. 317 00:14:37,080 --> 00:14:40,150 И накрая, като думата просто означава, че е променлива Отивам да имат достъп до 318 00:14:40,150 --> 00:14:41,890 на всяка итерация в тази линия. 319 00:14:41,890 --> 00:14:46,910 >> Така че, накратко, това означава линейното тук отваряне на файл, чието име е в 320 00:14:46,910 --> 00:14:50,750 речник, променливата, обхождане той ред по ред, и всеки път, когато получите 321 00:14:50,750 --> 00:14:54,290 линия, се съхранява в променлива наречена дума, и след това направете нещо с думата. 322 00:14:54,290 --> 00:14:55,280 Какво искате да направите? 323 00:14:55,280 --> 00:14:58,110 Искам да сложа думата в хеш моята маса. 324 00:14:58,110 --> 00:15:00,860 >> Е, мога да сложа нещо в моя хеш таблица точно както в C 325 00:15:00,860 --> 00:15:02,140 използвате квадратни скоби. 326 00:15:02,140 --> 00:15:03,660 Това е името, за хеш моята маса. 327 00:15:03,660 --> 00:15:07,180 Отивам да се индекс в този хеш масата на това място. 328 00:15:07,180 --> 00:15:08,920 Така че не скоба нула, не една скоба. 329 00:15:08,920 --> 00:15:11,990 Bracket нещо цитат кавички, каквото и да е дума. 330 00:15:11,990 --> 00:15:15,200 И както може да се наложи в хеш Trie работна маса, просто съхранява 331 00:15:15,200 --> 00:15:17,650 ефективно булева, имплицитно или изрично. 332 00:15:17,650 --> 00:15:18,260 Готово. 333 00:15:18,260 --> 00:15:20,000 Аз съм съхраняване на стойността вярно. 334 00:15:20,000 --> 00:15:23,150 >> Сега има няколко неща, Аз просото тук. 335 00:15:23,150 --> 00:15:27,720 Технически, там ще бъде досадно нов ред, / п, в края на 336 00:15:27,720 --> 00:15:28,820 всяка от тези думи. 337 00:15:28,820 --> 00:15:31,770 Така че може би трябва да се обадя на функция PHP нарича котлет (), която ще 338 00:15:31,770 --> 00:15:33,460 съвсем буквално нарежете го. 339 00:15:33,460 --> 00:15:35,020 И аз всъщност трябва да направи още нещо. 340 00:15:35,020 --> 00:15:38,380 Вероятно трябва да увеличите размера на всяка итерация, така че аз съм следене 341 00:15:38,380 --> 00:15:39,560 в световен мащаб на какво е то. 342 00:15:39,560 --> 00:15:43,180 И честно казано, и това е една от най- глупав аспекти на PHP, ако сте 343 00:15:43,180 --> 00:15:46,950 с помощта на глобална променлива, трябва изрично да се каже, че сте. 344 00:15:46,950 --> 00:15:51,670 Така че аз ще действително да напишете в световната $ Размер, глобалната $ масата, а сега 345 00:15:51,670 --> 00:15:52,690 ми функция е завършена. 346 00:15:52,690 --> 00:15:57,475 >> Така че не е толкова просто, колкото преди, но вероятно отне по-малко време, отколкото на C 347 00:15:57,475 --> 00:15:58,220 версия, може би? 348 00:15:58,220 --> 00:15:58,730 OK. 349 00:15:58,730 --> 00:16:00,390 >> Така че сега нека да направим проверката () функцията. 350 00:16:00,390 --> 00:16:04,300 Да видим дали това най-малко се появиха на часове наред, че ни отне в C. Така че 351 00:16:04,300 --> 00:16:06,500 нека да вървим напред и да се обяви проверите като функция. 352 00:16:06,500 --> 00:16:09,070 Счита аргумент в слово, което ще дойдат правопис. 353 00:16:09,070 --> 00:16:13,410 И аз съм просто ще провери дали след променлива Isset, маса 354 00:16:13,410 --> 00:16:18,400 скоба strtolower на думата - 355 00:16:18,400 --> 00:16:20,590 нека да балансира всички мои скоби - 356 00:16:20,590 --> 00:16:24,275 след това се върнете вярно. 357 00:16:24,275 --> 00:16:27,020 358 00:16:27,020 --> 00:16:28,460 Друго - 359 00:16:28,460 --> 00:16:30,330 че е наистина трудно част от тази програма. 360 00:16:30,330 --> 00:16:31,940 Иначе, връщане фалшиви. 361 00:16:31,940 --> 00:16:32,630 Готово. 362 00:16:32,630 --> 00:16:33,460 Това е проверка (). 363 00:16:33,460 --> 00:16:34,520 >> Сега, защо става това? 364 00:16:34,520 --> 00:16:37,040 Е, едно минах с една дума, която е низ. 365 00:16:37,040 --> 00:16:41,400 Второ, аз съм проверка вътрешността на хашиш маса, който се нарича $ масата. 366 00:16:41,400 --> 00:16:45,470 Аз съм принуждавайки го в малки букви, като се обадите функция доста сходен tolower () в 367 00:16:45,470 --> 00:16:48,580 C, но това прави цялата дума, не един символ. 368 00:16:48,580 --> 00:16:52,680 И ако това е зададено, с други думи има е зададена стойност, с други думи, 369 00:16:52,680 --> 00:16:54,880 ако това е вярно, тогава да, това е думата. 370 00:16:54,880 --> 00:16:56,530 Защото аз го слагам там с товар (). 371 00:16:56,530 --> 00:16:59,100 И ако не, аз ще се върне фалшиви. 372 00:16:59,100 --> 00:17:00,090 >> Сега другите са лесни. 373 00:17:00,090 --> 00:17:03,570 Функция размер (), как мога да направя това? 374 00:17:03,570 --> 00:17:05,230 Аз основно се връщат $ размер. 375 00:17:05,230 --> 00:17:07,770 Но технически трябва да направите това досадно нещо. 376 00:17:07,770 --> 00:17:10,640 И всъщност се чуе, бях рязане единия ъгъл твърде много. 377 00:17:10,640 --> 00:17:12,920 Наистина трябва да се направи глобална $ масата. 378 00:17:12,920 --> 00:17:16,260 >> Но това се каза, разтоварване). 379 00:17:16,260 --> 00:17:17,380 Разтоварване () е невероятно. 380 00:17:17,380 --> 00:17:20,500 Функция разтоварване (). 381 00:17:20,500 --> 00:17:23,990 Как искам да приложи разтоварят (?) 382 00:17:23,990 --> 00:17:25,079 Готово. 383 00:17:25,079 --> 00:17:25,450 OK. 384 00:17:25,450 --> 00:17:28,900 >> Така разтоварване (), управление на паметта е напълно се погрижили за вас в 385 00:17:28,900 --> 00:17:31,800 нещо като PHP и много на по-високо ниво езици. 386 00:17:31,800 --> 00:17:32,600 Така че това е невероятно. 387 00:17:32,600 --> 00:17:36,080 Харесва ми защо, по дяволите, сме прекарали миналото плюс осем седмици за писане C 388 00:17:36,080 --> 00:17:41,030 очевидно много бавно, наистина времето консумират проблеми с десетки часа 389 00:17:41,030 --> 00:17:42,530 на работа по нашите колани? 390 00:17:42,530 --> 00:17:46,110 >> Е, за едно нещо, това може да работи Глобата за малки програми. 391 00:17:46,110 --> 00:17:47,840 Това със сигурност ускорява ми времето за разработка. 392 00:17:47,840 --> 00:17:49,790 Но нека да видим какво ще стане в реалния свят. 393 00:17:49,790 --> 00:17:52,370 >> Нека да отидат в тази директория в терминал. 394 00:17:52,370 --> 00:17:53,370 Има правопис. 395 00:17:53,370 --> 00:17:56,570 И забележи Като настрана, и може да са срещали този проблем в комплект 396 00:17:56,570 --> 00:17:58,190 шест или седем определен проблем. 397 00:17:58,190 --> 00:18:01,610 Не стриктно трябва да края PHP файлове с. PHP. 398 00:18:01,610 --> 00:18:05,250 Ако сложите ред като че първата такава оценка на самия връх, това е специална линия 399 00:18:05,250 --> 00:18:10,980 на синтаксис, който по същество означава, че на програма, наречена PHP и да го използвате, за да 400 00:18:10,980 --> 00:18:12,270 тълкува този файл. 401 00:18:12,270 --> 00:18:15,410 Така че сега никой не знае, че Бягам на PHP програма. 402 00:18:15,410 --> 00:18:19,860 Мога да го стартирате просто като че ли бяха нещо, съставен в C. 403 00:18:19,860 --> 00:18:20,650 >> Но тук е нещо. 404 00:18:20,650 --> 00:18:21,600 Всъщност, нека да го направим отново. 405 00:18:21,600 --> 00:18:23,530 Dropbox/pset6 /. 406 00:18:23,530 --> 00:18:25,390 Има правопис. 407 00:18:25,390 --> 00:18:26,720 OK, 0.44 секунди. 408 00:18:26,720 --> 00:18:28,080 Тя има по-бързо този път. 409 00:18:28,080 --> 00:18:29,745 >> Сега нека да отидат в PHP версия. 410 00:18:29,745 --> 00:18:43,070 411 00:18:43,070 --> 00:18:44,320 Хубаво докосване. 412 00:18:44,320 --> 00:18:50,830 413 00:18:50,830 --> 00:18:53,285 Но просто мисля, колко време Спасих в работно време. 414 00:18:53,285 --> 00:18:56,990 415 00:18:56,990 --> 00:18:57,790 OK. 416 00:18:57,790 --> 00:19:01,020 >> Така че 3,59 секунди, което всъщност Не звучи точно от двамата. 417 00:19:01,020 --> 00:19:03,710 Но това е, защото дълга история кратко, , когато сте отпечатване на огромно количество 418 00:19:03,710 --> 00:19:06,840 неща на екрана, че се забавя нещата. 419 00:19:06,840 --> 00:19:11,260 Какво е това наистина е процесора в на уред е 3,59 секунди, в 420 00:19:11,260 --> 00:19:15,260 За разлика от C, която е взела 0.44 секунди най-скоро. 421 00:19:15,260 --> 00:19:17,620 Това е наистина един ред по отношение на величина различно. 422 00:19:17,620 --> 00:19:20,280 >> Е, къде е тази цена идва? 423 00:19:20,280 --> 00:19:21,790 Защо е толкова много по-бавно? 424 00:19:21,790 --> 00:19:24,220 Защо PHP изпълнява толкова зле? 425 00:19:24,220 --> 00:19:25,242 Даниел? 426 00:19:25,242 --> 00:19:26,550 >> ПУБЛИКАТА: Вие всъщност не използвате хеш таблица. 427 00:19:26,550 --> 00:19:27,710 >> DAVID Malan: Аз наистина не използвате хеш таблица. 428 00:19:27,710 --> 00:19:28,760 Така че аз вид направих. 429 00:19:28,760 --> 00:19:29,870 Така че това е асоциативен масив. 430 00:19:29,870 --> 00:19:33,650 Най-вероятно, ако хората в PHP са наистина умни, те са използвали под 431 00:19:33,650 --> 00:19:39,520 качулка действително хеш таблица, приложена в нещо като C или C + +. 432 00:19:39,520 --> 00:19:41,290 Но. 433 00:19:41,290 --> 00:19:42,760 Да. 434 00:19:42,760 --> 00:19:44,010 >> ПУБЛИКАТА: [недоловим]. 435 00:19:44,010 --> 00:19:46,690 436 00:19:46,690 --> 00:19:47,080 >> DAVID Malan: Да. 437 00:19:47,080 --> 00:19:50,780 Така че всяка една от функциите, които съм написал сега - всъщност, може ли да се каже, че по веднъж 438 00:19:50,780 --> 00:19:51,480 малко по-силно? 439 00:19:51,480 --> 00:19:54,509 >> ПУБЛИКАТА: Всеки от функциите, които сте включили има много по-пълна 440 00:19:54,509 --> 00:19:56,610 капацитет, отколкото - 441 00:19:56,610 --> 00:19:57,550 >> DAVID Malan: Така че това е много вярно. 442 00:19:57,550 --> 00:20:01,490 Има много по-отгоре, че сме наистина не виждам, като се фокусира само върху 443 00:20:01,490 --> 00:20:03,730 dictionary.php, което аз току-що написах. 444 00:20:03,730 --> 00:20:08,020 От друга страна, има цяла преводач става във фонов режим. 445 00:20:08,020 --> 00:20:12,040 В действителност, когато се натъкнах на тази програма, тя не е действал, събрани нули и единици 446 00:20:12,040 --> 00:20:14,290 проектиран за моя Intel CPU. 447 00:20:14,290 --> 00:20:19,270 Напротив, той е действал ред по ред PHP код, който изглежда точно 448 00:20:19,270 --> 00:20:20,350 като сме го въвели. 449 00:20:20,350 --> 00:20:22,475 И така всеки път, когато използвате интерпретиран език, можете 450 00:20:22,475 --> 00:20:23,850 всъщност плащаме тази цена. 451 00:20:23,850 --> 00:20:27,010 Това ще отнеме известно време, за да прочетете вашия файл отгоре надолу, наляво, за да 452 00:20:27,010 --> 00:20:30,740 Добре, и после за изпълнението на всяка Онлайн отново и отново. 453 00:20:30,740 --> 00:20:34,250 >> Сега в действителност, особено в интернет, всъщност може да се ускори този процес 454 00:20:34,250 --> 00:20:38,660 от кеширане на резултатите от PHP код се интерпретира. 455 00:20:38,660 --> 00:20:41,640 И това има смисъл в интернет, тъй като ако не сте един потребител като 456 00:20:41,640 --> 00:20:46,300 ме тук, но 1000 или 10 000 потребители, а след това Може първи път файла е 457 00:20:46,300 --> 00:20:49,050 преглеждана това става бавно, но след това това е много по-бързо. 458 00:20:49,050 --> 00:20:51,000 >> Но това също, отново, е компромис. 459 00:20:51,000 --> 00:20:53,870 И за нещо подобно на данните от научните изследвания настроен, или дори нещо голямо като 460 00:20:53,870 --> 00:20:58,330 това, потребителите в крайна сметка ще започнете да се чувствате, че забавяне. 461 00:20:58,330 --> 00:21:02,670 >> Така че по-кратко, тълкува езици са много на мода, много популярен, и 462 00:21:02,670 --> 00:21:06,710 честно казано, са може би вие езици трябва да достигне, когато решаването на проблемите 463 00:21:06,710 --> 00:21:08,200 след CS50. 464 00:21:08,200 --> 00:21:12,720 Но осъзнавам колко сте наистина приема за даденост, намираща се под капака 465 00:21:12,720 --> 00:21:15,910 наистина тези последните няколко седмици в хеш таблици, и дървета, и се опитва, 466 00:21:15,910 --> 00:21:20,770 които се използват в крайна сметка действително приложат неща като отворена скоба, 467 00:21:20,770 --> 00:21:24,200 квадратна скоба, която можем сега с благодарност приемаме за даденост. 468 00:21:24,200 --> 00:21:26,360 >> Така че нека да погледнем сега в този уеб контекст. 469 00:21:26,360 --> 00:21:29,890 И споменах миналия път, че има куп свръхглобални в PHP, че 470 00:21:29,890 --> 00:21:32,490 наистина не са от значение в командния ред. 471 00:21:32,490 --> 00:21:36,210 Те са по-подходящи в контекста за използване в PHP уеб контекст. 472 00:21:36,210 --> 00:21:41,220 Така работи PHP на уеб сървър, за за генериране на подобни неща HTML. 473 00:21:41,220 --> 00:21:44,540 >> И ние погледна $ _GET и $ _POST, и това е, когато автоматично потребители " 474 00:21:44,540 --> 00:21:49,100 вход завършва просто ако подадат образуват във файл завършва на. PHP в уеб 475 00:21:49,100 --> 00:21:50,460 сървъра като уреда. 476 00:21:50,460 --> 00:21:53,310 Но нека да разгледаме накратко $ _COOKIE И $ _SESSION. 477 00:21:53,310 --> 00:21:56,670 >> От гледна точка на лаик, какво е бисквитка, като можете да го разбере в контекста на 478 00:21:56,670 --> 00:21:58,220 с помощта на интернет? 479 00:21:58,220 --> 00:21:59,450 >> ПУБЛИКАТА: файл на компютъра. 480 00:21:59,450 --> 00:21:59,920 >> DAVID Malan: Да. 481 00:21:59,920 --> 00:22:03,500 Това е файл на компютъра на потребителя засадена с каквото уебсайт 482 00:22:03,500 --> 00:22:04,410 се случи да посетите. 483 00:22:04,410 --> 00:22:07,334 Така че, когато отидете на Facebook, когато отидеш да bankofamerica.com, когато отидеш 484 00:22:07,334 --> 00:22:10,330 до google.com, когато отидете на почти всеки уебсайт в света тези дни, 485 00:22:10,330 --> 00:22:14,850 включително cs50.net, бисквитка е засадена на вашия компютър, която е 486 00:22:14,850 --> 00:22:19,800 или стойност, съхранявана в RAM във вашата компютъра в паметта на браузъра си, или 487 00:22:19,800 --> 00:22:22,800 понякога наистина е файл, съхраняван на вашия твърд диск. 488 00:22:22,800 --> 00:22:26,960 >> И това, което е обикновено се съхраняват в този файл не е вашето потребителско име, не ви 489 00:22:26,960 --> 00:22:31,060 парола, обикновено не е нещо, чувствителен освен ако сайта не е толкова 490 00:22:31,060 --> 00:22:35,040 добре с тяхната сигурност, а по-скоро това е голям уникален идентификатор сред 491 00:22:35,040 --> 00:22:35,680 други неща. 492 00:22:35,680 --> 00:22:38,920 Това е голям случайни числа засадени на вашия компютър, но можеш да се сетиш като 493 00:22:38,920 --> 00:22:42,740 нещо като виртуален печат ръка като от клуб или някакъв увеселителен парк, който 494 00:22:42,740 --> 00:22:47,160 позволява на служителите, собствениците на които услуга, за да си спомня кой сте. 495 00:22:47,160 --> 00:22:51,030 Така че, ако на големия случайно число е като 12345678, въпреки че е очевидно 496 00:22:51,030 --> 00:22:54,180 не е твърде произволен, мисля за това, тъй като ръка печат, че когато посещавате 497 00:22:54,180 --> 00:22:57,930 facebook.com за първи път, те подпечатва този номер на ръката си. 498 00:22:57,930 --> 00:23:01,510 И след това, защото вие говорите HTTP, вие е браузър, и защото Facebook 499 00:23:01,510 --> 00:23:06,440 очевидно говори същото като уеб сървър, протокол HTTP, казва, че 500 00:23:06,440 --> 00:23:09,930 по всяко време след това, посетете facebook.com, независимо дали това е втори 501 00:23:09,930 --> 00:23:13,560 по-късно, един час по-късно, дори и на следващия ден, толкова дълго, колкото ви е нужно изрично 502 00:23:13,560 --> 00:23:17,050 Излязохте, които ефективно е като измиване на ръцете. 503 00:23:17,050 --> 00:23:20,280 HTTP казва, че трябва да представите ръка печат всяко ваше време 504 00:23:20,280 --> 00:23:22,020 се върнете към този сайт. 505 00:23:22,020 --> 00:23:24,390 >> Какво Facebook след това се е, че те погледнете, че ръката печат и 506 00:23:24,390 --> 00:23:26,850 казват те, о, 123456789. 507 00:23:26,850 --> 00:23:30,260 Аз не знам на пръв поглед, че това е David Malan в Кеймбридж, 508 00:23:30,260 --> 00:23:34,690 Massachusetts, но те могат да проверят своята база данни и да кажа, о, лицето 509 00:23:34,690 --> 00:23:39,930 на чийто компютър засадихме 123456789 е David Malan от Cambridge, 510 00:23:39,930 --> 00:23:40,440 Масачузетс. 511 00:23:40,440 --> 00:23:46,000 Нека покажем, че потребителят след това профила си страница или негов News Feed. 512 00:23:46,000 --> 00:23:49,660 >> Но има един проблем тук, ако това е как наистина работи в интернет. 513 00:23:49,660 --> 00:23:51,390 Нека да разгледаме един бърз пример. 514 00:23:51,390 --> 00:23:55,190 Нека действително отиде да каже facebook.com. 515 00:23:55,190 --> 00:23:58,130 Но преди да можем да отидем там, да ми давай напред и да се отворят на Chrome 516 00:23:58,130 --> 00:23:59,790 Инспектор тук. 517 00:23:59,790 --> 00:24:01,140 Нека да погледнем в раздела мрежа. 518 00:24:01,140 --> 00:24:06,020 А сега да вървим напред и да въведете в https://facebook.com. 519 00:24:06,020 --> 00:24:09,410 И аз правя това, така че ние не виждаме всички тези пренасочвания и отпадъци 520 00:24:09,410 --> 00:24:10,660 време в търсене чрез тези. 521 00:24:10,660 --> 00:24:12,690 Нека ме удари влиза. 522 00:24:12,690 --> 00:24:13,130 >> Добре. 523 00:24:13,130 --> 00:24:14,580 Ние виждаме цял куп искания. 524 00:24:14,580 --> 00:24:15,640 Идва Facebook. 525 00:24:15,640 --> 00:24:16,930 Има цял куп файлове. 526 00:24:16,930 --> 00:24:19,290 И тук, на моето споменаване на последно време латентност, че е 527 00:24:19,290 --> 00:24:21,240 много HTTP заявки. 528 00:24:21,240 --> 00:24:23,700 Но първият е вероятно най-интересното. 529 00:24:23,700 --> 00:24:26,420 >> Така че нека да превъртите надолу, тук, и Ще увеличите в секунда. 530 00:24:26,420 --> 00:24:29,090 Това ще бъде един вид бъркотия, но нека да видим. 531 00:24:29,090 --> 00:24:31,660 Facebook ни изпращаща цял куп неща. 532 00:24:31,660 --> 00:24:33,490 >> Но чакай, интересно. 533 00:24:33,490 --> 00:24:37,880 Те засаждане не един, а четири ръчни печати върху ръката ми тук. 534 00:24:37,880 --> 00:24:40,400 Set-бисквитка, Set-бисквитка, настройка бисквитка, настройка бисквитка. 535 00:24:40,400 --> 00:24:44,030 И има няколко функции тук. 536 00:24:44,030 --> 00:24:46,170 Всички от тях спомена някои вид на годност. 537 00:24:46,170 --> 00:24:50,090 И изглежда, че Facebook се надява да ме помниш до 2015. 538 00:24:50,090 --> 00:24:53,670 Така че това е вероятно момента, до който Трябва да излезете или те просто ще 539 00:24:53,670 --> 00:24:55,710 автоматично се предположи, че съм няма да се върне. 540 00:24:55,710 --> 00:24:57,840 Така че това е действително един достоен период от време. 541 00:24:57,840 --> 00:24:59,170 >> А има и някои други неща се случват тук. 542 00:24:59,170 --> 00:25:03,036 Бисквитката изглежда насилствено заличава като казва, че е изтекъл през 1970 г. 543 00:25:03,036 --> 00:25:04,460 преди съществували бисквитки. 544 00:25:04,460 --> 00:25:06,510 Така че браузърът е просто ще да се предположи, OK, това е все едно 545 00:25:06,510 --> 00:25:07,910 измиване печат на ръце. 546 00:25:07,910 --> 00:25:11,240 >> Но сега, когато навигаторът ми прави последващо искане - 547 00:25:11,240 --> 00:25:14,340 позволете ми да отида напред и да направите това отново и презареждане. 548 00:25:14,340 --> 00:25:18,170 Сега нека да превъртите обратно до Съвета за топ искане и слизат 549 00:25:18,170 --> 00:25:20,760 тук, да поиска заглавки. 550 00:25:20,760 --> 00:25:21,390 Забележете това. 551 00:25:21,390 --> 00:25:25,280 Така че сега аз съм под заглавията не реагиране, но забележите, че казва заглавки на заявки. 552 00:25:25,280 --> 00:25:29,220 И забележете, че браузъра си, като част от искането си, след като удари презареждане има 553 00:25:29,220 --> 00:25:32,780 изпрати най-малко следните информация. 554 00:25:32,780 --> 00:25:34,670 Не настройка бисквитка, но бисквитка. 555 00:25:34,670 --> 00:25:38,750 Така че това е линията, заглавката HTTP така да се каже, когато навигаторът ми е нещо 556 00:25:38,750 --> 00:25:43,340 , без да ми знае, че това представяне ръката ми за проверка на Facebook. 557 00:25:43,340 --> 00:25:46,020 >> Така че тези бисквитки могат да бъдат използва след това за какво? 558 00:25:46,020 --> 00:25:49,420 За да си спомня кой си ти, или си спомня как много пъти съм бил там, или 559 00:25:49,420 --> 00:25:50,280 наистина нищо. 560 00:25:50,280 --> 00:25:52,742 >> Така че тук е counter.php. 561 00:25:52,742 --> 00:25:53,780 И нека да увеличите шрифта. 562 00:25:53,780 --> 00:25:58,380 И всеки път, когато презареди тази страница, бележка тя си спомни колко пъти 563 00:25:58,380 --> 00:25:59,250 Аз съм бил там. 564 00:25:59,250 --> 00:26:00,570 Е, това не е всичко, което впечатляващо. 565 00:26:00,570 --> 00:26:03,140 Нека просто да затворите този раздел, а сега нека се върнем към 566 00:26:03,140 --> 00:26:07,860 http://localhost/counter.php. 567 00:26:07,860 --> 00:26:08,970 >> О, това е интересно. 568 00:26:08,970 --> 00:26:10,960 Тя все още помни, дори макар че аз затворих раздела. 569 00:26:10,960 --> 00:26:14,010 И честно казано, ако затворите браузъра, ако се изпълнява по правилния начин, аз 570 00:26:14,010 --> 00:26:18,950 все още може да си спомни, че този потребител заслужава кой е той или тя за първи път, и 571 00:26:18,950 --> 00:26:22,840 само веднъж и да отида в менюто на Chrome, която тук е тук, и да отидете 572 00:26:22,840 --> 00:26:25,990 История и щракнете Clear Browsing Data, Както някои от вас може да имате в 573 00:26:25,990 --> 00:26:33,050 Минало, само тогава ще бисквитките действително да бъде заличена по време на Мрежата 574 00:26:33,050 --> 00:26:33,970 развитие. 575 00:26:33,970 --> 00:26:35,340 >> Така че, ако се върнем - 576 00:26:35,340 --> 00:26:37,080 нека затворим Gedit тук. 577 00:26:37,080 --> 00:26:38,910 И ако се върнем сега към този файл. 578 00:26:38,910 --> 00:26:44,210 Позволете ми да отида в нашия vhosts / Localhost / публично, и позволете ми да направя 579 00:26:44,210 --> 00:26:46,340 counter.php. 580 00:26:46,340 --> 00:26:48,350 Забележете, че това е доста проста програма. 581 00:26:48,350 --> 00:26:50,250 Това е доста прост сайт. 582 00:26:50,250 --> 00:26:51,770 >> Така че в началото на файла е само на коментари. 583 00:26:51,770 --> 00:26:54,930 Но ето един нов ред, който може да са видели вече в р-настроите седем, 584 00:26:54,930 --> 00:26:56,000 session_start (). 585 00:26:56,000 --> 00:27:00,380 Това е една линия на PHP код, който по същество казва на уеб сървъра, правят 586 00:27:00,380 --> 00:27:03,400 забравяйте да изкорени ръце и да направи забравяйте да проверите ръчни печати. 587 00:27:03,400 --> 00:27:06,810 Това е всичко, тази линия прави, и го прави всичко на този процес за нас. 588 00:27:06,810 --> 00:27:09,510 Тогава забележите Просто имам два клона тук. 589 00:27:09,510 --> 00:27:14,150 Ако ключът за борба вътре в този специален глобална променлива, наречена 590 00:27:14,150 --> 00:27:18,010 $ _SESSION Е настроен - с други думи, ако има някаква стойност там - 591 00:27:18,010 --> 00:27:22,440 нека си го получите и да го съхранява в локална променлива с име $ брояч. 592 00:27:22,440 --> 00:27:27,000 Иначе, нека да присвоите $ брояч стойността по подразбиране на 0. 593 00:27:27,000 --> 00:27:30,320 >> Сега тук е един от аспектите на PHP, че е едновременно благословия и проклятие. 594 00:27:30,320 --> 00:27:32,080 PHP е малко небрежен. 595 00:27:32,080 --> 00:27:35,160 Така че, докато в C, Какво би обхват на борбата са били 596 00:27:35,160 --> 00:27:36,725 тук или тук? 597 00:27:36,725 --> 00:27:39,270 598 00:27:39,270 --> 00:27:41,690 >> Тя щеше да бъде ограничено към тези фигурни скоби. 599 00:27:41,690 --> 00:27:42,090 Познайте какво? 600 00:27:42,090 --> 00:27:46,920 В PHP, тя съществува дори извън тези, фигурни скоби, тук и тук, 601 00:27:46,920 --> 00:27:49,120 и тук, и тук, и дори по-долу. 602 00:27:49,120 --> 00:27:52,400 Така че аз казвам това е благословия в смисъл, , че не е нужно да се мисли като 603 00:27:52,400 --> 00:27:54,070 трудно, както направихме преди седмица. 604 00:27:54,070 --> 00:27:56,880 Но тя също е малко на проклятие в тази без значение къде се използва променлива в 605 00:27:56,880 --> 00:28:00,020 PHP, най-малко в една програма като тази, това е глобално достъпна за 606 00:28:00,020 --> 00:28:01,170 добро или за лошо. 607 00:28:01,170 --> 00:28:06,130 Така че трябва да се има предвид, че сега променливите си не може да бъде дефинирано. 608 00:28:06,130 --> 00:28:07,640 Може би сте ги определили другаде. 609 00:28:07,640 --> 00:28:09,460 >> Но какво ще правя в крайна сметка? 610 00:28:09,460 --> 00:28:13,160 Отивам да се съхранява вътре, че глобалното променлива като стойност на 611 00:28:13,160 --> 00:28:17,060 брояч въведете резултата от прави брояч плюс един. 612 00:28:17,060 --> 00:28:18,910 Така че това е просто аритметика , който прави 613 00:28:18,910 --> 00:28:20,590 incrementation на този брояч. 614 00:28:20,590 --> 00:28:24,850 А фактът, че аз съм съхраняване че стойност обратно в тук е средство за 615 00:28:24,850 --> 00:28:29,970 същество актуализира базата данни за не забравяйте, че потребителското 123456789 е 616 00:28:29,970 --> 00:28:31,010 тук два пъти. 617 00:28:31,010 --> 00:28:33,780 И когато го направим отново следващия път, когато презаредите страницата, че ще ходи да се провери 618 00:28:33,780 --> 00:28:36,710 ръката ми печат и да кажа, о, потребителското 123456789 има сега 619 00:28:36,710 --> 00:28:38,410 тук от три пъти. 620 00:28:38,410 --> 00:28:43,390 >> И така, какво PHP и други подобни езици се прави за нас е, че те са фигуриращ 621 00:28:43,390 --> 00:28:47,720 как, къде и за колко време за съхраняване на ценности в този специален 622 00:28:47,720 --> 00:28:48,830 свръхглобална. 623 00:28:48,830 --> 00:28:52,750 И това свръхглобалните следващия път I посетете страницата е нещо като магически 624 00:28:52,750 --> 00:28:57,440 предварително населена, изпълнен със стойности, които бяхме там за последен път сте посетили, 625 00:28:57,440 --> 00:29:02,310 дали това беше преди секунди, една седмица Преди, или през 2013 г. и сега се говори 626 00:29:02,310 --> 00:29:03,790 около 2015. 627 00:29:03,790 --> 00:29:07,600 PHP и уеб сървър се грижи на всичко това за вас. 628 00:29:07,600 --> 00:29:08,850 >> ПУБЛИКАТА: [недоловим]. 629 00:29:08,850 --> 00:29:11,900 630 00:29:11,900 --> 00:29:15,760 >> DAVID Malan: Променливи в PHP са по същество винаги глобален, освен ако не 631 00:29:15,760 --> 00:29:18,400 ги декларира вътре в дадена функция, и след това те са локални за 632 00:29:18,400 --> 00:29:19,420 само функцията. 633 00:29:19,420 --> 00:29:22,300 Но тъй като аз не съм написал нито един функции, сега те са ефективно 634 00:29:22,300 --> 00:29:25,090 глобално през целия ми файл тук. 635 00:29:25,090 --> 00:29:26,040 >> ПУБЛИКАТА: Има ли начин да ги направят местен? 636 00:29:26,040 --> 00:29:28,470 >> DAVID Malan: Има ли някаква начин да ги направят местен? 637 00:29:28,470 --> 00:29:30,680 Само от тях опаковане в функции. 638 00:29:30,680 --> 00:29:32,790 Което в най-новата версия на PHP, можете да направите това с 639 00:29:32,790 --> 00:29:34,130 анонимен функция. 640 00:29:34,130 --> 00:29:35,930 Но повече за това, че в контекст на JavaScript. 641 00:29:35,930 --> 00:29:37,260 Но Краткият отговор е не. 642 00:29:37,260 --> 00:29:40,888 По-дълъг отговор е да. 643 00:29:40,888 --> 00:29:42,380 Ница. 644 00:29:42,380 --> 00:29:43,380 Добър викторина въпрос. 645 00:29:43,380 --> 00:29:43,930 Добре. 646 00:29:43,930 --> 00:29:47,760 >> Така че накрая, на самата страница е всъщност е доста прост. 647 00:29:47,760 --> 00:29:51,470 Забележете, че след като аз излезете PHP режим, отзоваване че всички тези неща надолу 648 00:29:51,470 --> 00:29:53,700 по-долу е просто ще се изплюе от сурова към браузъра. 649 00:29:53,700 --> 00:29:57,050 Което е добре, защото аз искам да изпратите потребителят някои HTML, но аз искам 650 00:29:57,050 --> 00:29:59,140 динамично да се актуализира, че HTML. 651 00:29:59,140 --> 00:30:03,930 И един начин да направите това е да сортирате на много бързо пуснете обратно в PHP 652 00:30:03,930 --> 00:30:07,730 режим, използване отворена скоба въпросителен знак знак за равенство, а след това на изхода на стойността 653 00:30:07,730 --> 00:30:08,650 на брояч. 654 00:30:08,650 --> 00:30:12,360 >> Или, ако това изглежда малко загадъчен, този знак за равенство е всъщност само някои 655 00:30:12,360 --> 00:30:16,190 синтактична захар за това ФОРМАТ ($ брояч). 656 00:30:16,190 --> 00:30:19,160 Но честно казано, това е само малко по-грозна и малко досадно да пишете. 657 00:30:19,160 --> 00:30:23,660 Така че много добре PHP предлага тази функция където може просто да го кажа по- 658 00:30:23,660 --> 00:30:25,450 накратко по същия начин. 659 00:30:25,450 --> 00:30:26,940 >> Така че това, което става под качулката? 660 00:30:26,940 --> 00:30:31,210 Нека най-бързо да потърсите в мрежата раздела тук за counter.php. 661 00:30:31,210 --> 00:30:35,090 И нека да вървим напред и първа нека да изчистите бисквитките. 662 00:30:35,090 --> 00:30:38,670 Нека е ясно, тъй като данните за сърфирането началото на времето. 663 00:30:38,670 --> 00:30:39,680 Сега нека се върнем тук. 664 00:30:39,680 --> 00:30:41,340 Сега нека да се презарежда страницата. 665 00:30:41,340 --> 00:30:42,170 И аз съм обратно на нула. 666 00:30:42,170 --> 00:30:44,810 Защото ръката ми печат е била измита, Сега получите нова бисквитка. 667 00:30:44,810 --> 00:30:48,780 >> Всъщност, ако погледнем в раздела мрежа и погледнете заглавията на отговор, известие 668 00:30:48,780 --> 00:30:51,960 че уредът ме изпраща бисквитка, чието име е донякъде 669 00:30:51,960 --> 00:30:55,820 произволно, но вид разумно, PHPSESSID. 670 00:30:55,820 --> 00:30:58,440 И това ме изпращане на тази наистина голям случайни числа. 671 00:30:58,440 --> 00:30:59,440 Това не е доста голям брой. 672 00:30:59,440 --> 00:31:00,390 Това не е съвсем в шестнадесетичен вид. 673 00:31:00,390 --> 00:31:03,600 Това е някакъв вид на буквено-цифров низ, но се предполага, че е случаен. 674 00:31:03,600 --> 00:31:06,830 И това е печат на ръката, така че да говори, че аз съм, отнасящи се до. 675 00:31:06,830 --> 00:31:11,960 >> В същото време, ако щракна презареждане и след това погледнете тази втора линия за моята втора 676 00:31:11,960 --> 00:31:17,600 искане, сега, че молбата ми заглавията включват PHPSESSID равнява на тази, 677 00:31:17,600 --> 00:31:19,390 Не настройвайте-бисквитка, но просто бисквитка. 678 00:31:19,390 --> 00:31:22,950 И това е моята презентация на браузъра от ръката ми печат. 679 00:31:22,950 --> 00:31:28,820 >> Така че сега като закачка, и ние ще говорим повече за това в една седмица или така, но 680 00:31:28,820 --> 00:31:31,590 по какъв начин това да направите уязвими, вашият Facebook акаунт 681 00:31:31,590 --> 00:31:34,137 уязвими, и други такива сметки уязвими? 682 00:31:34,137 --> 00:31:35,510 >> ПУБЛИКАТА: Ако някой има бисквитка. 683 00:31:35,510 --> 00:31:36,750 >> DAVID Malan: Да, ако някой има си бисквитка. 684 00:31:36,750 --> 00:31:39,920 Искам да кажа, наистина, много прилича на някои от вас може да са се опитали най-като клуб или 685 00:31:39,920 --> 00:31:44,030 увеселителен парк, ако се опитате нещо като това да копирате печата, макар и 686 00:31:44,030 --> 00:31:47,560 назад върху ръката на друг човек, и тогава той или тя го представя като 687 00:31:47,560 --> 00:31:53,250 собствената си, ако тя действително изглежда идентични, 123456789, тогава мрежата 688 00:31:53,250 --> 00:31:57,980 сървър е очевидно просто ще Вярвам, че този потребител, си ти. 689 00:31:57,980 --> 00:32:01,450 >> И това е наистина фундаментален заплаха всеки път, когато използвате бисквитки 690 00:32:01,450 --> 00:32:05,420 защото, ако някой просто така да се Пародии говорим си бисквитка, разбере какво 691 00:32:05,420 --> 00:32:08,660 е, или чрез наистина да го копирате , като погледнете в компютъра си 692 00:32:08,660 --> 00:32:09,890 и е като, OK. 693 00:32:09,890 --> 00:32:14,520 Бисквитка David е JJ3JIK и така нататък, и след това те са достатъчно умни, за да знаят 694 00:32:14,520 --> 00:32:18,080 как да се подреди на ръчно изпращате че бисквитка от браузър или от 695 00:32:18,080 --> 00:32:22,350 програма те пишат, те биха могли напълно влезете в уеб сайт, като теб. 696 00:32:22,350 --> 00:32:28,560 Това не е толкова трудно да се преструвам, да бъде някой друг, освен ако ние отново р-комплект 697 00:32:28,560 --> 00:32:30,790 две, което въведе какво? 698 00:32:30,790 --> 00:32:32,065 >> ПУБЛИКАТА: криптографията. 699 00:32:32,065 --> 00:32:33,860 >> DAVID Malan: Малко малко на криптографията. 700 00:32:33,860 --> 00:32:36,550 Simple криптография, поне в стандартно издание, но крипто 701 00:32:36,550 --> 00:32:36,870 все пак. 702 00:32:36,870 --> 00:32:37,410 по-малко. 703 00:32:37,410 --> 00:32:41,440 Така се оказва, ако криптира цялата тези заглавки, използвайки нещо, което 704 00:32:41,440 --> 00:32:48,770 сега може да знае по-известна като SSL, Secure Socket Layer, или https:// URL адреси, 705 00:32:48,770 --> 00:32:51,890 След това всички тези неща, които ние сме били поглеждайки всъщност са криптирани, 706 00:32:51,890 --> 00:32:54,800 което означава, че тя е като теб не може да чете печат на ръката. 707 00:32:54,800 --> 00:32:59,350 Само facebook.com може или google.com, или в този случай, уредът може да 708 00:32:59,350 --> 00:33:00,550 Четох, че ръката печат. 709 00:33:00,550 --> 00:33:04,020 >> За съжаление обаче, и отново, това е твърде подходящо с нещата НСА 710 00:33:04,020 --> 00:33:06,410 на края, дори SSL е чупливо. 711 00:33:06,410 --> 00:33:09,850 И това всъщност не е толкова трудно дори да се справи, че криптирането. 712 00:33:09,850 --> 00:33:12,040 Не толкова от напукване на криптирането но от надхитри 713 00:33:12,040 --> 00:33:15,720 браузър в декодиране данните преждевременно. 714 00:33:15,720 --> 00:33:17,880 Но отново, ние ще ви дразни с които не след дълго. 715 00:33:17,880 --> 00:33:21,242 За сега, просто се страхува. 716 00:33:21,242 --> 00:33:23,070 Това е трагично нещо вярно. 717 00:33:23,070 --> 00:33:23,760 >> Добре. 718 00:33:23,760 --> 00:33:27,910 Така, откъде идва това сега ни остави? 719 00:33:27,910 --> 00:33:29,010 Е, нека го направим. 720 00:33:29,010 --> 00:33:31,790 Да вървим напред и да се бърза закачка, преди да си вземе почивка. 721 00:33:31,790 --> 00:33:33,790 И мисля, че ние ще се бавим малко по-дълго днес, но ние ще се потопите в 722 00:33:33,790 --> 00:33:37,850 нещо съвсем ново и секси, която ще загрявка за още повече. 723 00:33:37,850 --> 00:33:38,950 Така че това е закачка. 724 00:33:38,950 --> 00:33:41,520 >> Така че, SQL, ние започнахме да говорим за все така накратко последен път. 725 00:33:41,520 --> 00:33:44,670 Наистина ще си изцапаш ръцете с част от него в р-комплект седем. 726 00:33:44,670 --> 00:33:46,480 И от гледна точка на лаик, какво прави SQL - 727 00:33:46,480 --> 00:33:47,110 S-Q-L - 728 00:33:47,110 --> 00:33:49,850 направя за вас? 729 00:33:49,850 --> 00:33:50,310 Какво е това? 730 00:33:50,310 --> 00:33:51,546 Да. 731 00:33:51,546 --> 00:33:53,240 >> Публика: Да те достъп до данни. 732 00:33:53,240 --> 00:33:53,360 >> DAVID Malan: Да. 733 00:33:53,360 --> 00:33:55,120 Това нека да има достъп до данни в база данни. 734 00:33:55,120 --> 00:33:56,710 Structured Query Language. 735 00:33:56,710 --> 00:33:59,890 И това е по същество език за програмиране. 736 00:33:59,890 --> 00:34:03,400 Не са характеристики на това, че ние дори няма да използват в клас. 737 00:34:03,400 --> 00:34:04,710 Но вие може ефективно да определят функции. 738 00:34:04,710 --> 00:34:06,870 Наричат ​​се съхраняват процедури SQL. 739 00:34:06,870 --> 00:34:09,860 Но ние ще се запази сравнително лесно и просто я използва за някои основни операции 740 00:34:09,860 --> 00:34:14,320 като избор на данни, въвеждане на данни, актуализиране на данни и изтриване на данни. 741 00:34:14,320 --> 00:34:17,400 >> И наистина може да се мисли за база данни, като база данни SQL, като просто 742 00:34:17,400 --> 00:34:18,800 е Microsoft Excel. 743 00:34:18,800 --> 00:34:21,989 Тъй като SQL отнася до релационна база данни, когато 744 00:34:21,989 --> 00:34:23,480 връзка просто означава, таблици. 745 00:34:23,480 --> 00:34:24,739 Редове и колони. 746 00:34:24,739 --> 00:34:27,929 Така че всичко, което можете да поставите в електронна таблица подобен на този или Google Docs, 747 00:34:27,929 --> 00:34:32,460 бихте могли да поставите в база данни SQL от обявяване на масата. 748 00:34:32,460 --> 00:34:34,800 >> Сега, как всъщност достъп тази информация? 749 00:34:34,800 --> 00:34:38,239 Е, с команди или запитвания по този начин. 750 00:34:38,239 --> 00:34:40,199 SELECT, вмъкване, обновяване и изтриване. 751 00:34:40,199 --> 00:34:44,489 И по-голямата част, тези, които са четири единствените съставки, които ще трябва да 752 00:34:44,489 --> 00:34:47,370 направи нещо доста силно в проблем определени седем. 753 00:34:47,370 --> 00:34:49,940 >> Сега през деня, нали всъщност взаимодействат с база данни, в 754 00:34:49,940 --> 00:34:52,730 черно и бяло терминален прозорец в мигащ бързо по този начин. 755 00:34:52,730 --> 00:34:56,370 И на базата данни, че бягаме от Уредът се нарича MySQL, което е 756 00:34:56,370 --> 00:34:58,560 безплатен и с отворен код за база данни. 757 00:34:58,560 --> 00:35:02,240 Ако Google и прочетете Wikipedia статия, вие ще знаете, че името е 758 00:35:02,240 --> 00:35:05,060 малко преход за някои версии на Linux. 759 00:35:05,060 --> 00:35:10,460 Maria база данни е всъщност вилицата така да се каже на MySQL. 760 00:35:10,460 --> 00:35:12,740 >> Накратко, Oracle купи MySQL. 761 00:35:12,740 --> 00:35:13,870 Oracle е голяма компания. 762 00:35:13,870 --> 00:35:17,010 Хората са притеснени, че ще вече не съществуват толкова отворен код, 763 00:35:17,010 --> 00:35:20,930 така че това е просто копие на MySQL, че е все още е свободен, все още отворен код, и 764 00:35:20,930 --> 00:35:23,550 инсталирани в Fedora Linux по подразбиране. 765 00:35:23,550 --> 00:35:26,130 >> Но това е нещо като болка в врата да се запознаят с 766 00:35:26,130 --> 00:35:27,310 база данни по този начин. 767 00:35:27,310 --> 00:35:30,560 Така че ние включваме в уреда CS50 безплатен отворен код инструмент, наречен 768 00:35:30,560 --> 00:35:31,700 PhpMyAdmin. 769 00:35:31,700 --> 00:35:33,940 Просто съвпадение, че това е писано в PHP. 770 00:35:33,940 --> 00:35:36,450 Не е фундаментална необходимо за PHP тук. 771 00:35:36,450 --> 00:35:40,090 Но това е само на уеб-базиран инструмент, който ние свален абсолютно безплатно, инсталирани в 772 00:35:40,090 --> 00:35:43,850 уреда, която ни позволява да имаме графичен потребителски интерфейс, с която 773 00:35:43,850 --> 00:35:48,610 да проучи р-комплект седем база данни с които да създават нови бази данни, 774 00:35:48,610 --> 00:35:51,980 казват за вашия собствен окончателен проект, ако искате харесва, и в крайна сметка създават 775 00:35:51,980 --> 00:35:55,900 динамични сайтове като CS50 финансите които ви позволяват да заявки за данни и 776 00:35:55,900 --> 00:35:58,140 актуализират данните динамично. 777 00:35:58,140 --> 00:36:01,420 >> Вие не ще трябва да се използва само обикновен текстов файл или CSV. 778 00:36:01,420 --> 00:36:05,950 Всъщност можете да използвате смарт база данни програма, така че да могат да изпълняват по- 779 00:36:05,950 --> 00:36:10,240 сложни заявки не само четене през всичко линейно. 780 00:36:10,240 --> 00:36:14,150 >> Така например, това е, което ние даваме ви от кутията за р-комплект седем. 781 00:36:14,150 --> 00:36:18,280 Това е таблица с очевидно по-малко три колони, един от които е 782 00:36:18,280 --> 00:36:21,450 потребителско име, една от които е хашиш, а другата от които е ID. 783 00:36:21,450 --> 00:36:26,200 >> Но интересното, и само за да разнищват една мисъл тук, потребителско име 784 00:36:26,200 --> 00:36:29,270 е вероятно вече е уникален, нали? 785 00:36:29,270 --> 00:36:31,190 Искам да кажа, най-всеки уеб сайт, ако имате потребителско име, там 786 00:36:31,190 --> 00:36:32,370 не може да бъде два Caesars. 787 00:36:32,370 --> 00:36:33,440 Не може да има две Malans. 788 00:36:33,440 --> 00:36:34,950 Не може да има две jharvards. 789 00:36:34,950 --> 00:36:35,600 Уникалното му. 790 00:36:35,600 --> 00:36:38,610 В противен случай, те не знаят коя jharvard е в действителност. 791 00:36:38,610 --> 00:36:42,710 И така, какво може да е мотивация за също като трета колона в ляво 792 00:36:42,710 --> 00:36:46,970 там нарича ID, което изглежда като номер, който е уникален по същия начин? 793 00:36:46,970 --> 00:36:51,300 Той се чувства малко съкратени на мен на пръв поглед. 794 00:36:51,300 --> 00:36:54,910 Защо може да бъде убедителна да има не само уникални потребителски имена, 795 00:36:54,910 --> 00:36:56,837 но също така и уникални номера? 796 00:36:56,837 --> 00:36:59,460 >> Публика: Те биха могли да имат една и съща парола. 797 00:36:59,460 --> 00:37:01,720 >> DAVID Malan: Хората могат да имат една и съща парола, разбира се. 798 00:37:01,720 --> 00:37:03,900 Това може да се случи абсолютно. 799 00:37:03,900 --> 00:37:08,270 Но ако те имат това уникално потребителско име, I биха казали, че това не може да кажем, 800 00:37:08,270 --> 00:37:11,630 въпрос, защото, ако не въведат в тяхната потребителско име, аз само трябва да се провери тяхната 801 00:37:11,630 --> 00:37:15,060 парола, техните хеш него. 802 00:37:15,060 --> 00:37:15,970 Защо иначе? 803 00:37:15,970 --> 00:37:17,950 >> Публика: По-бързо търсене. 804 00:37:17,950 --> 00:37:18,680 >> DAVID Malan: По-бързо търсене. 805 00:37:18,680 --> 00:37:19,548 Защо? 806 00:37:19,548 --> 00:37:21,460 >> Публика: ID е само един. 807 00:37:21,460 --> 00:37:24,040 >> DAVID Malan: ID е само един символ, или по-точно, това е номер, 808 00:37:24,040 --> 00:37:26,910 така че е вероятно 32 бита или нещо подобно. 809 00:37:26,910 --> 00:37:30,270 Като има предвид, потребителско име, очевидно Jason Hirschhorn е там е нещо 810 00:37:30,270 --> 00:37:33,900 абсурдно дълго, и че ще ми отнеме много повече време, за да низ 811 00:37:33,900 --> 00:37:40,910 за сравнение H-I-R-S-С-Н-Н-О-Р-М, а може би а / 0 или нещо подобно, за да 812 00:37:40,910 --> 00:37:45,100 да търсите Джейсън, за разлика от просто каза ми даде ръководство за номер две. 813 00:37:45,100 --> 00:37:46,510 Това е 32 бита. 814 00:37:46,510 --> 00:37:48,550 Това е един INT, че имате за сравнение. 815 00:37:48,550 --> 00:37:52,150 И наистина, това е точно защо бази данни са склонни да присвоите уникални идентификатори за 816 00:37:52,150 --> 00:37:53,710 редове в тях. 817 00:37:53,710 --> 00:37:56,280 >> Сега това, което другите типове данни са там Освен INT и очевидно 818 00:37:56,280 --> 00:37:57,160 струни като този? 819 00:37:57,160 --> 00:37:59,700 Е, за да бъде по-правилно, SQL бази данни, като 820 00:37:59,700 --> 00:38:02,060 MySQL, са CHAR полета. 821 00:38:02,060 --> 00:38:05,320 И ЧАР малко подвеждащо не е единичен CHAR. 822 00:38:05,320 --> 00:38:10,290 Поле CHAR в база данни MySQL е един или повече знаци, но това е 823 00:38:10,290 --> 00:38:11,780 фиксиран брой знаци. 824 00:38:11,780 --> 00:38:15,710 >> Така например, ако отида да PhpMyAdmin, тъй като може да има вече, или 825 00:38:15,710 --> 00:38:21,340 скоро ще създаде проблем, седем, и аз отивам в моята база данни, а просто за забавление, 826 00:38:21,340 --> 00:38:25,700 нека да създадете нова таблица, наречена тествате само с две колони. 827 00:38:25,700 --> 00:38:27,160 Тогава аз ще кликнете Go. 828 00:38:27,160 --> 00:38:30,070 И това ще стане доста познато, особено като си калайджия 829 00:38:30,070 --> 00:38:31,130 около по своему. 830 00:38:31,130 --> 00:38:34,140 Тук може да въведете ID, за да създадете нова таблица от тип INT. 831 00:38:34,140 --> 00:38:37,770 Но тук бих могъл да въведете потребителско име, за да пресъздаде, че по-рано маса. 832 00:38:37,770 --> 00:38:40,700 И забележи Имам цял куп на видове, за да избирате. 833 00:38:40,700 --> 00:38:43,610 >> И това също е защо PhpMyAdmin е нещо хубаво. 834 00:38:43,610 --> 00:38:46,770 Това е вид на самообучение, че може просто вид на точка и кликнете, и 835 00:38:46,770 --> 00:38:50,730 погледнете падащи менюта, и заключил от че това, което ви дава правомощия SQL. 836 00:38:50,730 --> 00:38:54,090 >> И наистина, ако избера CHAR, аз след това трябва да определят продължителността, или как 837 00:38:54,090 --> 00:38:55,940 много стойности, колко символа. 838 00:38:55,940 --> 00:39:00,090 Така че много общи ценности са неща, като 255, но това е малко по-дълго. 839 00:39:00,090 --> 00:39:02,250 Често е осем за потребителско име. 840 00:39:02,250 --> 00:39:03,590 Но това е малко по-малки, тези дни. 841 00:39:03,590 --> 00:39:05,430 Така че това е решение за дизайн. 842 00:39:05,430 --> 00:39:08,630 Дали е 8 символа, 32, 255, 1000? 843 00:39:08,630 --> 00:39:09,830 Това е наистина зависи от вас. 844 00:39:09,830 --> 00:39:12,350 Но поле CHAR е фиксиран номер. 845 00:39:12,350 --> 00:39:16,420 Така че изберете твърде малко, а ти си вид прецакани, ако искате по-дълго име. 846 00:39:16,420 --> 00:39:19,132 Изберете твърде много и това, което е В посока надолу? 847 00:39:19,132 --> 00:39:20,820 >> ПУБЛИКАТА: [недоловим]. 848 00:39:20,820 --> 00:39:21,620 >> DAVID Malan: Това е разточително. 849 00:39:21,620 --> 00:39:24,835 Точно както в C, ако имате по-голяма парче памет, отколкото ви трябва, вие сте 850 00:39:24,835 --> 00:39:27,190 просто губене на време и губи пространство. 851 00:39:27,190 --> 00:39:31,430 Така като алтернатива, съществува VARCHAR, който решава този проблем, като 852 00:39:31,430 --> 00:39:36,390 лечение на дължина, не като фиксирана дължина, но като максимална дължина, и се използва 853 00:39:36,390 --> 00:39:40,990 променлив брой символи, които след това има тенденция да се използва само като много символи като вас 854 00:39:40,990 --> 00:39:42,710 действително се нуждаят. 855 00:39:42,710 --> 00:39:43,670 Това звучи перфектно. 856 00:39:43,670 --> 00:39:45,640 >> Защо не можем да се отървем от Данни CHAR тип тогава? 857 00:39:45,640 --> 00:39:48,500 Какви могат да бъдат в неблагоприятна посока на използвайки VARCHARs, което звучи 858 00:39:48,500 --> 00:39:51,644 като това е хубава победа? 859 00:39:51,644 --> 00:39:52,596 Да? 860 00:39:52,596 --> 00:39:53,846 >> ПУБЛИКАТА: [недоловим]. 861 00:39:53,846 --> 00:39:57,360 862 00:39:57,360 --> 00:39:57,790 >> DAVID Malan: Добре, добре. 863 00:39:57,790 --> 00:40:01,101 Така че, ако всички ваши данни е същата дължина, какъв е грижа? 864 00:40:01,101 --> 00:40:05,250 >> ПУБЛИКАТА: Защото ти си губиш данни от всички тях казвам. 865 00:40:05,250 --> 00:40:09,060 >> DAVID Malan: Така че, ако всички ваши данни е със същата дължина, все пак, бих казал, 866 00:40:09,060 --> 00:40:12,300 че посочите максимална дължина на VARCHAR е по-различно от 867 00:40:12,300 --> 00:40:16,070 задаване на фиксирана дължина на CHAR ако Вие знаете, че редица по-рано. 868 00:40:16,070 --> 00:40:19,500 Но там е наистина, и аз ще вид извлечете от този отговор реалността 869 00:40:19,500 --> 00:40:22,610 че все още има максимум, което би могло да бъде досадно, особено ако 870 00:40:22,610 --> 00:40:25,920 натъкнете на име на човек, който е необичайно дълго време, че не си го направил 871 00:40:25,920 --> 00:40:26,860 предвиждане. 872 00:40:26,860 --> 00:40:31,420 И тя също е малко по-малко ефективно действително да се търси в VARCHARs като 873 00:40:31,420 --> 00:40:35,620 за разлика от търсенето символа, особено за дълги таблици, които имат много и 874 00:40:35,620 --> 00:40:36,510 много данни. 875 00:40:36,510 --> 00:40:40,060 Така че тук също е тематична отново няма очевиден избор. 876 00:40:40,060 --> 00:40:42,870 >> Така че, само за да ви даде усещане за друга типове данни, които могат да бъдат от интерес 877 00:40:42,870 --> 00:40:45,400 или за р-определя седем или в бъдеще, има INT. 878 00:40:45,400 --> 00:40:47,270 Има BIGINT, които е като дълго, дълго. 879 00:40:47,270 --> 00:40:48,880 Тя има тенденция да бъде 64 бита. 880 00:40:48,880 --> 00:40:51,640 Има DECIMAL, които ще видите в набор проблем, който е много 881 00:40:51,640 --> 00:40:55,300 чисти отговор на проблемите, с които срещнали с плувка и плаващ 882 00:40:55,300 --> 00:40:55,980 посочи неточности. 883 00:40:55,980 --> 00:40:57,390 И тогава там е DATETIME. 884 00:40:57,390 --> 00:41:01,530 Има буквално тип данни, който има да изглежда като година, месец, ден, 885 00:41:01,530 --> 00:41:03,730 и час, минута и секунда. 886 00:41:03,730 --> 00:41:07,470 >> Но SQL бази данни също имат неща, които ще наричат ​​индекси. 887 00:41:07,470 --> 00:41:11,630 И индекс е нещо, което укажете при създаването на таблицата, за да 888 00:41:11,630 --> 00:41:15,720 правят претърсвания и други операции по-ефективно. 889 00:41:15,720 --> 00:41:18,550 По-конкретно, че има нещо, наречено първичния индекс, който бихте могли да 890 00:41:18,550 --> 00:41:19,440 Декларирам, както следва. 891 00:41:19,440 --> 00:41:22,330 >> Ние направихме това за вас с маса потребители ние ви даваме. 892 00:41:22,330 --> 00:41:26,160 Но забележете, ако аз бяха ръчно пресъздаване таблицата на потребителите тук давайки 893 00:41:26,160 --> 00:41:27,110 това име на потребители. 894 00:41:27,110 --> 00:41:28,125 Аз вече определено ID. 895 00:41:28,125 --> 00:41:29,330 Аз определено INT. 896 00:41:29,330 --> 00:41:32,000 Аз определено потребителско име с максимално 32 символа. 897 00:41:32,000 --> 00:41:36,140 Но ако продължавате да превъртате, в това сравнително широк прозорец, известие, че има 898 00:41:36,140 --> 00:41:38,260 куп други неща, които могат да определят. 899 00:41:38,260 --> 00:41:40,950 >> One, не мога да се уточни атрибути като, знаете ли какво, това 900 00:41:40,950 --> 00:41:42,190 INT трябва да бъде грозен. 901 00:41:42,190 --> 00:41:45,510 Аз не искам отрицателни числа, така че нека го направим по-грозен. 902 00:41:45,510 --> 00:41:48,660 Null не е от значение тук, защото Аз искам всеки потребител да 903 00:41:48,660 --> 00:41:49,640 има уникален номер. 904 00:41:49,640 --> 00:41:50,830 Аз не искам това да се счита за нищожна. 905 00:41:50,830 --> 00:41:52,330 >> Но това е интересно. 906 00:41:52,330 --> 00:41:57,780 Мога да се уточни, че ID е или първичен ключ на тази база данни, или това е 907 00:41:57,780 --> 00:42:00,620 уникален, или това е индексиран, или пълен текст. 908 00:42:00,620 --> 00:42:05,630 Така че за днешните цели, дълга история Накратко, PRIMARY означава, че това ще 909 00:42:05,630 --> 00:42:10,570 бъде концептуално, така и технически областта, която ние използваме за да може еднозначно 910 00:42:10,570 --> 00:42:12,140 идентифициране на потребители. 911 00:42:12,140 --> 00:42:16,140 >> Така че, когато ние с нетърпение до потребителите, това е нещо като на обещание да ги търсите най-вече от 912 00:42:16,140 --> 00:42:17,370 този уникален идентификатор. 913 00:42:17,370 --> 00:42:21,930 И на базата данни ще се гарантира, че ако имате потребителски номер 3, не можеш 914 00:42:21,930 --> 00:42:25,400 физически вмъкнете друг потребител със същия номер 3. 915 00:42:25,400 --> 00:42:28,380 Базата данни просто ще откаже да запазите промените. 916 00:42:28,380 --> 00:42:32,310 Което е добре, защото можете защитят себе си от себе си. същност 917 00:42:32,310 --> 00:42:34,270 >> Алтернативно, за потребителско име. 918 00:42:34,270 --> 00:42:37,670 Така че на втория ред, изземване, е полето за потребителско име. 919 00:42:37,670 --> 00:42:41,860 Така че на втория ред тук е потребителско име, както направихме в левия там. 920 00:42:41,860 --> 00:42:43,940 >> Така че какво друго бих могъл да искам да посоча? 921 00:42:43,940 --> 00:42:47,840 Не ми е позволено, според SQL, да посочите две първични ключове. 922 00:42:47,840 --> 00:42:50,750 можете да укажете съвместна ключ, където можете Посетете двете полета, но те не могат 923 00:42:50,750 --> 00:42:52,260 индивидуално бъде първични ключове. 924 00:42:52,260 --> 00:42:54,750 Така че това е вън от въпроса. 925 00:42:54,750 --> 00:42:56,040 Така че, който може да искам да избера? 926 00:42:56,040 --> 00:42:59,710 >> Е, UNIQUE е подобна в дух на първичен ключ можете да зададете този 927 00:42:59,710 --> 00:43:03,570 полето трябва да бъде уникален, но е не ще бъде един 928 00:43:03,570 --> 00:43:04,410 Аз използвам през цялото време. 929 00:43:04,410 --> 00:43:08,450 И ние няма да използвате този един всички времето, поради каква причина отново? 930 00:43:08,450 --> 00:43:10,490 Това е по-бавно, ако потенциално това е дълга потребителско име. 931 00:43:10,490 --> 00:43:11,740 Това е просто загуба на време. 932 00:43:11,740 --> 00:43:16,140 >> INDEX, междувременно, се уточнява, че това е няма да бъде уникален, но бих искал 933 00:43:16,140 --> 00:43:19,470 да работят магията си под качулка да стане по-бързо за мен да 934 00:43:19,470 --> 00:43:21,420 търси в тази област. 935 00:43:21,420 --> 00:43:23,320 Така че това вероятно не е от значение тук. 936 00:43:23,320 --> 00:43:26,500 За потребителско име, щях да твърдят, че UNIQUE е добър отговор. 937 00:43:26,500 --> 00:43:31,200 Но да предположим, че сме направили потребителите по- интересно, отколкото само на потребителски имена, 938 00:43:31,200 --> 00:43:32,430 хешове и ID номера. 939 00:43:32,430 --> 00:43:33,860 Ами ако дава на хората трите имена? 940 00:43:33,860 --> 00:43:37,700 Какво става, ако им даваме адреси и други данни за тях? 941 00:43:37,700 --> 00:43:43,360 >> Е, ако се уточни, че на колона в Базата данни се индексира, това означава, че 942 00:43:43,360 --> 00:43:47,730 MySQL или Oracle, или каквото и база данни който използвате, трябва да работи магията му 943 00:43:47,730 --> 00:43:51,300 и използват някакъв вид фантазия данни структура като дърво, или Trie, или 944 00:43:51,300 --> 00:43:55,940 хеш таблица, или нещо, което да гарантира че когато търсите за данни, използвайки 945 00:43:55,940 --> 00:43:58,150 изберете по тази конкретна област - 946 00:43:58,150 --> 00:44:01,310 харесва ми покаже на всички, че живее на улица Оксфорд Стрийт. 947 00:44:01,310 --> 00:44:02,540 Заявка подобно. 948 00:44:02,540 --> 00:44:06,250 Ако сте задали предварително, че искате индекс на тази област, 949 00:44:06,250 --> 00:44:09,050 търсено ще бъде много, много по-бързо. 950 00:44:09,050 --> 00:44:12,090 >> Ако не зададете индекс, най-добрият можете да направите, е линейна търсене, ако 951 00:44:12,090 --> 00:44:13,030 това не е сортиран. 952 00:44:13,030 --> 00:44:16,220 Но ако посочите INDEX, смарт хора, които са направили на базата данни - 953 00:44:16,220 --> 00:44:19,340 хора като вас, които сега знаят дървета и се опитва и хеш таблици - 954 00:44:19,340 --> 00:44:23,220 автоматично изграждането на такава информация структура в RAM за да се уверите, че 955 00:44:23,220 --> 00:44:26,050 тези търсения са много по-бързо. 956 00:44:26,050 --> 00:44:29,660 >> Пълен текст междувременно е подобна по дух, но ви позволява да направите маска 957 00:44:29,660 --> 00:44:35,480 търсения, харесва ми покаже на всички, че живота на улиците, които започват с 958 00:44:35,480 --> 00:44:36,960 буквата O, независимо от причината. 959 00:44:36,960 --> 00:44:38,850 Можете да направите заместващи търсения харесва. 960 00:44:38,850 --> 00:44:45,880 Или по-непреодолими неща като шоу мен всеки, който има думата - 961 00:44:45,880 --> 00:44:49,400 Покажи ми всички, чието име започва с определена буква. 962 00:44:49,400 --> 00:44:51,880 Можете да търсите по ключови думи по този начин. 963 00:44:51,880 --> 00:44:52,630 Добре. 964 00:44:52,630 --> 00:44:55,760 >> Така че, дизайн възможности има потенциално. 965 00:44:55,760 --> 00:44:57,740 Има и други, че ще махна с ръце. 966 00:44:57,740 --> 00:45:00,530 Оказва се, че може да има различни двигатели за съхранение. 967 00:45:00,530 --> 00:45:04,390 И това е по-мистична, отколкото е необходимо сигурност за проблем определени седем. 968 00:45:04,390 --> 00:45:06,920 По подразбиране, вие използвате нещо, наречено InnoDB. 969 00:45:06,920 --> 00:45:10,910 Ще видите споменаване на това някъде в интерфейса за управление е най-вероятно. 970 00:45:10,910 --> 00:45:14,130 Но знаете, че има друг дизайн решения, които са от потенциален 971 00:45:14,130 --> 00:45:18,030 интерес идват окончателните проекти, ако правиш нещо, уеб-базирана. 972 00:45:18,030 --> 00:45:19,330 >> Но нека го направим. 973 00:45:19,330 --> 00:45:23,130 Да вървим напред и да направим тази на екрана като закачка за историята 974 00:45:23,130 --> 00:45:26,330 участието ви, съквартирант, и чаша мляко. 975 00:45:26,330 --> 00:45:28,240 Нека да дваминути или така пробие тук. 976 00:45:28,240 --> 00:45:31,060 И ако можете да си наоколо, нека дойде обратно, изглежда малко повече на SQL, и 977 00:45:31,060 --> 00:45:35,160 След това малко JavaScript с р-определени осем в ума. 978 00:45:35,160 --> 00:45:36,120 >> Добре. 979 00:45:36,120 --> 00:45:40,420 Така че, нека да си мислиш за При ъгъл, че може много лесно да възникнат 980 00:45:40,420 --> 00:45:44,240 в контекста на използване на база данни или честно казано, дори при използването на реални неща света 981 00:45:44,240 --> 00:45:46,280 като банкомати, за да получите пари. 982 00:45:46,280 --> 00:45:47,640 Така че тук е хладилник. 983 00:45:47,640 --> 00:45:50,040 Да предположим, че имаме една твърде в общежитието или къщата си. 984 00:45:50,040 --> 00:45:54,990 И имаш един съквартирант, и двете наистина желаете мляко например. 985 00:45:54,990 --> 00:45:57,210 >> Така ти се върнеш от клас един ден. 986 00:45:57,210 --> 00:45:58,490 Той или тя не е все още назад. 987 00:45:58,490 --> 00:45:59,180 Отваряш хладилника. 988 00:45:59,180 --> 00:46:00,870 Наистина ли искаш голяма чаша мляко. 989 00:46:00,870 --> 00:46:01,820 Не е мляко. 990 00:46:01,820 --> 00:46:02,920 И така, какво ще направиш? 991 00:46:02,920 --> 00:46:03,840 Затваряте хладилник. 992 00:46:03,840 --> 00:46:04,670 Вие вземете ключовете си. 993 00:46:04,670 --> 00:46:05,930 Излизаш на площада. 994 00:46:05,930 --> 00:46:09,240 И ще получите на опашка в CVS при тези самостоятелно касата неща, които винаги 995 00:46:09,240 --> 00:46:11,180 отнеме повече време, отколкото в действителност като касиери. 996 00:46:11,180 --> 00:46:11,820 Във всеки случай. 997 00:46:11,820 --> 00:46:15,490 >> Така че тогава, междувременно, точка точка точка, вашият съквартирант се прибира вкъщи и той или тя 998 00:46:15,490 --> 00:46:17,440 По същия начин има копнеж за мляко. 999 00:46:17,440 --> 00:46:20,380 Така че той или тя отваря хладилника, изглежда отвътре, и о, по дяволите. 1000 00:46:20,380 --> 00:46:21,160 Не мляко. 1001 00:46:21,160 --> 00:46:24,750 Така че той или тя тръгва, се случва да отида на другите CVS, която е само 1002 00:46:24,750 --> 00:46:27,900 пресечка по някаква причина, и той или тя получава в съответствие да си купи мляко. 1003 00:46:27,900 --> 00:46:30,480 >> Междувременно се върне у дома, той или тя дойде у дома, и това, което правя 1004 00:46:30,480 --> 00:46:31,980 Вие в крайна сметка има? 1005 00:46:31,980 --> 00:46:33,080 Два пъти повече мляко. 1006 00:46:33,080 --> 00:46:34,620 Но наистина не се харесва мляко, което много. 1007 00:46:34,620 --> 00:46:37,300 Така че сега имате толкова много мляко, което сега един от тях е отивал кисел 1008 00:46:37,300 --> 00:46:37,820 в крайна сметка. 1009 00:46:37,820 --> 00:46:39,370 Така че това е наистина лош проблем. 1010 00:46:39,370 --> 00:46:39,900 Така ли е? 1011 00:46:39,900 --> 00:46:41,990 >> И така, какво се е случило? 1012 00:46:41,990 --> 00:46:44,810 Така че основно, това е вид на нелепо например. 1013 00:46:44,810 --> 00:46:48,580 Но под капака, това, което сме имали се случи и тук е и на двама ви проверяват 1014 00:46:48,580 --> 00:46:52,390 състоянието на някои парчета памет, хладилник. 1015 00:46:52,390 --> 00:46:54,420 И двамата проверява състоянието на някои променливи. 1016 00:46:54,420 --> 00:46:57,360 И двамата си пое заключение че тогава действал. 1017 00:46:57,360 --> 00:47:01,420 Но за съжаление, докато си съквартирант е в магазина, състоянието на които 1018 00:47:01,420 --> 00:47:05,670 променлива промени, той или тя се върна и сега иска да се промени държавата, но 1019 00:47:05,670 --> 00:47:07,480 тя вече е променена на него или нея. 1020 00:47:07,480 --> 00:47:11,120 И разбира се, той или тя няма да има отиде до магазина, ако те са знаели 1021 00:47:11,120 --> 00:47:13,010 които вече са били на път. 1022 00:47:13,010 --> 00:47:16,430 >> Така че в реалния свят, как можа се избегне този проблем, като се предполага че имате 1023 00:47:16,430 --> 00:47:18,940 хладилник, може да има съквартирант, и всъщност като мляко? 1024 00:47:18,940 --> 00:47:19,760 >> Публика: Да общуваме. 1025 00:47:19,760 --> 00:47:20,580 >> DAVID Malan: Да общуваме. 1026 00:47:20,580 --> 00:47:21,160 OK. 1027 00:47:21,160 --> 00:47:22,500 Но как може да комуникирате? 1028 00:47:22,500 --> 00:47:23,990 >> ПУБЛИКАТА: Оставете бележка. 1029 00:47:23,990 --> 00:47:25,480 >> DAVID Malan: Остави бележка, нали? 1030 00:47:25,480 --> 00:47:28,025 Винаги оставяйте бележка, за феновете на шоуто. 1031 00:47:28,025 --> 00:47:31,580 Добре, така че винаги оставя бележка, или сложи наистина като катинар или нещо 1032 00:47:31,580 --> 00:47:35,440 на вратата на хладилника, която поддържа вашия съквартирант от проверка на състоянието на 1033 00:47:35,440 --> 00:47:36,540 тази променлива. 1034 00:47:36,540 --> 00:47:40,800 >> Сега, защо това може да бъде уместен за проблем създаде седем, или да банкомати. 1035 00:47:40,800 --> 00:47:46,780 Е, представете си един свят, в банкомат, където може да успеете да отидете до банкомат 1036 00:47:46,780 --> 00:47:48,920 машина тук, а друг ATM тук. 1037 00:47:48,920 --> 00:47:50,680 И това се случва доста често. 1038 00:47:50,680 --> 00:47:54,150 И предполагам, че е имал два АТМ карти, което е възможно да се получи. 1039 00:47:54,150 --> 00:47:57,420 И вие влизате в двете машини ефективно едновременно, да се надяваме 1040 00:47:57,420 --> 00:47:58,660 Макар че никой не гледа. 1041 00:47:58,660 --> 00:48:01,260 И тогава въведете във вашия PIN приблизително едновременно. 1042 00:48:01,260 --> 00:48:06,280 И след това да направите заявка за баланс , за да видите колко пари имате. 1043 00:48:06,280 --> 00:48:08,920 И нека да кажем, че имате $100 оставен в профила си. 1044 00:48:08,920 --> 00:48:13,310 Така че по същество едновременно, можете казват едно, нула, нула, въведете. 1045 00:48:13,310 --> 00:48:16,000 И да се надяваме да се върнем малко пари. 1046 00:48:16,000 --> 00:48:18,440 >> Но колко пари може да се върнеш? 1047 00:48:18,440 --> 00:48:21,710 Сега компютри в края на деня, особено ако говорим за 1048 00:48:21,710 --> 00:48:27,360 сървъри, не е задължително да правят неща в реда, в който се очаква. 1049 00:48:27,360 --> 00:48:30,860 >> Така че предполагам, че това, което се случва, защото на каквито мрежа скоростта въпроси там 1050 00:48:30,860 --> 00:48:34,530 са, или въпроси CPU има, или нещо подобно, да предположим, че 1051 00:48:34,530 --> 00:48:38,530 първо ATM проверява равновесие и вижда, о, този човек има $ 100. 1052 00:48:38,530 --> 00:48:41,840 Но след това е разсеян, защото може би резервно копие се случва и затова е 1053 00:48:41,840 --> 00:48:42,500 забавя. 1054 00:48:42,500 --> 00:48:45,080 Или може би, докато проверявате, мрежата връзка имам малко по-бавно, тъй като 1055 00:48:45,080 --> 00:48:45,910 това просто се случва. 1056 00:48:45,910 --> 00:48:47,100 Те са физически устройства. 1057 00:48:47,100 --> 00:48:49,330 Така че, междувременно, втората банкомата е задават едни и същи въпрос. 1058 00:48:49,330 --> 00:48:53,030 Колко пари David имате? $100 Е отговорът. 1059 00:48:53,030 --> 00:48:58,930 Но тъй като първият банкомат все още не е изпратил съобщението се изважда 100 щатски долара, както 1060 00:48:58,930 --> 00:49:03,000 Банкоматите са инспектирани трезора на банката, видим там 100 долара там, и сега 1061 00:49:03,000 --> 00:49:07,160 двете машини са потенциално ще изплюе отговор. 1062 00:49:07,160 --> 00:49:12,240 >> Сега, това е чудесно за вас в някакъв смисъл ако това, което банката прави в крайна сметка 1063 00:49:12,240 --> 00:49:17,200 се променя размера на минус 100 от задаване на променлива, равна на 1064 00:49:17,200 --> 00:49:21,570 банкова сметка, равна на 0, за разлика от да правиш минус 100. 1065 00:49:21,570 --> 00:49:24,410 Сега в най-лошия случай за банката - 1066 00:49:24,410 --> 00:49:27,470 или в най-добрия за банката, междувременно, те ви дам $ 200, и 1067 00:49:27,470 --> 00:49:31,690 банковата си сметка сега показва отрицателна $100, Които наистина не прави 1068 00:49:31,690 --> 00:49:32,950 се възползват вас изобщо. 1069 00:49:32,950 --> 00:49:36,500 Но въпросът е, че това състезание условие за две съквартирантки стават 1070 00:49:36,500 --> 00:49:40,660 мляко, или за две банкомати, които се опитват да получите пари и промяна на състоянието на трезора 1071 00:49:40,660 --> 00:49:44,510 в същото време съществува нито време имате база данни. 1072 00:49:44,510 --> 00:49:48,290 >> Сега в проблем създаде седем, този въпрос възниква в смисъл, че ако си купите 1073 00:49:48,290 --> 00:49:52,110 акции на Facebook склад, и след това за Например купувате втори дял от 1074 00:49:52,110 --> 00:49:55,160 Facebook склад, трябва да се направи решение като програмист. 1075 00:49:55,160 --> 00:49:58,710 За да се реши как да се актуализира база данни, шансовете са ти започваш да се 1076 00:49:58,710 --> 00:50:02,250 има един ред за този запас, и това е един от начините да го приложат. 1077 00:50:02,250 --> 00:50:06,640 И ти започваш да има право на един дял на FB, която е техният символ на акция 1078 00:50:06,640 --> 00:50:10,120 за това потребителско име, или този потребител ID, уникалният идентификатор. 1079 00:50:10,120 --> 00:50:12,340 >> Но същата история може да се случи тук. 1080 00:50:12,340 --> 00:50:15,800 Ако го направите SELECT в SQL, както ще видите в проблем създаде седем, когато те видя, 1081 00:50:15,800 --> 00:50:18,460 О, Дейвид има една акция на Facebook склад. 1082 00:50:18,460 --> 00:50:23,240 Позволете ми сега да се промени това, за да бъде два броя акции, защото той иска да си купи 1083 00:50:23,240 --> 00:50:24,120 втората акция. 1084 00:50:24,120 --> 00:50:27,860 Но предполагам, че Дейвид всъщност имаше две прозорци на браузъра се отварят, или се предполага, че 1085 00:50:27,860 --> 00:50:32,150 това е една обща сметка с двама съпрузи, и двете от тях се опитват да изпълняват 1086 00:50:32,150 --> 00:50:36,770 на една и съща операция, има също на съществува потенциал за решение да бъде 1087 00:50:36,770 --> 00:50:39,670 извършва въз основа на предишната състояние на света - 1088 00:50:39,670 --> 00:50:41,290 сметка има една акция - 1089 00:50:41,290 --> 00:50:45,630 и двете хора, или и двете сървъри, сега опитайте се да кажа, че нарастване на две акции. 1090 00:50:45,630 --> 00:50:49,020 Но в този случай, може да се зарежда ми пари и за двете акции, но 1091 00:50:49,020 --> 00:50:50,830 увеличен само, че едно време. 1092 00:50:50,830 --> 00:50:54,730 >> Така че по-кратко, основният проблем и тук, както с виц за напускане на 1093 00:50:54,730 --> 00:50:58,750 имайте предвид, или поставяне на катинар върху него, е Ако двама души или две теми - 1094 00:50:58,750 --> 00:50:59,930 мисля, че обратно към нулата - 1095 00:50:59,930 --> 00:51:03,220 да инспектира състоянието на някои променлива и след това се опитват да променят тази променлива, 1096 00:51:03,220 --> 00:51:07,950 но тези две неща не се случват в В същото време, но може да се прекъсва 1097 00:51:07,950 --> 00:51:11,500 от други неща, които се случват, данните могат да получите в много странно състояние. 1098 00:51:11,500 --> 00:51:15,450 И вие може да се ползва или може да пострада в смисъл на примера пари. 1099 00:51:15,450 --> 00:51:18,110 >> Така че в определен проблем седем, ние ви даваме този един ред с код, който дълго 1100 00:51:18,110 --> 00:51:21,000 Казано накратко, решава този проблем в MySQL. 1101 00:51:21,000 --> 00:51:24,950 Това много дълго инструкция, която не прави дори се поберат на една линия върху 1102 00:51:24,950 --> 00:51:30,370 екран тук гарантира, че вашата работа е това, което се нарича атомен. 1103 00:51:30,370 --> 00:51:33,720 Всичко това се случва веднага, или това не се случи на всички. 1104 00:51:33,720 --> 00:51:37,530 Това много дълго изречение не може да се прекъсва частично. 1105 00:51:37,530 --> 00:51:39,840 >> И това, което той прави, е буквално това, което казва. 1106 00:51:39,840 --> 00:51:44,200 Поставете в някаква маса следното три области тези специфични ценности, 1107 00:51:44,200 --> 00:51:47,280 но на дубликат ключ, не правете вложка. 1108 00:51:47,280 --> 00:51:48,280 Направете актуализация. 1109 00:51:48,280 --> 00:51:52,450 Така че това е все едно да правиш SELECT и INSERT така да се каже по едно и също време. 1110 00:51:52,450 --> 00:51:55,150 И това, което е ключът, който е вероятно се наричат ​​тук? 1111 00:51:55,150 --> 00:51:58,300 1112 00:51:58,300 --> 00:52:01,380 >> Оказва се, че и вие ще видите това в проблем създаде седем е спекулация, защото 1113 00:52:01,380 --> 00:52:06,040 ние сме там, за да бъде обявен за уникален ключ на тази маса, така че 1114 00:52:06,040 --> 00:52:08,480 не може да има няколко реда за един и същи потребител с 1115 00:52:08,480 --> 00:52:10,150 същия символ стотинка състав - 1116 00:52:10,150 --> 00:52:13,780 в този пример тук, DVN.V е глупаво стотинка състав, който ние 1117 00:52:13,780 --> 00:52:14,980 вижте в спецификацията. 1118 00:52:14,980 --> 00:52:17,860 Защото ние сме декларирали, че тя да бъде уникален, Какво означава това е, че ако 1119 00:52:17,860 --> 00:52:23,580 опитайте да поставите дубликат ред, вие сте вместо да го актуализира, без да 1120 00:52:23,580 --> 00:52:27,020 Някой друг има шанс да се промени състоянието на света, един от двамата. 1121 00:52:27,020 --> 00:52:29,400 Така че по-кратко, това ще гарантира, нещата са атомните. 1122 00:52:29,400 --> 00:52:32,530 >> По-общо казано обаче, бази данни като MySQL - 1123 00:52:32,530 --> 00:52:35,460 и не е нужно тази функция за р-определя седем, но имайте предвид, за 1124 00:52:35,460 --> 00:52:36,200 бъдещето - 1125 00:52:36,200 --> 00:52:38,870 подкрепят това, което се нарича сделки, , където можете да се каже, 1126 00:52:38,870 --> 00:52:40,990 За започване на транзакцията буквално. 1127 00:52:40,990 --> 00:52:43,270 След това можете да изпълните две SQL отчети. 1128 00:52:43,270 --> 00:52:45,710 И една SQL изявление, както ще видите в р-определя седем, изглежда малко 1129 00:52:45,710 --> 00:52:46,750 нещо като това. 1130 00:52:46,750 --> 00:52:48,820 Актуализиране на таблица, наречена сметка. 1131 00:52:48,820 --> 00:52:52,550 Задайте колоната баланс равен на каквото и Колоната на баланс в момента 1132 00:52:52,550 --> 00:52:57,280 е минус 1000, където е цифрата, номер на сметка, като потребителско име, 1133 00:52:57,280 --> 00:53:00,830 е равно на 2, и след това се актуализира сметка Дот дот точка. 1134 00:53:00,830 --> 00:53:04,350 >> Така че от гледна точка на лаик, какво тези два заявки изглежда да се прави в на 1135 00:53:04,350 --> 00:53:05,840 реалния свят, чувство за банкиране? 1136 00:53:05,840 --> 00:53:07,440 >> ПУБЛИКАТА: Прехвърляне към спестявания. 1137 00:53:07,440 --> 00:53:08,020 >> DAVID Malan: Точно така. 1138 00:53:08,020 --> 00:53:10,470 Прехвърляне на средства от една сметка на другия. 1139 00:53:10,470 --> 00:53:14,400 И това е още един пример, където можете наистина искам тези две неща да се случат 1140 00:53:14,400 --> 00:53:15,570 или не се случи. 1141 00:53:15,570 --> 00:53:18,880 Вие не искате нещо да получите в средната от тях и потенциално обърквам 1142 00:53:18,880 --> 00:53:22,220 по математика, или обърквам колко пари имаш, или колко 1143 00:53:22,220 --> 00:53:23,170 пари банката има. 1144 00:53:23,170 --> 00:53:26,890 Така че това, което е наистина хубаво за сделки в MySQL е, че и 1145 00:53:26,890 --> 00:53:30,160 бази данни, по-общо, е, че те и интелигентни хора, които са приложени 1146 00:53:30,160 --> 00:53:33,670 тези функции да разбера как да се направи сигурен, че и двете от тези неща се случват 1147 00:53:33,670 --> 00:53:35,120 или изобщо не. 1148 00:53:35,120 --> 00:53:38,580 >> И ако наистина сте се стремят да направят уеб сайт, който се използва от хора на 1149 00:53:38,580 --> 00:53:41,490 кампуса, хората в реалния свят, правят нещо в смисъл на стартиране, 1150 00:53:41,490 --> 00:53:43,300 те са видове проектни решения, които 1151 00:53:43,300 --> 00:53:45,020 стане някога толкова важно. 1152 00:53:45,020 --> 00:53:48,240 В противен случай, да започнете да загубите данни, губят потребители, или в най-лошия случай, тъй като 1153 00:53:48,240 --> 00:53:51,800 сме виждали тук, потенциално губят пари. 1154 00:53:51,800 --> 00:53:56,180 Така че отново, повече за това в определен проблем седем, както и може би някои от 1155 00:53:56,180 --> 00:53:57,530 ти в крайните проекти. 1156 00:53:57,530 --> 00:54:01,870 >> Така че нека да се промени тази картина имахме миг преди просто в още един начин. 1157 00:54:01,870 --> 00:54:04,070 Така че нека всъщност да видим дали мога - 1158 00:54:04,070 --> 00:54:06,030 Не, че го няма. 1159 00:54:06,030 --> 00:54:06,690 Ето го. 1160 00:54:06,690 --> 00:54:09,020 >> Така че това е мястото, където ние напуснахме за последен път. 1161 00:54:09,020 --> 00:54:12,390 И се оказва, че ще хвърля още едно нещо в микс тук - 1162 00:54:12,390 --> 00:54:14,510 един език, наречен JavaScript. 1163 00:54:14,510 --> 00:54:18,060 Така че JavaScript всъщност се вписва в това парче - 1164 00:54:18,060 --> 00:54:22,086 и аз не съм съвсем остави достатъчно място, така че това не е сега, за да мащабирате. 1165 00:54:22,086 --> 00:54:23,900 ОК, това е наистина жалко. 1166 00:54:23,900 --> 00:54:27,075 ОК, така че това е JavaScript. 1167 00:54:27,075 --> 00:54:27,340 Добре. 1168 00:54:27,340 --> 00:54:28,760 Аз съм наистина го прави лоша услуга. 1169 00:54:28,760 --> 00:54:29,390 Добре. 1170 00:54:29,390 --> 00:54:34,790 >> Така че JavaScript е друг програмиране език, и нашата последна, ако това помага 1171 00:54:34,790 --> 00:54:37,770 уверя, че там не е много по- на пожарните хидранти тук. 1172 00:54:37,770 --> 00:54:41,100 Така че JavaScript е интерпретиран език, което означава, че не 1173 00:54:41,100 --> 00:54:42,670 го компилирате в нули и единици. 1174 00:54:42,670 --> 00:54:43,690 Ти просто го стартирате. 1175 00:54:43,690 --> 00:54:47,680 Но това, което е коренно различна с JavaScript обикновено е, че 1176 00:54:47,680 --> 00:54:49,815 не го изпълни на вашия уеб сървър. 1177 00:54:49,815 --> 00:54:52,570 Тя не се изпълняват в уред сам по себе си. 1178 00:54:52,570 --> 00:54:57,490 Напротив, той се изтегля от потребителя чрез HTTP в браузъра си - 1179 00:54:57,490 --> 00:55:00,260 Chrome, Safari, Internet Explorer, Firefox, каквото - 1180 00:55:00,260 --> 00:55:03,860 и това е браузър, който изпълнява тази конкретен език за програмиране. 1181 00:55:03,860 --> 00:55:08,000 >> Така че, за да бъде ясно, PHP до този момент е било изпълнено, в командния ред в 1182 00:55:08,000 --> 00:55:11,290 нашия черен и бял прозорец, на предприятието на сървъра като уредът, компютър 1183 00:55:11,290 --> 00:55:14,490 Харесва уреда, или това е било екзекутиран от уеб сървър 1184 00:55:14,490 --> 00:55:15,860 работи на компютър. 1185 00:55:15,860 --> 00:55:20,490 Но темата тук е, че PHP досега е изпълнен от страна на сървъра, така че 1186 00:55:20,490 --> 00:55:24,820 потребителя и браузъра на потребителя никога не вижда линията на PHP код. 1187 00:55:24,820 --> 00:55:28,530 >> В действителност, ако сте някога отвори браузър за друга вашия сайт или и вие 1188 00:55:28,530 --> 00:55:32,400 всъщност виждате PHP код в прозореца, някой се е прецакал. 1189 00:55:32,400 --> 00:55:34,950 Тъй като това не е писано да бъде изпраща на сваляне директно. 1190 00:55:34,950 --> 00:55:38,150 Той е трябвало да бъде изпълнена и се обърна в нещо като HTML. 1191 00:55:38,150 --> 00:55:40,120 >> Но JavaScript е по същество обратното. 1192 00:55:40,120 --> 00:55:44,350 Тя е предназначена да се управлява обикновено вътре на прозореца на браузъра на потребителя. 1193 00:55:44,350 --> 00:55:46,840 И какви видове уеб сайтове използват JavaScript тогава тези дни? 1194 00:55:46,840 --> 00:55:49,640 1195 00:55:49,640 --> 00:55:52,180 >> Подобно буквално всеки популярен уебсайт. 1196 00:55:52,180 --> 00:55:55,430 Всеки сайт, че вие ​​вероятно използват ежедневно използват JavaScript за на 1197 00:55:55,430 --> 00:55:57,330 простият и дори най-секси черти. 1198 00:55:57,330 --> 00:55:59,800 >> Значи нещо като Facebook Чат, ако използвате това. 1199 00:55:59,800 --> 00:56:01,040 Как се работи в действителност? 1200 00:56:01,040 --> 00:56:05,090 Ами до този момент, всички неща, които съм направено с HTML и PHP приема, че 1201 00:56:05,090 --> 00:56:08,750 вие издърпайте нагоре URL, и ви удари Enter, и ще видите някои HTML съдържание. 1202 00:56:08,750 --> 00:56:11,970 И като кликнете върху връзката, която променя URL, промени на страницата, и презарежданията 1203 00:56:11,970 --> 00:56:12,740 някои ново съдържание. 1204 00:56:12,740 --> 00:56:16,340 Кликнете друг URL, или да внесе формуляр, можете се набързо към друга страница и 1205 00:56:16,340 --> 00:56:17,420 можете да видите някои ново съдържание. 1206 00:56:17,420 --> 00:56:22,710 >> Но с помощта на нещо като Facebook Chat, или Gchat, или Google Maps, рядко 1207 00:56:22,710 --> 00:56:27,350 прави цялата страница на опресняване, така че ще видите бял екран за миг и 1208 00:56:27,350 --> 00:56:28,470 след това ново съдържание. 1209 00:56:28,470 --> 00:56:32,610 По-скоро, уеб страници днес са динамично Първи актуализиран отново и 1210 00:56:32,610 --> 00:56:35,570 отново и отново всички видове от зад кулисите. 1211 00:56:35,570 --> 00:56:38,560 И се оказва, че когато ходят на нещо като Facebook, или Gchat, 1212 00:56:38,560 --> 00:56:43,050 или Gmail и актуализации на страницата автоматично, без презареждане на 1213 00:56:43,050 --> 00:56:47,630 целия екран, това, което се е случило е, че браузъра си е направил нещо като тайно 1214 00:56:47,630 --> 00:56:49,410 допълнителни HTTP заявки - 1215 00:56:49,410 --> 00:56:52,740 не за цели уеб страници, но само за малки парчета на данни, както и 1216 00:56:52,740 --> 00:56:55,740 мигновено съобщение, че вашият приятел просто Вие или актуализацията на състоянието изпратено че 1217 00:56:55,740 --> 00:56:58,210 някой просто ви, или чуруликане изпратен че някой току-що е пратил. 1218 00:56:58,210 --> 00:57:02,120 Това е просто вземане на малки искания за данни, и след това с помощта JavaScript, този 1219 00:57:02,120 --> 00:57:06,370 език за програмиране, за да се промени това, което уеб страница изглежда като без съгласието на 1220 00:57:06,370 --> 00:57:09,860 сървър помага, без сървъра генериране, че HTML. 1221 00:57:09,860 --> 00:57:13,820 >> Така че в кратко, JavaScript може да се използва след това да донесе не само нови данни от 1222 00:57:13,820 --> 00:57:16,750 сървъра без презареждане цяло страница или подаване на формуляр. 1223 00:57:16,750 --> 00:57:20,060 Тя може също да се използва за промяна т. нар. Дом - 1224 00:57:20,060 --> 00:57:21,520 документ обектен модел - 1225 00:57:21,520 --> 00:57:24,620 която е само фантазия начин за заявявайки, че дървото на HTML 1226 00:57:24,620 --> 00:57:26,220 че видяхме за последен път. 1227 00:57:26,220 --> 00:57:31,640 >> Така че да се успокои, JavaScript е синтактично, така че подобно на C, както добре. 1228 00:57:31,640 --> 00:57:32,820 Няма никаква основна функция. 1229 00:57:32,820 --> 00:57:35,430 Просто започнете да пишете кода и тя ще се изпълнява, или 1230 00:57:35,430 --> 00:57:36,900 тълкува по-правилно. 1231 00:57:36,900 --> 00:57:38,660 Условия ще изглеждат по този начин. 1232 00:57:38,660 --> 00:57:41,230 Не различен от C или PHP за този въпрос. 1233 00:57:41,230 --> 00:57:43,890 Булеви изрази или-Ед заедно ще изглежда така. 1234 00:57:43,890 --> 00:57:45,590 Anded заедно да изглежда така. 1235 00:57:45,590 --> 00:57:47,750 >> Ключове ще изглеждат по този начин. 1236 00:57:47,750 --> 00:57:49,440 За вериги ще изглеждат по този начин. 1237 00:57:49,440 --> 00:57:51,060 Докато линии ще изглеждат по този начин. 1238 00:57:51,060 --> 00:57:53,316 Смятате докато примки ще изглеждат по този начин. 1239 00:57:53,316 --> 00:57:54,780 >> Това е нещо ново. 1240 00:57:54,780 --> 00:57:58,753 Така че JavaScript не е foreach изграждане на себе си, но този конструкт 1241 00:57:58,753 --> 00:58:03,870 за променлива аз в масив, и аз в тази случай става стойност индекс. 1242 00:58:03,870 --> 00:58:06,880 Така че е малко по-различна от тази foreach, че новите версии на 1243 00:58:06,880 --> 00:58:10,280 JavaScript излизат през цялото време, , така че дори тези черти на езика 1244 00:58:10,280 --> 00:58:10,880 се развива. 1245 00:58:10,880 --> 00:58:16,920 >> И Като настрана, JavaScript тези дни може да се използва на сървър, както 1246 00:58:16,920 --> 00:58:19,920 PHP, използвайки рамка, наречена Node.js. 1247 00:58:19,920 --> 00:58:24,670 Един от TFS CS50 е, Кевин, е водил семинар по Node.js че е на разположение на 1248 00:58:24,670 --> 00:58:26,440 cs50.net/seminars. 1249 00:58:26,440 --> 00:58:28,830 Така че, ако сте любопитни, знам, че ти можете да използвате тази на сървъра страна като 1250 00:58:28,830 --> 00:58:33,870 добре, но това е една сравнително нова тенденция, но мощен при това. 1251 00:58:33,870 --> 00:58:35,270 >> Това е малко по-различна. 1252 00:58:35,270 --> 00:58:37,910 Това е масив в JavaScript. 1253 00:58:37,910 --> 00:58:40,115 И това, което ви се струва различен в сравнение с C или PHP? 1254 00:58:40,115 --> 00:58:43,890 1255 00:58:43,890 --> 00:58:47,420 Има няколко бързи истории ние можем да кажем тук. 1256 00:58:47,420 --> 00:58:49,367 Какво липсва в сравнение с PHP? 1257 00:58:49,367 --> 00:58:51,652 >> ПУБЛИКАТА: [недоловим]. 1258 00:58:51,652 --> 00:58:52,110 >> DAVID Malan: Да? 1259 00:58:52,110 --> 00:58:53,322 Съжаляваме, повтарям? 1260 00:58:53,322 --> 00:58:54,740 >> ПУБЛИКАТА: Не се обявява вида на променлива. 1261 00:58:54,740 --> 00:58:56,390 >> DAVID Malan: Ние не се обявява вида на променлива. 1262 00:58:56,390 --> 00:58:59,630 Така че всъщност съвсем като PHP, ние не сме определяне на видовете тази променлива. 1263 00:58:59,630 --> 00:59:02,670 Напротив, ние сме по-генерично казвайки VAR за променлива. 1264 00:59:02,670 --> 00:59:06,690 Ние не разполагаме с противообществените прояви на PHP е знак за долар, което, докато досадно да 1265 00:59:06,690 --> 00:59:09,160 тип, прави по-ясно, че нещо не е променлива. 1266 00:59:09,160 --> 00:59:11,830 Има предвид, че тук, ние сме нещо като обратно към Подход C, като просто се обадите 1267 00:59:11,830 --> 00:59:14,500 променлива с името, което искаме да му се даде, като номера. 1268 00:59:14,500 --> 00:59:17,170 И също като PHP, ние имаме квадратни скоби за 1269 00:59:17,170 --> 00:59:19,170 ценности вътре в този масив. 1270 00:59:19,170 --> 00:59:22,490 >> Така променливи в JavaScript също може да изглежда така. 1271 00:59:22,490 --> 00:59:26,900 Забележете, тук това е низ, наречен S, но по подобен начин имаме не са посочени 1272 00:59:26,900 --> 00:59:28,750 че това е низ. 1273 00:59:28,750 --> 00:59:33,160 Тук обаче е функция, която не прави съществуват в абсолютно същия начин в PHP, 1274 00:59:33,160 --> 00:59:34,460 но малко по подобен начин. 1275 00:59:34,460 --> 00:59:36,530 Това е един обект в JavaScript. 1276 00:59:36,530 --> 00:59:42,110 И обекти са сортиране на швейцарската армия Нож на структурата на данните, в които можете 1277 00:59:42,110 --> 00:59:43,900 може да ги използва за произволен брой неща. 1278 00:59:43,900 --> 00:59:46,860 >> Ето, например, ние сме за обявяване променлива наречена цитат. 1279 00:59:46,860 --> 00:59:49,110 В зависимост от типа на тази променлива е обект. 1280 00:59:49,110 --> 00:59:53,550 Можете да мислите за това като C структура който има ключове и стойности. 1281 00:59:53,550 --> 00:59:55,250 Символ е ключов. 1282 00:59:55,250 --> 00:59:57,350 FB е стойност, очевидно символ на склад. 1283 00:59:57,350 --> 00:59:57,930 Comma. 1284 00:59:57,930 --> 01:00:02,180 Цена е друг ключов, и неговата стойност е очевидно е с плаваща запетая, или 1285 01:00:02,180 --> 01:00:06,510 номер по-общо в JavaScript, за $ 49.26. 1286 01:00:06,510 --> 01:00:09,030 >> Така че PHP не разполага - 1287 01:00:09,030 --> 01:00:12,980 което не сме виждали в PHP обекти доста по този начин, но ние видяхме аналогов, 1288 01:00:12,980 --> 01:00:14,093 което е какво? 1289 01:00:14,093 --> 01:00:14,980 >> ПУБЛИКАТА: [недоловим]. 1290 01:00:14,980 --> 01:00:16,110 >> DAVID Malan: асоциативни масиви. 1291 01:00:16,110 --> 01:00:19,990 Така че, докато PHP има асоциативни масиви чиито синтаксис е все така леко 1292 01:00:19,990 --> 01:00:20,370 различен - 1293 01:00:20,370 --> 01:00:21,780 видяхме квадратните скоби. 1294 01:00:21,780 --> 01:00:23,860 Видяхме странни стрели символи. 1295 01:00:23,860 --> 01:00:27,330 JavaScript има предмети, но това е предимно семантична разлика и 1296 01:00:27,330 --> 01:00:29,260 различен синоним за сега. 1297 01:00:29,260 --> 01:00:35,060 Въпреки това, както настрана, PHP има обекти по начин, че Java и други 1298 01:00:35,060 --> 01:00:37,810 езици имат обекти в обектно-ориентирано програмиране. 1299 01:00:37,810 --> 01:00:40,440 Но ние ще ги използват само за типове данни, за сега. 1300 01:00:40,440 --> 01:00:42,170 Обекти и асоциативни масиви. 1301 01:00:42,170 --> 01:00:44,140 >> Този човек може да го направи малко по-ясно. 1302 01:00:44,140 --> 01:00:45,890 Ето защо един предмет е полезно. 1303 01:00:45,890 --> 01:00:48,760 Когато искате да се декларира един студент, като Zamyla, ние можем действително 1304 01:00:48,760 --> 01:00:52,630 капсулиране така да се каже, че вътре в обект чрез фигурни скоби точно като 1305 01:00:52,630 --> 01:00:55,060 преди един куп ключове и стойности в тук. 1306 01:00:55,060 --> 01:00:59,150 Имаме ID, къща, и име за Zamyla, последван от точка и запетая като 1307 01:00:59,150 --> 01:01:00,690 обикновено в края. 1308 01:01:00,690 --> 01:01:04,840 >> Първа тук, това е малко по- различен, но също така много мощен 1309 01:01:04,840 --> 01:01:05,690 тези дни. 1310 01:01:05,690 --> 01:01:08,780 Ето един масив, и аз знам, че тъй като има една квадратна скоба нагоре 1311 01:01:08,780 --> 01:01:11,090 отгоре и квадратна скоба в дъното. 1312 01:01:11,090 --> 01:01:16,050 И това е масив от какви данни въведете очевидно в JavaScript? 1313 01:01:16,050 --> 01:01:21,260 Това е набор от изглежда като три обекта. 1314 01:01:21,260 --> 01:01:24,580 И аз знам, че е само един обект защото на фигурните скоби. 1315 01:01:24,580 --> 01:01:28,760 И забележи, че има отворена къдрава скоба, някои неща, в близост къдрава скоба, запетая, 1316 01:01:28,760 --> 01:01:31,180 после още малко, запетая, и след това още. 1317 01:01:31,180 --> 01:01:33,800 Така че това е три аргумента разделени от две запетаи. 1318 01:01:33,800 --> 01:01:36,810 >> Така че това е един масив на три обекта. 1319 01:01:36,810 --> 01:01:39,940 И всяка от тези обекти изглежда студент или член на персонала на някои 1320 01:01:39,940 --> 01:01:42,370 сортиране, всеки с ID, къща, и име. 1321 01:01:42,370 --> 01:01:45,060 Но аз съм този, наречен нещо наречен JSON - 1322 01:01:45,060 --> 01:01:47,450 JavaScript Notation Object. 1323 01:01:47,450 --> 01:01:52,060 Това е формат на данни, които действително е толкова много популярен и в 1324 01:01:52,060 --> 01:01:55,100 Vogue тези дни, че ако пишете на приложение, което използва Facebook 1325 01:01:55,100 --> 01:01:59,150 API, API на Twitter, наистина почти всяко API там тези дни, 1326 01:01:59,150 --> 01:02:02,820 включително някои от собствения CS50, The данни се върнеш не е в 1327 01:02:02,820 --> 01:02:04,720 старото училище CSV формат. 1328 01:02:04,720 --> 01:02:06,780 >> Защото отзоваване, че CSV е супер проста. 1329 01:02:06,780 --> 01:02:10,230 Той е само на колони разделят със запетаи. 1330 01:02:10,230 --> 01:02:13,190 Данни JSON ви дава повече метаданни. 1331 01:02:13,190 --> 01:02:17,800 Тя свързва ключова с всяка стойност, така че те не трябва просто да се предположи, че 1332 01:02:17,800 --> 01:02:22,460 Колоната нулевия е една стойност, колона един друг, втора колона е друг. 1333 01:02:22,460 --> 01:02:26,790 Всичко в JSON обект тук е нещо на самостоятелно описване, защото всеки 1334 01:02:26,790 --> 01:02:30,940 едно от имената в този файл има буквално назове пред него като 1335 01:02:30,940 --> 01:02:32,510 цитиран низ. 1336 01:02:32,510 --> 01:02:34,950 >> Така че нека хвърлим един поглед към няколко примера тук. 1337 01:02:34,950 --> 01:02:36,800 Позволете ми да отида в уреда. 1338 01:02:36,800 --> 01:02:41,000 И нека да отидат в нашата vhost директория в обществения. 1339 01:02:41,000 --> 01:02:45,590 И нека да отидат в JavaScript директория. 1340 01:02:45,590 --> 01:02:49,610 И да вървим напред и да се отворят Dom-0.html, където DOM просто означава, 1341 01:02:49,610 --> 01:02:51,010 документ обектен модел. 1342 01:02:51,010 --> 01:02:53,490 Това е неща на дърво, за които се I, посочени по-рано. 1343 01:02:53,490 --> 01:02:54,950 >> И нека да предложа следното. 1344 01:02:54,950 --> 01:02:57,720 Ето една уеб страница, чийто тялото е доста проста. 1345 01:02:57,720 --> 01:03:00,170 Така че тук долу в дъното, забележите, че имам форма. 1346 01:03:00,170 --> 01:03:01,500 Виждали сме тези, които преди това. 1347 01:03:01,500 --> 01:03:07,600 Той има два входа, един от които е с ID на име, едно от които е с вид на 1348 01:03:07,600 --> 01:03:09,830 представи и първия нечии тип е текст. 1349 01:03:09,830 --> 01:03:11,900 Така че това всъщност звучи доста просто. 1350 01:03:11,900 --> 01:03:13,090 >> Нека да отидем тук. 1351 01:03:13,090 --> 01:03:15,390 Нека да се върнем към тази страница тук. 1352 01:03:15,390 --> 01:03:21,030 Нека отидем в Localhost, и иди в указател нашата JavaScript, и отидете на 1353 01:03:21,030 --> 01:03:24,640 Dom-0, и тук имаме тази форма. 1354 01:03:24,640 --> 01:03:26,550 Така че това е очевидно всичко това прави страница. 1355 01:03:26,550 --> 01:03:28,740 Тя има поле с име бутона Submit. 1356 01:03:28,740 --> 01:03:30,340 Но аз няма да се използва PHP тук. 1357 01:03:30,340 --> 01:03:34,310 Аз ще направя всичко, от страна на клиента така да се каже в JavaScript, както следва. 1358 01:03:34,310 --> 01:03:39,100 >> Забележете, че аз наистина съм дал името област на въвеждане на уникален 1359 01:03:39,100 --> 01:03:42,350 идентификатор, който действително ще ме спаси от известно време в един миг. 1360 01:03:42,350 --> 01:03:45,480 И забележи съм въведени друг етикет в главата на моята уеб страница, на 1361 01:03:45,480 --> 01:03:46,565  маркер. 1362 01:03:46,565 --> 01:03:50,120 >> Така че това е в този смисъл, че JavaScript е език за програмиране от страна на клиента. 1363 01:03:50,120 --> 01:03:55,020 В този случай, точно като CSS, аз слагам тя направо вътре в моя HTML. 1364 01:03:55,020 --> 01:03:58,810 Но забележете, че съм обявен за функция че изглежда малко като PHP 1365 01:03:58,810 --> 01:04:01,530 синтактично, но това е действително JavaScript, защото отново, това е 1366 01:04:01,530 --> 01:04:03,920 от страна на клиента в браузъра. 1367 01:04:03,920 --> 01:04:07,590 И да предположите какво това ще направи, въпреки че някои от синтаксиса 1368 01:04:07,590 --> 01:04:09,338 тук е нещо ново. 1369 01:04:09,338 --> 01:04:11,760 >> ПУБЛИКАТА: Кажи здравей на който. 1370 01:04:11,760 --> 01:04:14,020 >> DAVID Malan: Ще кажа здрасти на всеки, който посещава тази страница. 1371 01:04:14,020 --> 01:04:15,120 Е, как? 1372 01:04:15,120 --> 01:04:18,070 >> Така че забележите, тя се превръща в JavaScript има сигнал () функцията. 1373 01:04:18,070 --> 01:04:22,840 Това е един много тъжен вид функция, която наистина просто тенденция да дразнят потребителите. 1374 01:04:22,840 --> 01:04:25,440 Това не е един наистина трябва да използвате обикновено, но това е една бърза и мръсни 1375 01:04:25,440 --> 01:04:27,710 начин за сортиране на печат нещо на графичен потребителски 1376 01:04:27,710 --> 01:04:29,180 интерфейс, като браузър. 1377 01:04:29,180 --> 01:04:31,400 Забележете, че тук имам стринг в единични кавички. 1378 01:04:31,400 --> 01:04:36,010 Оказва се, че за разлика от C, JavaScript действително могат да имат използвате единичен 1379 01:04:36,010 --> 01:04:38,730 цитира, и честно казано това е просто вид на Конвенцията сред стилистични 1380 01:04:38,730 --> 01:04:41,180 JavaScript програмисти да използвате единични кавички. 1381 01:04:41,180 --> 01:04:43,750 PHP, те всъщност имат малко различно значение. 1382 01:04:43,750 --> 01:04:45,810 Но за сега, просто знам, че Това е единствената причина. 1383 01:04:45,810 --> 01:04:49,270 Конвенцията в JavaScript е често да използвате единични кавички, но бихме могли да използваме 1384 01:04:49,270 --> 01:04:50,950 двойни кавички и на двете места, както добре. 1385 01:04:50,950 --> 01:04:52,610 >> Така че това е интересно. 1386 01:04:52,610 --> 01:04:56,430 Спомнете си последния път, че сме имали, че картината на екрана, който нарисува дърво 1387 01:04:56,430 --> 01:04:59,720 където сте имали HTML възел, и Главният възел, и тялото възел, 1388 01:04:59,720 --> 01:05:00,800 и след това някакъв текст. 1389 01:05:00,800 --> 01:05:04,700 Но имаше един специален възел в самия връх, че се обадих на документа. 1390 01:05:04,700 --> 01:05:08,260 Е, оказва се, в JavaScript, всеки път, когато се напише програма на JavaScript 1391 01:05:08,260 --> 01:05:11,040 в браузъра, можете да имат достъп до специален глобална променлива. 1392 01:05:11,040 --> 01:05:14,130 Подобни в духа на свръхглобални на PHP, това един се нарича в 1393 01:05:14,130 --> 01:05:16,050 всички малки букви документ. 1394 01:05:16,050 --> 01:05:21,480 >> Това е като структура, но това структура също има функции във вътрешността му. 1395 01:05:21,480 --> 01:05:23,790 Така C структура просто има данни обикновено. 1396 01:05:23,790 --> 01:05:29,060 Но JavaScript обект на това технически е също има функции, 1397 01:05:29,060 --> 01:05:31,830 иначе известни методи, вътре в него. 1398 01:05:31,830 --> 01:05:35,750 И вие можете да се обадите функция вътре в този обект съвсем буквално си върши 1399 01:05:35,750 --> 01:05:39,610 име, точка, и след това името на функцията, или отново метод. 1400 01:05:39,610 --> 01:05:41,160 Това е просто синоним, наистина. 1401 01:05:41,160 --> 01:05:42,450 >> И какво общо има тази функция направя? 1402 01:05:42,450 --> 01:05:43,840 Можете да вид се досетите от името му. 1403 01:05:43,840 --> 01:05:45,590 Вземи елемент от ID. 1404 01:05:45,590 --> 01:05:50,040 Така че това ще намерите на уеб страницата, търси онова дърво, търсейки 1405 01:05:50,040 --> 01:05:55,210 каквото възел, AKA елемент, има уникален идентификатор на кавички име. 1406 01:05:55,210 --> 01:05:56,560 И тогава какво ще правя? 1407 01:05:56,560 --> 01:06:00,350 Отивам да получите стойността вътре в този възел в дървото, и аз отивам 1408 01:06:00,350 --> 01:06:02,580 по някакъв начин да кажа здравей на това име. 1409 01:06:02,580 --> 01:06:05,360 >> Така че предполагам, въпреки че не сме виждал това все пак, това, което правите на плюс 1410 01:06:05,360 --> 01:06:07,396 символи означават, тук и тук може би? 1411 01:06:07,396 --> 01:06:08,230 >> ПУБЛИКАТА: свързвам. 1412 01:06:08,230 --> 01:06:09,220 >> DAVID Malan: свързвам. 1413 01:06:09,220 --> 01:06:11,290 Точно така, и това са само вид дизайн решения 1414 01:06:11,290 --> 01:06:12,280 хора, направени преди години. 1415 01:06:12,280 --> 01:06:15,190 В PHP, вие се слеят неща, с точици. 1416 01:06:15,190 --> 01:06:18,800 В C, да скочи през няколко обръчите и наричаме функции като strcopy () или 1417 01:06:18,800 --> 01:06:20,600 strcat (), или други подобни функции. 1418 01:06:20,600 --> 01:06:22,060 Но в JavaScript, вие използвате плюсове. 1419 01:06:22,060 --> 01:06:24,770 Така че това е просто конкатенация три струни - 1420 01:06:24,770 --> 01:06:27,850 Здравейте, едно име, а след това удивителен знак. 1421 01:06:27,850 --> 01:06:30,390 >> Така че, кога и защо е тази функция нарича все пак? 1422 01:06:30,390 --> 01:06:33,150 Е, да предположите от HTML в дъното. 1423 01:06:33,150 --> 01:06:35,810 Защо се поздравят (), наречен, или кога? 1424 01:06:35,810 --> 01:06:39,730 1425 01:06:39,730 --> 01:06:44,030 >> Очевидно, като най-добре мога да кажа, на представи, когато се подава тази форма, 1426 01:06:44,030 --> 01:06:47,200 Аз ще направя всичко, което е във вътрешността на тези цитати. 1427 01:06:47,200 --> 01:06:50,900 И по-специално, аз отивам да се обадя поздрави () и след това се върнете фалшива. 1428 01:06:50,900 --> 01:06:53,090 >> Е, нека да видим какво мрежата ефект тук е на първо място. 1429 01:06:53,090 --> 01:06:58,290 Така че позволете ми да отида напред и да въведете в, да речем, Лорен, Изпращане. 1430 01:06:58,290 --> 01:06:59,440 Здравейте Лорен. 1431 01:06:59,440 --> 01:07:02,990 Да видим дали може би това е просто Късметлия изпълнение. 1432 01:07:02,990 --> 01:07:03,200 Nope. 1433 01:07:03,200 --> 01:07:05,990 Така че това е писането на всякакви името, което всъщност е сложил там. 1434 01:07:05,990 --> 01:07:07,970 >> Но забележете това, което не се променя. 1435 01:07:07,970 --> 01:07:10,360 URL адресът е все още дом-0.html. 1436 01:07:10,360 --> 01:07:11,820 Няма по register.php. 1437 01:07:11,820 --> 01:07:13,110 Няма по втория файл. 1438 01:07:13,110 --> 01:07:14,930 Не е атрибут действие. 1439 01:07:14,930 --> 01:07:19,720 И така, какво е това завръщане невярна вероятно правиш? 1440 01:07:19,720 --> 01:07:23,660 Защо съм се обадите поздрави () и след това връщане фалшиви вероятно? 1441 01:07:23,660 --> 01:07:26,420 Какво обикновено се случва, когато щракнете върху Подаване на формуляр, че дори имаме 1442 01:07:26,420 --> 01:07:27,854 виждал през изминалата седмица? 1443 01:07:27,854 --> 01:07:29,900 >> ПУБЛИКАТА: [недоловим]. 1444 01:07:29,900 --> 01:07:30,860 >> DAVID Malan: Тя отива някъде, нали? 1445 01:07:30,860 --> 01:07:32,720 Той отива до известна дестинация URL. 1446 01:07:32,720 --> 01:07:34,120 Но аз не искам това да се случи тук. 1447 01:07:34,120 --> 01:07:37,620 Искам моята уеб страница, за да бъде напълно динамичен като Gmail, където някога сте 1448 01:07:37,620 --> 01:07:38,650 там, да останеш там. 1449 01:07:38,650 --> 01:07:42,900 URL адресът не се променя по начин, който показва цялата страница се презарежда. 1450 01:07:42,900 --> 01:07:46,680 По-скоро, аз просто искам да променя нещо като отпечатване на нещо 1451 01:07:46,680 --> 01:07:48,320 тук на екрана. 1452 01:07:48,320 --> 01:07:49,630 >> Ами нека да почистите този нагоре малко. 1453 01:07:49,630 --> 01:07:55,370 Позволете ми да се отвори не Dom-0, но Нека отворим дом-2. 1454 01:07:55,370 --> 01:07:57,350 Само да съм виждал някои синтаксис тук. 1455 01:07:57,350 --> 01:08:02,080 >> Оказва се, че това, което току-що се използва сурово JavaScript. 1456 01:08:02,080 --> 01:08:04,420 Така че това е наистина на езика JavaScript. 1457 01:08:04,420 --> 01:08:07,340 Някои от вас може би знаят за библиотека, наречена Jquery. 1458 01:08:07,340 --> 01:08:09,980 >> Така Jquery не е същото нещо като JavaScript. 1459 01:08:09,980 --> 01:08:14,110 Това е просто една библиотека, която наистина умен човек пише и популяризирана като 1460 01:08:14,110 --> 01:08:18,100 че почти всички хора по света сега Jquery използва при използване на JavaScript. 1461 01:08:18,100 --> 01:08:20,890 И на пръв поглед, честно казано, тя изглежда малко по-загадъчен. 1462 01:08:20,890 --> 01:08:24,990 Но вие ще откриете, особено ако отидете има за своя окончателен проект с уеб 1463 01:08:24,990 --> 01:08:29,029 развитие, вие ще откриете, че този почиства нещата и ви спестява доста 1464 01:08:29,029 --> 01:08:30,229 няколко реда код. 1465 01:08:30,229 --> 01:08:33,189 >> Така че нека просто поглед към това как тази форма се работи. 1466 01:08:33,189 --> 01:08:35,664 Забележете какво съм премахнете очевидно от моя HTML? 1467 01:08:35,664 --> 01:08:38,240 1468 01:08:38,240 --> 01:08:40,630 Не е за да представи манипулатор така да се каже. 1469 01:08:40,630 --> 01:08:41,470 Не е атрибут. 1470 01:08:41,470 --> 01:08:43,359 Защото знаеш, какво Аз наистина не харесва? 1471 01:08:43,359 --> 01:08:45,640 Чувствах се като бяхме падане в старите навици там. 1472 01:08:45,640 --> 01:08:49,340 Точно както тя беше започнала да се чувства помия да общувам както с CSS 1473 01:08:49,340 --> 01:08:52,149 HTML, защото си вид хвърляне различни езици по целия 1474 01:08:52,149 --> 01:08:56,180 място, по същия начин започна това да се чувстват като лош път да отида там, където 1475 01:08:56,180 --> 01:09:01,069 Слагам JavaScript код вътре в моя HTML, вместо да го факторинг навън. 1476 01:09:01,069 --> 01:09:02,279 >> Така че това е урок тук. 1477 01:09:02,279 --> 01:09:05,080 В Дом-2.html, аз съм го факторинг навън. 1478 01:09:05,080 --> 01:09:07,399 И аз правя нещата малко по- различно. 1479 01:09:07,399 --> 01:09:09,630 За сега, аз отивам да размахва ръцете си в това, което наистина прави това 1480 01:09:09,630 --> 01:09:10,590 под предния капак. 1481 01:09:10,590 --> 01:09:14,210 Но просто за сега приемем, че тази първа ред код в тази библиотека 1482 01:09:14,210 --> 01:09:18,170 наречен Jquery просто означава, когато документ е готов, направете следното. 1483 01:09:18,170 --> 01:09:20,080 >> Тъй като уеб страници могат да се известно време да се зареди. 1484 01:09:20,080 --> 01:09:23,029 Може да бъде на бавен интернет връзка, и това може да се върти 1485 01:09:23,029 --> 01:09:25,290 и се върти, и най-накрая, че е зареден. 1486 01:09:25,290 --> 01:09:29,060 Тази линия на код просто казва, изчакайте, докато цялата страница е готов, документът 1487 01:09:29,060 --> 01:09:31,189 е готово, преди да изпълни този код. 1488 01:09:31,189 --> 01:09:34,390 >> А сега забележи, че това е най-вероятно най-полезните първа 1489 01:09:34,390 --> 01:09:36,189 отнеме от JQuery. 1490 01:09:36,189 --> 01:09:42,140 Тази линия тук е много подобен по дух до този много по-дълъг ред тук. 1491 01:09:42,140 --> 01:09:46,920 Има предвид, че в суров JavaScript код, там съществува документ глобален обект, който 1492 01:09:46,920 --> 01:09:50,460 има функция, наречена getElementById (), хората, които са писали 1493 01:09:50,460 --> 01:09:55,720 Jquery опростена, че просто да се каже, знак за долар, а след това вътре в 1494 01:09:55,720 --> 01:10:00,250 скоби, поставени две кавички, и след това сложи символ хеш следвана от 1495 01:10:00,250 --> 01:10:02,250 уникален идентификатор, който искате да вземете. 1496 01:10:02,250 --> 01:10:06,170 Това е еквивалентно на document.getElementById. 1497 01:10:06,170 --> 01:10:11,090 >> В същото време,. Представя просто означава на подаване, независимо от формата си 1498 01:10:11,090 --> 01:10:14,240 позовавайки се на ляво, отидете напред и да изпълни това. 1499 01:10:14,240 --> 01:10:16,600 Но сега това е любопитството също. 1500 01:10:16,600 --> 01:10:19,560 Какво е странно за това, което Подчертала съм тук? 1501 01:10:19,560 --> 01:10:23,840 1502 01:10:23,840 --> 01:10:28,594 Не само, че е вид синтактично нов, има и нещо, което липсва. 1503 01:10:28,594 --> 01:10:29,558 >> ПУБЛИКАТА: Това е просто нарича функция? 1504 01:10:29,558 --> 01:10:31,970 Това не се нарича сигнал? 1505 01:10:31,970 --> 01:10:32,440 >> DAVID Malan: Да. 1506 01:10:32,440 --> 01:10:35,450 Е, така предупреждение () е надолу тук, за да бъдем честни. 1507 01:10:35,450 --> 01:10:39,520 Но никъде не се споменава за име, като знаете, Foo или 1508 01:10:39,520 --> 01:10:40,980 нещо тук. 1509 01:10:40,980 --> 01:10:43,830 И наистина, това е една от характеристиките на JavaScript, който е доста 1510 01:10:43,830 --> 01:10:45,370 мощен, но също е доста нова. 1511 01:10:45,370 --> 01:10:47,460 И PHP всъщност има това, както добре. 1512 01:10:47,460 --> 01:10:49,500 >> Нека да вървим напред и да направим нещо наистина бързо. 1513 01:10:49,500 --> 01:10:52,030 Нека да вървим напред и да направим тази тук. 1514 01:10:52,030 --> 01:10:52,600 Позволете ми да направя това. 1515 01:10:52,600 --> 01:10:53,690 Function. 1516 01:10:53,690 --> 01:10:56,455 Нека наречем това товарач (). 1517 01:10:56,455 --> 01:10:58,290 Функция A манипулатор така да се каже. 1518 01:10:58,290 --> 01:11:00,110 Нещо, което обработва някои операция. 1519 01:11:00,110 --> 01:11:02,700 Позволете ми да си чистя вдлъбнатина. 1520 01:11:02,700 --> 01:11:04,380 И да направим тази тук. 1521 01:11:04,380 --> 01:11:06,090 И сложи това тук. 1522 01:11:06,090 --> 01:11:06,470 Да. 1523 01:11:06,470 --> 01:11:07,060 OK. 1524 01:11:07,060 --> 01:11:10,300 >> Така че сега имам нарича функция товарач (), че аз наистина не знам 1525 01:11:10,300 --> 01:11:10,890 какво прави той, все още. 1526 01:11:10,890 --> 01:11:12,710 Просто все още има тези неща. 1527 01:11:12,710 --> 01:11:13,900 Опа. 1528 01:11:13,900 --> 01:11:15,820 Отне твърде много. 1529 01:11:15,820 --> 01:11:18,490 Да го направим. 1530 01:11:18,490 --> 01:11:18,990 Добре. 1531 01:11:18,990 --> 01:11:20,240 Извинете. 1532 01:11:20,240 --> 01:11:23,140 1533 01:11:23,140 --> 01:11:23,690 Добре. 1534 01:11:23,690 --> 01:11:24,720 Позволете ми да направя това. 1535 01:11:24,720 --> 01:11:25,020 OK. 1536 01:11:25,020 --> 01:11:27,040 Това изглежда добре и прави напред сега. 1537 01:11:27,040 --> 01:11:29,090 Позволете ми да направя това. 1538 01:11:29,090 --> 01:11:29,860 Направете това. 1539 01:11:29,860 --> 01:11:30,950 И OK. 1540 01:11:30,950 --> 01:11:33,080 Така че сега, нека да поставим този тук. 1541 01:11:33,080 --> 01:11:35,840 1542 01:11:35,840 --> 01:11:37,270 Няма повече програмиране в движение. 1543 01:11:37,270 --> 01:11:37,900 OK. 1544 01:11:37,900 --> 01:11:40,000 >> Така че сега, нека се върнем към където историята започва. 1545 01:11:40,000 --> 01:11:43,530 По-рано казах, че тази линия тук означава, когато документът е готов, проверете 1546 01:11:43,530 --> 01:11:44,380 напред и да го направя. 1547 01:11:44,380 --> 01:11:45,660 Какво искате да направите? 1548 01:11:45,660 --> 01:11:49,070 Ами конкретно, искам да отида напред и да направите следното. 1549 01:11:49,070 --> 01:11:53,700 Изпълнете тази линия на код, а след това това, което искам да направя е наричат ​​това 1550 01:11:53,700 --> 01:11:56,370 функционира, когато формулярът се подава. 1551 01:11:56,370 --> 01:11:57,730 >> Сега това е, което е интересно. 1552 01:11:57,730 --> 01:11:59,170 Това само по себе си е функция. 1553 01:11:59,170 --> 01:12:02,540 Забележете, аз не съм пускането скоби тук по нормалния начин. 1554 01:12:02,540 --> 01:12:06,800 Аз буквално преминава функция, наречена товарач () за друга функция 1555 01:12:06,800 --> 01:12:10,800 нарича представя () като аргумент като въпреки че това е като променлива. 1556 01:12:10,800 --> 01:12:14,290 И това е една от характеристиките на JavaScript е функциите си 1557 01:12:14,290 --> 01:12:15,710 наистина са само предмети. 1558 01:12:15,710 --> 01:12:18,350 В действителност, те са наистина само променливи от някакъв вид. 1559 01:12:18,350 --> 01:12:21,340 И ако името на функцията е товарач (), няма причина да не може да 1560 01:12:21,340 --> 01:12:23,390 мине това в като аргумент тук. 1561 01:12:23,390 --> 01:12:27,530 А това означава, че когато формата с ID на демо е 1562 01:12:27,530 --> 01:12:29,320 представени, обадете се на тази функция. 1563 01:12:29,320 --> 01:12:32,770 >> Но сега, ако ли да отменя всичко това, Защо тогава аз може би правя 1564 01:12:32,770 --> 01:12:34,850 това преди малко? 1565 01:12:34,850 --> 01:12:36,840 Е, това е анонимна функция. 1566 01:12:36,840 --> 01:12:41,080 Защото честно казано, аз осъзнах защо съм притеснява да губите време за обявяване на 1567 01:12:41,080 --> 01:12:45,540 функция, наречена товарач () само да се обадя то в едно и само на едно място? 1568 01:12:45,540 --> 01:12:48,640 Ако аз не се нуждаят от име, а аз не трябва да го наричаме повече от едно място, 1569 01:12:48,640 --> 01:12:51,200 нека просто изпълнение на функцията точно там, където имам нужда от него. 1570 01:12:51,200 --> 01:12:55,190 И така, JavaScript и PHP поддръжка какво се наричат ​​анонимни функции, които 1571 01:12:55,190 --> 01:12:57,900 позволете ми да правя точно това тук. 1572 01:12:57,900 --> 01:12:59,570 >> Но ние просто надраскване на повърхността. 1573 01:12:59,570 --> 01:13:02,430 Да дразни само с няколко крайните примери тук. 1574 01:13:02,430 --> 01:13:04,600 >> Ако отида в quote.php. 1575 01:13:04,600 --> 01:13:07,160 1576 01:13:07,160 --> 01:13:11,870 Забележете, че това всъщност е PHP функция, програма, PHP, че съм написал 1577 01:13:11,870 --> 01:13:15,270 че очаква HTTP нарича параметър символ, и аз може да премине в 1578 01:13:15,270 --> 01:13:16,730 стойност, като FB. 1579 01:13:16,730 --> 01:13:20,010 И ако ние действително изглежда при източника код, това се заявки безплатен сайт 1580 01:13:20,010 --> 01:13:23,680 наречена Yahoo Finance, точно като р-комплект седем, и това е връщане към мен 1581 01:13:23,680 --> 01:13:26,580 нещо очевидно известен формат е JSON - 1582 01:13:26,580 --> 01:13:28,010 JavaScript Object Notation. 1583 01:13:28,010 --> 01:13:28,810 Това е просто един обект. 1584 01:13:28,810 --> 01:13:32,500 Обърнете внимание на фигурни скоби, на котировки, дебелото черво, и запетаи. 1585 01:13:32,500 --> 01:13:34,720 >> Сега същото време, това е много готино. 1586 01:13:34,720 --> 01:13:38,520 Защото вероятно може да се използва програмиране език за генериране на URL адреси 1587 01:13:38,520 --> 01:13:40,370 че изглежда така динамично, нали? 1588 01:13:40,370 --> 01:13:43,340 Мога да го смените с Google и да се върнат на Google 1589 01:13:43,340 --> 01:13:47,930 цената на акциите от $ 1,017.55. 1590 01:13:47,930 --> 01:13:49,640 Така че нека да видим дали не можем да използваме това сега. 1591 01:13:49,640 --> 01:13:56,590 >> Нека отида до 0 Аякс тук, които изглежда по следния начин. 1592 01:13:56,590 --> 01:13:59,750 Това е просто един уеб сайт, който има формуляр с един бутон. 1593 01:13:59,750 --> 01:14:05,860 Позволете ми тук вървят напред и въведете в YHOO за склад символ на Yahoo, кликнете Вземи 1594 01:14:05,860 --> 01:14:10,530 Цитат, а сега забелязвам съм намерила сигнал с 32,86. 1595 01:14:10,530 --> 01:14:14,050 >> Нека действително отиде на любител версия на тази страница, версия две, и 1596 01:14:14,050 --> 01:14:17,530 напишете Да речем, Microsoft, MSFT. 1597 01:14:17,530 --> 01:14:18,410 Вземи цитат. 1598 01:14:18,410 --> 01:14:19,850 И сега забелязвам, не предупреждение. 1599 01:14:19,850 --> 01:14:22,770 Забележете, където се казва цена се определя? 1600 01:14:22,770 --> 01:14:27,060 Има най-простите примери, които загатва какво Gchat и Facebook 1601 01:14:27,060 --> 01:14:30,070 Чат и Gmail, както и други такива сайтове се прави от действително 1602 01:14:30,070 --> 01:14:31,290 промяна на уеб страница. 1603 01:14:31,290 --> 01:14:31,800 >> Забележите това. 1604 01:14:31,800 --> 01:14:33,120 Позволете ми да се презарежда страницата. 1605 01:14:33,120 --> 01:14:35,080 Позволете ми да се отворят Инспектор на Chrome. 1606 01:14:35,080 --> 01:14:36,890 Нека да отидем на елементи раздела тук. 1607 01:14:36,890 --> 01:14:42,310 Сега, ако забележите, че увеличение в тук и отвори нагоре, забележите, че това е моят 1608 01:14:42,310 --> 01:14:44,500 HTML DOM - моя документ обектен модел. 1609 01:14:44,500 --> 01:14:45,920 Това е моят HTML. 1610 01:14:45,920 --> 01:14:48,750 Но сега забелязвам, макар и да става да бъде малко трудно да го видя и в двете 1611 01:14:48,750 --> 01:14:52,080 места едновременно, ако напишете в FB тук, да гледате дъното 1612 01:14:52,080 --> 01:14:54,110 на екрана само. 1613 01:14:54,110 --> 01:14:57,720 >> Това е действително се променя ми HTML в движение. 1614 01:14:57,720 --> 01:15:01,670 И прави това просто , като направите нещо подобно. 1615 01:15:01,670 --> 01:15:06,800 Ако се отворят Аякс-2, забележите прилагане нещо толкова секси, колкото 1616 01:15:06,800 --> 01:15:09,560 че, въпреки че това е доста грозно, но като сложна, тъй като това 1617 01:15:09,560 --> 01:15:11,910 функционално, има някои HTML в долната част. 1618 01:15:11,910 --> 01:15:13,810 Но забележете, че за да се бележат. 1619 01:15:13,810 --> 01:15:16,640 Ние не сме използвали и преди, но това е като, но не принуждава 1620 01:15:16,640 --> 01:15:17,840 всичко на нов ред. 1621 01:15:17,840 --> 01:15:20,830 Тя просто има правоъгълна област на същата линия по същество. 1622 01:15:20,830 --> 01:15:22,870 >> Забележете, че аз го даде ID на цената. 1623 01:15:22,870 --> 01:15:26,800 Оказва се, с помощта на същата JavaScript библиотека, имам функция 1624 01:15:26,800 --> 01:15:30,440 наречен цитат (), които се нарича, когато формулярът е подаден. 1625 01:15:30,440 --> 01:15:31,800 И това, което правя е това. 1626 01:15:31,800 --> 01:15:35,730 Аз съм за обявяване на променлива в JavaScript наречен URL, запис на стойност 1627 01:15:35,730 --> 01:15:38,650 quote.php? символ =. 1628 01:15:38,650 --> 01:15:44,220 С други думи, аз съм започнал да изготви искане HTTP, а след това 1629 01:15:44,220 --> 01:15:49,250 Аз съм конкатенация върху които с плюс каквато и да е елемент с ID 1630 01:15:49,250 --> 01:15:54,190 на символ, които бележка е, че текстово поле чак тук. 1631 01:15:54,190 --> 01:15:56,630 Така че точно като имахме форми в миналото. 1632 01:15:56,630 --> 01:16:01,450 >> И тогава се оказва, в Jquery, ако обадя. Вал (), която призовава на Вал 1633 01:16:01,450 --> 01:16:05,900 функция, а стойността функция, която получава каквото потребителят е въвел инча 1634 01:16:05,900 --> 01:16:08,920 И тогава всички на мрежовия трафик , което се случва е това. 1635 01:16:08,920 --> 01:16:11,230 $. GetJSON. 1636 01:16:11,230 --> 01:16:13,720 >> И като настрана, знака за долар е само на краткото записване. 1637 01:16:13,720 --> 01:16:16,860 Това е наистина jQuery.getJSON. 1638 01:16:16,860 --> 01:16:21,520 Дайте ми да JSON от този URL, и когато искането се връща, наричаме това 1639 01:16:21,520 --> 01:16:26,550 функция и да премине в като аргумент каквото се върна от сървъра. 1640 01:16:26,550 --> 01:16:31,205 >> Така че с други думи, ако се върна към браузъра, и се върна в quote.php, 1641 01:16:31,205 --> 01:16:35,590 какво ми браузър прави става това парче от данни. 1642 01:16:35,590 --> 01:16:38,930 И когато отида в тази уеб страница тук, забележите, ако вместо да отиде до мрежата 1643 01:16:38,930 --> 01:16:43,820 раздела и ясно, и след това въведете нещо като GOOG за Google и да получите 1644 01:16:43,820 --> 01:16:46,340 Извадка, забележите, че страницата не се промени. 1645 01:16:46,340 --> 01:16:50,990 Но искане HTTP е направено, и това, което се върна тук, ако се вгледаме в 1646 01:16:50,990 --> 01:16:56,130 отговор е цял куп JSON че достъп накрая с 1647 01:16:56,130 --> 01:16:58,070 тази проста линия. 1648 01:16:58,070 --> 01:17:00,150 >> Данни е това, което е намерила от сървъра. 1649 01:17:00,150 --> 01:17:02,120 Цената е на името на ключ ме интересува. 1650 01:17:02,120 --> 01:17:05,230 Така data.price ми дава това. 1651 01:17:05,230 --> 01:17:07,540 >> Сега същото време, и това е последният пример. 1652 01:17:07,540 --> 01:17:09,280 Можете да направите още повече на страницата. 1653 01:17:09,280 --> 01:17:12,440 Една действително, както две. 1654 01:17:12,440 --> 01:17:14,780 Можем да върне етикет, ако си спомняте това. 1655 01:17:14,780 --> 01:17:15,850 Това е JavaScript. 1656 01:17:15,850 --> 01:17:17,110 Ние можем да направим това. 1657 01:17:17,110 --> 01:17:17,690 Много е вълнуващо. 1658 01:17:17,690 --> 01:17:18,800 Ще оставим това за Катерачът. 1659 01:17:18,800 --> 01:17:21,590 >> Но още по-вълнуващо, можете да правят нещата по този начин. 1660 01:17:21,590 --> 01:17:25,940 Ако отида в геолокация-1, се оказва, че Chrome знае, че ние сме най- 1661 01:17:25,940 --> 01:17:30,672 ширина дължина 42.37. -71.10. 1662 01:17:30,672 --> 01:17:32,940 Така че има още по-там на ваше разположение. 1663 01:17:32,940 --> 01:17:34,290 Но повече за това следващата седмица. 1664 01:17:34,290 --> 01:17:35,540 Ще се видим в понеделник. 1665 01:17:35,540 --> 01:17:37,558