1 00:00:00,000 --> 00:00:11,330 2 00:00:11,330 --> 00:00:12,360 >> DAVID MALAN: Alles klar. 3 00:00:12,360 --> 00:00:15,970 Dies ist CS50, und dies ist das Ende der Woche neun. 4 00:00:15,970 --> 00:00:18,560 Es war ein Wirbelwind über in den letzten Tagen. 5 00:00:18,560 --> 00:00:21,580 Und Problem stellte sieben, wenn Sie Knie sind tief hinein, erkennen, es ist ein ganz 6 00:00:21,580 --> 00:00:23,340 bisschen neu, das ist drin. 7 00:00:23,340 --> 00:00:26,660 Aber lasst uns sehen, ob wir nicht Stück für Stück alles zusammen hier kurz 8 00:00:26,660 --> 00:00:29,230 bevor dann abzukommen in noch eine andere Richtung und sehen 9 00:00:29,230 --> 00:00:30,510 wo sonst können wir gehen. 10 00:00:30,510 --> 00:00:32,630 >> Also bisher haben wir über HTML gesprochen. 11 00:00:32,630 --> 00:00:33,740 Wir haben darüber gesprochen CSS. 12 00:00:33,740 --> 00:00:34,705 Wir haben darüber gesprochen PHP. 13 00:00:34,705 --> 00:00:36,520 Sie haben damit begonnen, SQL erleben. 14 00:00:36,520 --> 00:00:38,360 Heute, wir reden ein bisschen über JavaScript. 15 00:00:38,360 --> 00:00:41,230 Aber wie all diese disparaten Sprachen zusammen passen? 16 00:00:41,230 --> 00:00:44,970 >> So sprachen wir letzte Woche über die Begriff der mit einem Server. 17 00:00:44,970 --> 00:00:48,470 Also lasst uns einfach zeichnen dieses Rechteck als Web-Server hier. 18 00:00:48,470 --> 00:00:52,200 Und ein Web-Server dient sicherlich Dateien. 19 00:00:52,200 --> 00:00:54,640 Und einige dieser Dateien können HTML-Dateien sein. 20 00:00:54,640 --> 00:00:58,270 So ist eines der Dinge, die ein Webserver kann ausspucken könnte sein, dass eine Datei 21 00:00:58,270 --> 00:01:01,290 wir einfach so ziehen mit etwas HTML. 22 00:01:01,290 --> 00:01:04,786 So in juristischer Hinsicht, was keine HTML können Sie tun? 23 00:01:04,786 --> 00:01:06,036 >> ZUSCHAUER: Seite schön aussehen. 24 00:01:06,036 --> 00:01:09,670 25 00:01:09,670 --> 00:01:12,310 >> DAVID MALAN: OK, machen eine Seite schön aussehen, obwohl ich glaube, ich habe bewiesen, 26 00:01:12,310 --> 00:01:13,370 dass anders angegeben. 27 00:01:13,370 --> 00:01:18,250 So funktioniert HTML können Sie das Seitenlayout strukturell, und ermöglicht es Ihnen, 28 00:01:18,250 --> 00:01:22,410 Art ästhetisch markieren einen Seite, markieren statische Inhalte, so dass Sie 29 00:01:22,410 --> 00:01:23,640 Anschließend können sie mit einem Web-Browser. 30 00:01:23,640 --> 00:01:24,690 >> Aber das ist der Schlüssel. 31 00:01:24,690 --> 00:01:26,130 Es ist statische Inhalte. 32 00:01:26,130 --> 00:01:28,590 Sie schreiben, speichern Sie es, und dann versenden Sie es. 33 00:01:28,590 --> 00:01:31,130 Und die Web-Server dient dann es für Ihre Besucher. 34 00:01:31,130 --> 00:01:35,700 >> Aber wir stilisieren Dinge mit einem anderen Sprache überhaupt. 35 00:01:35,700 --> 00:01:40,150 Wir fingen an, einen Stil-Attribut verwenden auf bestimmten Tags. 36 00:01:40,150 --> 00:01:43,400 Und das style-Attribut lassen uns gesetzten Dinge wie Schriftgröße und-farbe. 37 00:01:43,400 --> 00:01:46,460 Und Sie haben wahrscheinlich begann zu entdecken, oder Sie in Kürze für die endgültige 38 00:01:46,460 --> 00:01:50,160 Projekte potenziell noch andere Eigenschaften, die Sie in CSS verwenden können. 39 00:01:50,160 --> 00:01:54,710 Und so in juristischer Hinsicht, was dann wirklich funktioniert CSS? 40 00:01:54,710 --> 00:01:57,810 Das sind nur einige Beispiele davon. 41 00:01:57,810 --> 00:02:00,730 Was bedeutet es können Sie tun, dass HTML nicht zu scheinen, was 42 00:02:00,730 --> 00:02:02,606 haben wir bisher gesehen? 43 00:02:02,606 --> 00:02:04,850 >> ZUSCHAUER: Definieren Arten von sich. 44 00:02:04,850 --> 00:02:06,700 >> DAVID MALAN: Define Arten von sich. 45 00:02:06,700 --> 00:02:10,280 So definieren Dinge wie Klassen, wie Sie kann begegnet sind, oder einmalig 46 00:02:10,280 --> 00:02:13,800 identifizieren Knoten in einem Dokument so dass man sie stilisieren. 47 00:02:13,800 --> 00:02:16,890 Aber genauer gesagt, würde ich sagen, dass CSS wirklich lässt Sie Dinge, die die 48 00:02:16,890 --> 00:02:20,790 letzte Meile und ermöglicht Ihnen, viel angeben genauer die Ästhetik, 49 00:02:20,790 --> 00:02:24,340 während HTML zum größten Teil lässt Sie strukturieren Ihre Seiten. 50 00:02:24,340 --> 00:02:27,310 >> Und obwohl es einige Ausfälle, wie wir sahen, die Tag für 51 00:02:27,310 --> 00:02:30,690 tag eine Überschrift, die grob gesprochen die Dinge groß und Fett. 52 00:02:30,690 --> 00:02:34,250 Das ist eine recht allgemeine Definition der tag - groß und Fett. 53 00:02:34,250 --> 00:02:35,260 Welche Schriftgröße ist das? 54 00:02:35,260 --> 00:02:36,080 Welche Farbe ist das? 55 00:02:36,080 --> 00:02:36,890 Wie fett ist das denn? 56 00:02:36,890 --> 00:02:39,830 Und CSS können Sie mehr fein tune Dinge. 57 00:02:39,830 --> 00:02:42,150 Sowie Layout, wie einige von euch gesehen haben. 58 00:02:42,150 --> 00:02:45,180 >> Und ehrlich gesagt, ist ein bisschen CSS einer unordentlichen Sprache. 59 00:02:45,180 --> 00:02:48,370 Es ist sehr mächtig in die Sie machen können buchstäblich jede Website, die Sie haben 60 00:02:48,370 --> 00:02:51,880 gesehen auf dem Netz heute mit ihm, aber es ist ein bisschen wie ein Schmerz im Nacken. 61 00:02:51,880 --> 00:02:54,440 Und einige von euch haben den Kopf gestoßen gegen die Wände bereits nur zu tun 62 00:02:54,440 --> 00:02:58,560 etwas Dummes wie Mitte ein Menü auf Problem stellte sieben, wenn Sie bekommen haben 63 00:02:58,560 --> 00:02:59,470 dieser Punkt bereits. 64 00:02:59,470 --> 00:03:01,530 >> Aber klar, die Dinge einfacher im Laufe der Zeit. 65 00:03:01,530 --> 00:03:02,820 Du fängst an, Muster zu bemerken. 66 00:03:02,820 --> 00:03:06,020 Und wieder wird Google dein Freund sein für die verschiedenen Wege, auf denen Sie 67 00:03:06,020 --> 00:03:07,220 lösen diese Arten von Problemen. 68 00:03:07,220 --> 00:03:11,520 >> Und ich wage zu behaupten, mit CSS, HTML und mehr Im Allgemeinen können Sie Probleme lösen in 69 00:03:11,520 --> 00:03:15,910 viele weitere Möglichkeiten, von denen alle Macht sehr richtig sein, als Sie sich 70 00:03:15,910 --> 00:03:18,900 in so etwas wie C, auch jetzt PHP oder JavaScript. 71 00:03:18,900 --> 00:03:21,080 Es gibt einfach viele verschiedene Möglichkeiten, Dinge auslegen. 72 00:03:21,080 --> 00:03:22,570 >> Aber das fing an, chaotisch, sagten wir. 73 00:03:22,570 --> 00:03:26,480 Nur irgendwie Vermischung Ihre HTML-und CSS mit dem style-Attribut war 74 00:03:26,480 --> 00:03:27,590 ein wenig schlampig. 75 00:03:27,590 --> 00:03:31,460 Und so haben wir stattdessen sagte, irgendwie abstrakt gesprochen, dass Sie sollten 76 00:03:31,460 --> 00:03:34,050 mindestens Faktor starten Ihre CSS wahrscheinlich. 77 00:03:34,050 --> 00:03:37,430 Nicht Ihr Stil Attribute, aber zumindest verwenden Sie die Style-Tag in das, was 78 00:03:37,430 --> 00:03:38,840 Teil der Web-Seite? 79 00:03:38,840 --> 00:03:39,560 >> ZUSCHAUER: Head. 80 00:03:39,560 --> 00:03:40,120 >> DAVID MALAN: In den Kopf. 81 00:03:40,120 --> 00:03:43,270 Bis jetzt hatten wir nur den Titel bis gibt, aber Sie können auch einen Stil 82 00:03:43,270 --> 00:03:47,230 tag, und Sie können Ihre CSS etwa setzen Sprechen zum Anfang der Seite. 83 00:03:47,230 --> 00:03:52,550 Aber dann haben wir noch einen Schritt weiter und wir berücksichtigt, dass mehr 84 00:03:52,550 --> 00:03:54,130 in einer separaten Datei. 85 00:03:54,130 --> 00:03:57,240 >> Und so sind diese beiden Dateien waren irgendwie sind nun miteinander verbunden. 86 00:03:57,240 --> 00:03:59,550 Und in der Tat war es der tag, der das tat. 87 00:03:59,550 --> 00:04:02,920 Und was war einer der übergreifenden Motivationen für Factoring unsere CSS 88 00:04:02,920 --> 00:04:04,057 Umso mehr? 89 00:04:04,057 --> 00:04:05,280 >> ZUSCHAUER: Wiederverwendbarkeit. 90 00:04:05,280 --> 00:04:05,785 >> DAVID MALAN: Wiederverwendbarkeit. 91 00:04:05,785 --> 00:04:06,150 Right? 92 00:04:06,150 --> 00:04:09,470 Sie können in p-Set sieben bereits gesehen haben dass eine Menge der Seiten, die 93 00:04:09,470 --> 00:04:12,260 Kauf-Seite, die den Verkauf der Seite Portfolio-Seite, sind wahrscheinlich 94 00:04:12,260 --> 00:04:13,550 strukturiert etwas ähnlich. 95 00:04:13,550 --> 00:04:17,579 Es gibt eine CS50 Finanzen Logo an der Spitze es sei denn, Sie haben beschlossen, es zu ändern. 96 00:04:17,579 --> 00:04:19,839 Es gibt eine Fußzeile am Unterseite der Seiten. 97 00:04:19,839 --> 00:04:24,315 Und CSS können Sie ihn dann ausklammern sie in eine separate Datei, so dass, wenn 98 00:04:24,315 --> 00:04:27,780 Sie wollen etwas global ändern über die gesamte Website, können Sie wirklich 99 00:04:27,780 --> 00:04:29,390 ändern Sie es einfach an einem Ort. 100 00:04:29,390 --> 00:04:32,750 >> Aber es gibt einen Preis, den Sie bezahlen möglicherweise indem Sie die einkalkuliert 101 00:04:32,750 --> 00:04:38,380 CSS von meiner HTML-Datei in einem separaten Datei, die auf sie mit der 102 00:04:38,380 --> 00:04:40,650 tag, die wir am Montag sahen. 103 00:04:40,650 --> 00:04:43,850 Was könnte die Kehrseite der Medaille zu sein? 104 00:04:43,850 --> 00:04:48,830 Denken wir zurück, um vor einer Woche, wenn wir Gespräch über HTTP und TCP / IP und wie 105 00:04:48,830 --> 00:04:52,070 das Internet funktioniert. 106 00:04:52,070 --> 00:04:53,530 Etwas mehr als hier? 107 00:04:53,530 --> 00:04:54,730 >> ZIELGRUPPE: Es braucht mehr Zeit. 108 00:04:54,730 --> 00:04:55,470 >> DAVID MALAN: Es braucht mehr Zeit. 109 00:04:55,470 --> 00:04:56,750 Warum? 110 00:04:56,750 --> 00:04:59,450 >> ZIELGRUPPE: [unverständlich]. 111 00:04:59,450 --> 00:04:59,750 >> DAVID MALAN: Ja. 112 00:04:59,750 --> 00:05:01,240 So dauert es wohl ein bisschen mehr Zeit. 113 00:05:01,240 --> 00:05:04,290 Weil man ist der CSS offensichtlich nicht in der gleichen Datei. 114 00:05:04,290 --> 00:05:06,920 So, jetzt müssen Sie nicht machen eine, sondern zwei Anfragen. 115 00:05:06,920 --> 00:05:11,230 Und jede dieser Anforderungen, wie wir sahen in Chrome in der sogenannten Inspector, 116 00:05:11,230 --> 00:05:15,740 und wir schauten auf die Registerkarte Netzwerk, die jeweils dieser Dateien erfordert ein HTTP 117 00:05:15,740 --> 00:05:18,360 Anfrage, die wir sahen, nimmt einige Zeit. 118 00:05:18,360 --> 00:05:19,290 Nun, vielleicht ist es nicht viel. 119 00:05:19,290 --> 00:05:20,670 Vielleicht ist es nur 20 Millisekunden. 120 00:05:20,670 --> 00:05:22,260 Vielleicht ist es 200 Millisekunden. 121 00:05:22,260 --> 00:05:25,530 >> Aber über eine Seite wie Facebook zu denken, oder CNN, oder Google, die viel sind 122 00:05:25,530 --> 00:05:28,060 größer als die Beispiele, die wir haben sah so weit. 123 00:05:28,060 --> 00:05:32,070 Diese Seiten könnten Dutzende von Dateien, von denen jeder könnte ein erfordern 124 00:05:32,070 --> 00:05:33,550 Download einer Datei. 125 00:05:33,550 --> 00:05:35,800 So können Dinge potenziell beginnen zu verlangsamen. 126 00:05:35,800 --> 00:05:39,280 >> Und vor allem in diesen Tagen, wenn wir alle haben Handys in der Tasche und 127 00:05:39,280 --> 00:05:43,010 langsameren Internet-Verbindungen mit bis warten Sie ein paar Millisekunden, um nur einige 128 00:05:43,010 --> 00:05:46,110 mehr Millisekunden für zusätzliche Dateien können tatsächlich langsam sein. 129 00:05:46,110 --> 00:05:50,430 Latenz ist das Wort, das beschreibt, Art wartet, dass Sie, dass Sie 130 00:05:50,430 --> 00:05:53,110 erleben beim Warten auf einige Information. 131 00:05:53,110 --> 00:05:54,430 >> Aber es ist ein auf dem Kopf. 132 00:05:54,430 --> 00:05:56,600 Also es ist nicht alles irgendwie ein - 133 00:05:56,600 --> 00:05:58,170 es ist eigentlich ein bisschen wie eine Wippe hier. 134 00:05:58,170 --> 00:06:02,970 Downside jetzt, aber was Browser tun können wenn sie klug, um zu vermeiden 135 00:06:02,970 --> 00:06:08,870 mit, um die gleiche styles.css anfordern Datei erneut sein kann, was tun? 136 00:06:08,870 --> 00:06:09,390 >> Zwischenspeichern. 137 00:06:09,390 --> 00:06:10,370 So Caching - 138 00:06:10,370 --> 00:06:11,690 C-A-C-H-E - 139 00:06:11,690 --> 00:06:15,810 bedeutet in der Regel hier nur zum Speichern der Datei, die Sie zum ersten Mal angefordert wird, und 140 00:06:15,810 --> 00:06:17,440 dann überprüfen Sie den Cache für sie. 141 00:06:17,440 --> 00:06:20,400 Überprüfen Sie Art Vorratsbehälter sind, und wenn Sie bereits eine 142 00:06:20,400 --> 00:06:24,520 Kopie styles.css, auch wenn einige andere Seite der p-Set oder einer Website, 143 00:06:24,520 --> 00:06:28,560 wieder fordert er, nur um das zu geben Benutzer das gleiche Cache-Kopie. 144 00:06:28,560 --> 00:06:30,140 Kümmern Sie sich nicht diese angefordert. 145 00:06:30,140 --> 00:06:32,560 >> Downside gibt, obwohl, wie einige von euch haben in der p-Satz ausgelöst. 146 00:06:32,560 --> 00:06:35,870 Wenn Sie eine Änderung vornehmen auf dem Server und Sie zurück an den Browser gehen, und Sie 147 00:06:35,870 --> 00:06:39,250 neu zu laden, manchmal funktioniert der Browser Sie ein Gefallen und stört nicht 148 00:06:39,250 --> 00:06:43,660 re-Download Ihrer Datei styles.css weil, komm, sind das, was die Chancen 149 00:06:43,660 --> 00:06:47,620 dass diese Stile, die Facebook nutzt gehen, um Stunde zu Stunde oder ändern 150 00:06:47,620 --> 00:06:48,140 Tag zu Tag? 151 00:06:48,140 --> 00:06:48,800 Es ist ziemlich gering. 152 00:06:48,800 --> 00:06:52,260 Sie könnten mit der Zeit ändern, aber nicht von Minute zu Minute und von Stunde zu Stunde. 153 00:06:52,260 --> 00:06:55,810 >> So ein Trick, nur FYI, wenn dabei Web Entwicklung, wird oft halten Sie die 154 00:06:55,810 --> 00:06:59,500 Shift-Taste zum Beispiel und dann auf laden in Ihrem Browser, und das wird 155 00:06:59,500 --> 00:07:03,280 in der Regel sagen, den Browser neu laden alles, auch wenn Sie bereits 156 00:07:03,280 --> 00:07:04,180 sie im Cache. 157 00:07:04,180 --> 00:07:06,630 Also noch einmal, Vor-und Nachteile, aber alle von ihnen 158 00:07:06,630 --> 00:07:08,260 letztlich Design-Entscheidungen. 159 00:07:08,260 --> 00:07:11,520 >> So, jetzt haben wir nicht nur Ende der Geschichte hier. 160 00:07:11,520 --> 00:07:15,790 Wenn ich nun zurück, und hin und zurück zu gehen und Rücken, haben wir begonnen, nicht nur vorstellen 161 00:07:15,790 --> 00:07:18,060 HTML, aber PHP. 162 00:07:18,060 --> 00:07:20,786 So in juristischer Hinsicht, was PHP hat uns zu tun? 163 00:07:20,786 --> 00:07:22,770 >> ZIELGRUPPE: [unverständlich]. 164 00:07:22,770 --> 00:07:24,258 >> DAVID MALAN: Was ist das? 165 00:07:24,258 --> 00:07:25,250 >> ZIELGRUPPE: Einführung Logik in den Code. 166 00:07:25,250 --> 00:07:26,620 >> DAVID MALAN: Ja, vorstellen Logik in den Code. 167 00:07:26,620 --> 00:07:29,570 So ist es eine echte Programmiersprache ist mit Schleifen und Variablen, und 168 00:07:29,570 --> 00:07:32,620 Funktionen und Bedingungen, und alle die Dinge, die wir verwendet haben Weg zurück 169 00:07:32,620 --> 00:07:33,780 wenn da Kratzer. 170 00:07:33,780 --> 00:07:36,780 Und PHP, die wir gesehen haben, verwendet werden entweder auf der Kommandozeile - es 171 00:07:36,780 --> 00:07:39,190 nicht haben, etwas zu tun haben mit der Bahn, auch wenn das 172 00:07:39,190 --> 00:07:43,150 wirklich seinen Ursprung und was es dazu neigt, gut und förderlich zu sein - 173 00:07:43,150 --> 00:07:47,130 aber man kann PHP nur von der Natur nutzen der Tatsache, dass es einen Druck () 174 00:07:47,130 --> 00:07:49,660 Funktion und eine printf ()-Funktion, oder echo ()-Funktion. 175 00:07:49,660 --> 00:07:52,440 Es gibt Trauben von Möglichkeiten, wie Sie können Text mit PHP zu drucken. 176 00:07:52,440 --> 00:07:56,540 >> Daher können Sie diese Programmierung verwenden Sprache zur Ausgabe genau 177 00:07:56,540 --> 00:07:58,460 das, was wir vor rede. 178 00:07:58,460 --> 00:08:01,360 Sie können dynamisch generieren Ihre HTML. 179 00:08:01,360 --> 00:08:02,300 Vielleicht nicht alles. 180 00:08:02,300 --> 00:08:06,460 Vielleicht Fest Code Dinge, wie die Kopfzeile und die Fußzeile, und das Logo, 181 00:08:06,460 --> 00:08:07,950 und Stylesheets, und das alles. 182 00:08:07,950 --> 00:08:11,190 Aber für so etwas wie p-set sieben, wo Sie manipulieren Aktien sind und 183 00:08:11,190 --> 00:08:14,690 zeigt das Portfolio des Benutzers, das ist, gehen, um dynamisch zu ändern, können Sie 184 00:08:14,690 --> 00:08:18,960 sicherlich mit PHP und die Logik gibt es Sie als Programmiersprache 185 00:08:18,960 --> 00:08:22,320 Ausgangs dynamisch Teilmengen der Seite. 186 00:08:22,320 --> 00:08:25,900 >> Also, wenn Sie dynamische Webseiten zu sprechen, oder Web-Programmierung, das ist 187 00:08:25,900 --> 00:08:27,200 was Sie wirklich darüber zu reden. 188 00:08:27,200 --> 00:08:31,450 Mit einer Sprache wie PHP, oder Dinge genannt Python oder Ruby, oder Java, oder 189 00:08:31,450 --> 00:08:35,900 noch andere Sprachen, um eine Datenbank abfragen häufig oder ein anderer Server, und 190 00:08:35,900 --> 00:08:38,580 dann dynamisch aus HTML spucken. 191 00:08:38,580 --> 00:08:42,470 >> Jetzt ist das Endergebnis als beiseite, dass der HTML-Code der meisten Websites, 192 00:08:42,470 --> 00:08:45,970 einschließlich Ihrer p-set sieben, ist wahrscheinlich gehen, um ein großes Durcheinander, wenn sein 193 00:08:45,970 --> 00:08:48,060 Sie an der Quelle zu sehen Code in einem Browser. 194 00:08:48,060 --> 00:08:49,010 Das ist keine große Sache. 195 00:08:49,010 --> 00:08:51,550 An diesem Punkt, wenn wir über die Pflege Stil, über die wir kümmern uns 196 00:08:51,550 --> 00:08:52,740 Sachen, die Sie schreiben. 197 00:08:52,740 --> 00:08:56,240 Wir werden nicht über die Dinge kümmern dass das, was Ihr Code Ausgänge. 198 00:08:56,240 --> 00:08:59,520 Also nicht über Einbuchtung Sorgen hier, wenn es das ist, PHP 199 00:08:59,520 --> 00:09:01,190 tatsächlich ausgibt Zeug. 200 00:09:01,190 --> 00:09:04,430 Immerhin wird der Browser sich nicht, und ein Mensch wird nicht auf der Suche 201 00:09:04,430 --> 00:09:05,400 an der Quelle sowieso. 202 00:09:05,400 --> 00:09:09,000 Wir, die Mitarbeiter, zum Beispiel, würde sein Blick auf Ihre PHP. 203 00:09:09,000 --> 00:09:13,440 >> Also lassen Sie mich ein kleines Beispiel jetzt warum sonst könnte dies nützlich sein. 204 00:09:13,440 --> 00:09:18,620 Also ehrlich gesagt, kann ich mich nicht erinnern, das letzte Mal habe ich C, um ein Problem zu lösen, in 205 00:09:18,620 --> 00:09:19,620 die reale Welt. 206 00:09:19,620 --> 00:09:22,330 Es war wohl in der Graduate School, wenn Ich brauchte, um eine Sprache zu verwenden, die 207 00:09:22,330 --> 00:09:26,710 war recht niedrigen Niveau und gab mir die Gelegenheit, etwas zu tun, sehr hoch 208 00:09:26,710 --> 00:09:30,720 Durchführung, so viele CPU wirklich sparen Zyklen, wie ich konnte, zum großen Teil 209 00:09:30,720 --> 00:09:33,990 denn ich wurde mit großen Datenmengen, und jede CPU-Zyklus gezählt. 210 00:09:33,990 --> 00:09:37,750 Und ehrlich gesagt, auch in Dinge wie Handys in diesen Tagen und andere Geräte 211 00:09:37,750 --> 00:09:39,910 wo man nicht ganz so viel zu tun haben Speicher und Sie wissen nicht recht haben, wie 212 00:09:39,910 --> 00:09:44,160 viel CPU, indem schnellere Sprachen ist immer noch ansprechend. 213 00:09:44,160 --> 00:09:47,290 >> Aber in der realen Welt, wenn man nur wollen einige Programm zusammen zu werfen 214 00:09:47,290 --> 00:09:50,340 einige Daten zu analysieren, oder die Sie gesammelt haben eine ganze Reihe von Anmeldungen für 215 00:09:50,340 --> 00:09:53,330 einige Studentengruppe, und Sie müssen sehr wünschen schnell automatisieren E-Mails 216 00:09:53,330 --> 00:09:56,240 nacheinander an jeder von diesen Registranten, wirst du für zu erreichen sind 217 00:09:56,240 --> 00:09:59,240 eine höhere Sprache als C so zu sprechen. 218 00:09:59,240 --> 00:10:04,060 So etwas wie PHP oder Python oder Ruby, oder ein halbes Dutzend andere, die es gibt 219 00:10:04,060 --> 00:10:04,550 in diesen Tagen. 220 00:10:04,550 --> 00:10:07,200 Aber die drei sind wahrscheinlich die angesagtesten jetzt. 221 00:10:07,200 --> 00:10:10,840 >> Und was das bedeutet, ist, dass Sie öffnen können bis einem Texteditor wie gedit oder 222 00:10:10,840 --> 00:10:14,030 die meisten alles andere und dann starten Sie einfach Code zu schreiben, ohne sich Sorgen zu machen 223 00:10:14,030 --> 00:10:17,800 über das Kompilieren, ohne wirklich Sorgen über Speicherverwaltung, 224 00:10:17,800 --> 00:10:20,820 Halten Sie aber, dass ein wenig Schlamperei irgendwann wieder kommen 225 00:10:20,820 --> 00:10:24,790 , Sie beißen, wenn der Datensatz wird größer oder das Problem groß wird. 226 00:10:24,790 --> 00:10:27,230 Aber was bedeutet dies für uns ist die folgende. 227 00:10:27,230 --> 00:10:29,860 >> Lassen Sie mich gehen Sie vor und führen Speller von Problem stellte sechs. 228 00:10:29,860 --> 00:10:33,480 Also das ist meine Trie-basierte Implementierung dass ich auf der großen verwendet 229 00:10:33,480 --> 00:10:35,500 Bord, wo ich nicht so gut durchgeführt. 230 00:10:35,500 --> 00:10:38,720 Wir werden in einer Woche wieder zu kommen und erneut diejenigen, die am Ende hat sich oben auf der 231 00:10:38,720 --> 00:10:40,430 große Tafel an unserem letzten Vorlesung. 232 00:10:40,430 --> 00:10:44,520 Aber jetzt lassen Sie mich vor und gehen Sie einfach laufen meine Lösung im Text, und wir tun 233 00:10:44,520 --> 00:10:48,460 die King-James-Bibel, und hier gehen wir. 234 00:10:48,460 --> 00:10:51,080 >> Das sind also alle der angeblich falsch geschriebene Wörter aus 235 00:10:51,080 --> 00:10:52,240 die King-James-Bibel. 236 00:10:52,240 --> 00:10:55,560 Und meine Umsetzung erfolgte eine halbe Sekunde in total. 237 00:10:55,560 --> 00:10:58,270 Also gar nicht so schlecht auf diese bestimmten Computer. 238 00:10:58,270 --> 00:11:01,540 Aber denken Sie an, wie viel Code musste ich schreiben. 239 00:11:01,540 --> 00:11:02,880 Überlegen Sie, wie viel Code, den Sie hatten, zu schreiben. 240 00:11:02,880 --> 00:11:06,170 Überlegen Sie, wie viele Stunden Sie in der verbrauchte D-Halle oder Ihrem Wohnheim oder wo auch immer 241 00:11:06,170 --> 00:11:07,890 tatsächlich Kodierung von bis diese Lösung. 242 00:11:07,890 --> 00:11:11,850 >> Nun, wenn ich tatsächlich eine höhere Ebene Sprache wie PHP, zur Kenntnis nehmen 243 00:11:11,850 --> 00:11:13,350 was ich hier tun kann. 244 00:11:13,350 --> 00:11:16,410 Zuerst nehme an, dass es sich statt Ihre Distribution Code. 245 00:11:16,410 --> 00:11:17,790 Dies ist eine Datei namens Speller. 246 00:11:17,790 --> 00:11:20,220 Es ist, als Teil der heutigen verfügbar Verteilung Code. 247 00:11:20,220 --> 00:11:22,670 Und ich werde meine Hand auf die meisten winken der Details, aber das ist eigentlich 248 00:11:22,670 --> 00:11:25,500 ein interessantes Beispiel dafür, wie Sie könnte Port eine Sprache 249 00:11:25,500 --> 00:11:28,870 wie C über PHP. 250 00:11:28,870 --> 00:11:33,420 Ich habe buchstäblich eröffnet zwei Textfenster, ein mit meiner C-Version von speller.c, 251 00:11:33,420 --> 00:11:36,960 und ich habe gerade angefangen zu übersetzen es in meinem Kopf, um PHP und geben es aus mit 252 00:11:36,960 --> 00:11:38,840 die nächsten äquivalente Funktionen. 253 00:11:38,840 --> 00:11:40,100 >> So einige dieser Dinge sind anders. 254 00:11:40,100 --> 00:11:43,730 Wir sahen letzte Mal, dass PHP nicht verwenden enthalten in genau der gleichen Weise. 255 00:11:43,730 --> 00:11:47,050 Es nutzt erfordern in der Regel, wenn auch gehören existiert. 256 00:11:47,050 --> 00:11:50,330 Definieren Sie ist ein wenig anders aus # Define in C, aber das ist 257 00:11:50,330 --> 00:11:51,890 wie wir eine Konstante. 258 00:11:51,890 --> 00:11:55,860 $ Argc es stellt sich heraus gibt es in PHP, so haben wir gesehen, dass. 259 00:11:55,860 --> 00:11:58,650 Dies sind nur Variablen, die alle die beginnen mit Dollar-Zeichen. 260 00:11:58,650 --> 00:12:00,590 Daran erinnern, das sind nur ein paar von schwimmenden Punkten. 261 00:12:00,590 --> 00:12:03,970 >> So lange Rede kurzer Sinn, sind Sie herzlich eingeladen, Blättern Sie durch dieses, wenn neugierig, das ist 262 00:12:03,970 --> 00:12:10,010 fast eine Zeile für Zeile Umwandlung der C-Version von speller.c in PHP. 263 00:12:10,010 --> 00:12:12,630 Und man konnte diese wieder tun ein halbes Dutzend anderer Sprachen. 264 00:12:12,630 --> 00:12:14,910 >> Aber was interessant ist diese. 265 00:12:14,910 --> 00:12:16,910 Oder was ist offen entmutigend dies ist. 266 00:12:16,910 --> 00:12:20,790 Lassen Sie mich gehen Sie vor und geben über dictionary.php, und behaupten, dass ich 267 00:12:20,790 --> 00:12:23,670 werde weitermachen und neu implementieren Problem stellte sechs hier. 268 00:12:23,670 --> 00:12:27,530 >> Also lassen Sie uns zunächst vor, dass in diese Datei, die in umgesetzt werden 269 00:12:27,530 --> 00:12:30,550 PHP, so lassen Sie mich meinen, dass Tags wie öffnen. 270 00:12:30,550 --> 00:12:34,780 Lassen Sie mich eine globale geben Variable $ size bekommt Null. 271 00:12:34,780 --> 00:12:36,710 Und ich werde geben mich eine Hash-Tabelle. 272 00:12:36,710 --> 00:12:38,110 Ich werde eine Hash-Tabelle für diese Sache zu verwenden. 273 00:12:38,110 --> 00:12:42,070 Wie kann ich erklären, eine Hash-Tabelle in PHP? 274 00:12:42,070 --> 00:12:42,990 Fertig. 275 00:12:42,990 --> 00:12:43,980 OK. 276 00:12:43,980 --> 00:12:48,870 >> So Klammer auf Klammer zu für was in PHP, wie wir gesehen haben? 277 00:12:48,870 --> 00:12:51,850 Ein Array, sondern ein Array, das könnte sein, ein assoziatives Array. 278 00:12:51,850 --> 00:12:54,320 Ein assoziatives Array ist eine Datenstruktur, 279 00:12:54,320 --> 00:12:55,860 Schlüssel mit Werten verbindet. 280 00:12:55,860 --> 00:12:59,430 >> Jetzt im einfachsten numerisch indiziert Array, sind die Tasten, was? 281 00:12:59,430 --> 00:13:02,250 282 00:13:02,250 --> 00:13:03,960 Zero, ein, zwei, drei, oder? 283 00:13:03,960 --> 00:13:08,780 Old School Stuff von C. zurück Aber es kann auch Zeichenfolgen wie foo und bar, 284 00:13:08,780 --> 00:13:12,210 oder maxwell, oder eine solche Zeichenkette. 285 00:13:12,210 --> 00:13:14,240 So kann ich das nutzen in nur einem Augenblick. 286 00:13:14,240 --> 00:13:17,550 >> Lassen Sie mich gehen Sie vor und erklären eine Funktion wie - 287 00:13:17,550 --> 00:13:19,020 lassen Sie uns zuerst load (). 288 00:13:19,020 --> 00:13:20,690 Also Funktion load (). 289 00:13:20,690 --> 00:13:23,440 Und PHP ist, dass ein wenig anders Sie buchstäblich Funktion geben, aber Sie 290 00:13:23,440 --> 00:13:24,930 nicht geben Sie einen Rückgabetyp. 291 00:13:24,930 --> 00:13:28,760 Ich werde weitermachen und sagen, dass die Last ()-Funktion sollte in nehmen 292 00:13:28,760 --> 00:13:31,000 Argument $ Wörterbuch, nur wie C-Version getan hat. 293 00:13:31,000 --> 00:13:32,510 Ich mache das aus dem Speicher. 294 00:13:32,510 --> 00:13:34,910 >> Und ich schlage vor, dass ich , dies zu tun. 295 00:13:34,910 --> 00:13:37,080 Ich werde einfach foreach zu tun. 296 00:13:37,080 --> 00:13:40,710 Ich werde eine Funktion namens nennen file () übergeben den Namen, dass 297 00:13:40,710 --> 00:13:44,990 Datei, die die Variable $ $ Wörterbuch als Wort. 298 00:13:44,990 --> 00:13:49,410 Und dann in meiner for-Schleife hier, ich bin werde weitermachen und speichern in meinem 299 00:13:49,410 --> 00:13:57,440 $ Table, dass $ Wort wahr wird. 300 00:13:57,440 --> 00:13:57,918 Fertig. 301 00:13:57,918 --> 00:14:01,264 Oh, warten. 302 00:14:01,264 --> 00:14:02,422 Fertig. 303 00:14:02,422 --> 00:14:02,760 OK. 304 00:14:02,760 --> 00:14:04,970 >> Das ist die Last ()-Funktion sagen in PHP. 305 00:14:04,970 --> 00:14:05,865 Nun, warum funktioniert das? 306 00:14:05,865 --> 00:14:07,010 Und ich bin eine Art von Betrug hier. 307 00:14:07,010 --> 00:14:09,980 >> So, ein, foreach sahen wir kurz letzten Zeit. 308 00:14:09,980 --> 00:14:13,680 Es bedeutet nur, dass Sie durchlaufen ein Array, ohne sich mit i 309 00:14:13,680 --> 00:14:16,150 und n und plus plus, und das alles. 310 00:14:16,150 --> 00:14:21,350 Wörterbuch ist natürlich der Name der Datei, etwas wie groß oder klein, die beiden 311 00:14:21,350 --> 00:14:22,830 Wörterbücher verwendeten wir letztes Mal. 312 00:14:22,830 --> 00:14:26,715 Die Datei ist eine Funktion, die sich auftut Text Datei, liest er in Zeile für Zeile, und 313 00:14:26,715 --> 00:14:29,840 Hände, die Sie sichern eine riesige Auswahl, enthält, deren Elemente ein 314 00:14:29,840 --> 00:14:31,340 Zeile aus der Datei. 315 00:14:31,340 --> 00:14:36,040 Also das ist die Kombination von fopen und fread und while-Schleife, und fclose, 316 00:14:36,040 --> 00:14:37,080 und das alles. 317 00:14:37,080 --> 00:14:40,150 Schließlich, wie Wort bedeutet nur, das ist die Variable werde ich Zugang zu haben 318 00:14:40,150 --> 00:14:41,890 bei jeder Iteration in dieser Schleife. 319 00:14:41,890 --> 00:14:46,910 >> Also kurz gesagt, diese Einzeiler bedeutet hier öffnen Sie die Datei, deren Name in 320 00:14:46,910 --> 00:14:50,750 Wörterbuch, die Variable, durchlaufen Zeile für Zeile und jedes Mal, wenn Sie 321 00:14:50,750 --> 00:14:54,290 eine Linie, speichern in einer Variablen namens Wort, und dann tun Sie etwas mit Wort. 322 00:14:54,290 --> 00:14:55,280 Was will ich tun? 323 00:14:55,280 --> 00:14:58,110 Ich möchte mein Wort in Hash-Tabelle setzen. 324 00:14:58,110 --> 00:15:00,860 >> Nun, ich kann etwas in meinem setzen Hash-Tabelle wie in C 325 00:15:00,860 --> 00:15:02,140 mit eckigen Klammern. 326 00:15:02,140 --> 00:15:03,660 Dies ist der Name für meine Hash-Tabelle. 327 00:15:03,660 --> 00:15:07,180 Ich bin zum Index gehen in diesem Hash Tisch an diesem Standort. 328 00:15:07,180 --> 00:15:08,920 Also nicht Klammer Null, nicht eine Halterung. 329 00:15:08,920 --> 00:15:11,990 Bracket Zitat unquote etwas, was auch immer das Wort ist. 330 00:15:11,990 --> 00:15:15,200 Und wie Sie vielleicht in Ihrem haben Hash-Tabelle Trie Arbeit, die Sie gerade speichern 331 00:15:15,200 --> 00:15:17,650 effektiv ein Boolean, implizit oder explizit. 332 00:15:17,650 --> 00:15:18,260 Fertig. 333 00:15:18,260 --> 00:15:20,000 Ich bin Speicherung der Wert true. 334 00:15:20,000 --> 00:15:23,150 >> Jetzt gibt es ein paar Dinge, Ich schneide Ecken hier. 335 00:15:23,150 --> 00:15:27,720 Technisch ist es geht um ein sein ärgerlich neuen Zeile / n, am Ende 336 00:15:27,720 --> 00:15:28,820 jedes dieser Wörter. 337 00:15:28,820 --> 00:15:31,770 Also sollte ich wohl nennen eine PHP-Funktion genannt chop (), die wird 338 00:15:31,770 --> 00:15:33,460 wahrsten Sinne des Wortes, dass hacken weg. 339 00:15:33,460 --> 00:15:35,020 Und ich tatsächlich benötigen, um tun eine andere Sache. 340 00:15:35,020 --> 00:15:38,380 Ich sollte wohl erhöhen Größe auf jedem Iteration, so dass ich die Verfolgung 341 00:15:38,380 --> 00:15:39,560 global von dem, was es ist. 342 00:15:39,560 --> 00:15:43,180 Und ehrlich gesagt, und dies ist einer der dümmer Aspekte von PHP, wenn Sie 343 00:15:43,180 --> 00:15:46,950 mit einer globalen Variablen, müssen Sie explizit sagen, dass du bist. 344 00:15:46,950 --> 00:15:51,670 Also werde ich tatsächlich in globale geben $ Size, global $ table, und jetzt 345 00:15:51,670 --> 00:15:52,690 meine Funktion abgeschlossen ist. 346 00:15:52,690 --> 00:15:57,475 >> Also nicht ganz so einfach wie früher, aber wahrscheinlich weniger Zeit als die C 347 00:15:57,475 --> 00:15:58,220 Version, vielleicht? 348 00:15:58,220 --> 00:15:58,730 OK. 349 00:15:58,730 --> 00:16:00,390 >> So, jetzt machen wir den Scheck ()-Funktion. 350 00:16:00,390 --> 00:16:04,300 Mal sehen, ob dies zumindest nahm die Stunden lang am Ende, dass es nahm uns in C. So 351 00:16:04,300 --> 00:16:06,500 lassen Sie mich gehen Sie vor und erklären zu überprüfen, wie eine Funktion. 352 00:16:06,500 --> 00:16:09,070 Nimmt in Wort Argument ist die werde von Speller kommen. 353 00:16:09,070 --> 00:16:13,410 Und ich werde einfach zu überprüfen, ob die Folgende Variablen isset, Tisch 354 00:16:13,410 --> 00:16:18,400 Halterung strtolower des Wortes - 355 00:16:18,400 --> 00:16:20,590 lasst balancieren alle meine Klammern - 356 00:16:20,590 --> 00:16:24,275 dann true zurück. 357 00:16:24,275 --> 00:16:27,020 358 00:16:27,020 --> 00:16:28,460 Else - 359 00:16:28,460 --> 00:16:30,330 das war wirklich die harte Teil dieses Programms. 360 00:16:30,330 --> 00:16:31,940 Else, false zurück. 361 00:16:31,940 --> 00:16:32,630 Fertig. 362 00:16:32,630 --> 00:16:33,460 Das ist check (). 363 00:16:33,460 --> 00:16:34,520 >> Nun, warum funktioniert das? 364 00:16:34,520 --> 00:16:37,040 Nun, die ich in einem Wort übergeben, Das ist ein String. 365 00:16:37,040 --> 00:16:41,400 Zwei, ich bin in der Hash-Überprüfung Tisch, genannt $ Tisch. 366 00:16:41,400 --> 00:16:45,470 Ich zwingt ihn, indem Kleinbuchstaben eine Funktion sehr ähnlich tolower () in 367 00:16:45,470 --> 00:16:48,580 C, aber das macht das ganze Wort, nicht ein einzelnes Zeichen. 368 00:16:48,580 --> 00:16:52,680 Und wenn das gesetzt ist, in anderen Worten, es ist ein Wert gesetzt, mit anderen Worten, 369 00:16:52,680 --> 00:16:54,880 wenn es wahr ist, dann ja, Dies ist ein Wort. 370 00:16:54,880 --> 00:16:56,530 Weil ich es dort mit load (). 371 00:16:56,530 --> 00:16:59,100 Und wenn nicht, werde ich false zurück. 372 00:16:59,100 --> 00:17:00,090 >> Jetzt sind die anderen einfach. 373 00:17:00,090 --> 00:17:03,570 Funktion size (), wie kann ich dies tun? 374 00:17:03,570 --> 00:17:05,230 Ich weiß im Wesentlichen zurückkehren $ size. 375 00:17:05,230 --> 00:17:07,770 Aber ich muss technisch tun diese lästige Sache. 376 00:17:07,770 --> 00:17:10,640 Und eigentlich hören, war ich Schneiden einer Ecke zu viele. 377 00:17:10,640 --> 00:17:12,920 Ich muss wirklich global $ Tabelle zu tun. 378 00:17:12,920 --> 00:17:16,260 >> Aber, dass gesagt wird, entladen). 379 00:17:16,260 --> 00:17:17,380 Unload () ist erstaunlich. 380 00:17:17,380 --> 00:17:20,500 Funktion entladen (). 381 00:17:20,500 --> 00:17:23,990 Wie will ich zu entladen () implementieren? 382 00:17:23,990 --> 00:17:25,079 Fertig. 383 00:17:25,079 --> 00:17:25,450 OK. 384 00:17:25,450 --> 00:17:28,900 >> So entladen () ist der Speicher-Management vollständig erledigt für Sie in 385 00:17:28,900 --> 00:17:31,800 so etwas wie PHP und eine Menge von höheren Sprachen. 386 00:17:31,800 --> 00:17:32,600 Also das ist erstaunlich. 387 00:17:32,600 --> 00:17:36,080 Wie, warum zum Teufel haben wir die Vergangenheit verbracht acht Wochen auf Plus C schriftlich 388 00:17:36,080 --> 00:17:41,030 anscheinend wirklich langsam, wirklich an der Zeit verbrauchen Probleme mit zehn Stunden 389 00:17:41,030 --> 00:17:42,530 Arbeit unter unseren Gürteln? 390 00:17:42,530 --> 00:17:46,110 >> Nun, für eine Sache, kann diese Arbeit Geldstrafe für kleine Programme. 391 00:17:46,110 --> 00:17:47,840 Es ist sicherlich beschleunigt meine Entwicklungszeit. 392 00:17:47,840 --> 00:17:49,790 Aber lasst uns sehen, was passiert in der realen Welt. 393 00:17:49,790 --> 00:17:52,370 >> Lassen Sie mich in diesem Verzeichnis in einem Terminal-Fenster. 394 00:17:52,370 --> 00:17:53,370 Es gibt Speller. 395 00:17:53,370 --> 00:17:56,570 Und nebenbei bemerkt, und man könnte angetroffen haben dieses Problem in Satz 396 00:17:56,570 --> 00:17:58,190 sechs oder sieben Problem eingestellt. 397 00:17:58,190 --> 00:18:01,610 Sie müssen nicht unbedingt müssen Ende PHP-Dateien mit. php. 398 00:18:01,610 --> 00:18:05,250 Wenn du eine Zeile wie diese erste bei Ganz oben, das ist eine spezielle Linie 399 00:18:05,250 --> 00:18:10,980 der Syntax, die im Wesentlichen bedeutet, finden das Programm namens PHP und es verwenden, um 400 00:18:10,980 --> 00:18:12,270 diese Datei interpretieren. 401 00:18:12,270 --> 00:18:15,410 So, jetzt niemand wirklich weiß, dass Ich bin ein PHP-Programm. 402 00:18:15,410 --> 00:18:19,860 Ich kann es nur laufen, als ob es wurden etwas in C kompiliert 403 00:18:19,860 --> 00:18:20,650 >> Aber hier ist das Ding. 404 00:18:20,650 --> 00:18:21,600 Eigentlich machen wir das wieder. 405 00:18:21,600 --> 00:18:23,530 Dropbox/pset6 /. 406 00:18:23,530 --> 00:18:25,390 Es gibt Speller. 407 00:18:25,390 --> 00:18:26,720 OK, 0,44 Sekunden. 408 00:18:26,720 --> 00:18:28,080 Es wurde schneller diesmal. 409 00:18:28,080 --> 00:18:29,745 >> Lassen Sie uns nun in die PHP-Version gehen. 410 00:18:29,745 --> 00:18:43,070 411 00:18:43,070 --> 00:18:44,320 Nette Geste. 412 00:18:44,320 --> 00:18:50,830 413 00:18:50,830 --> 00:18:53,285 Aber denken Sie nur, wie viel Zeit Ich sparte an Bürozeiten. 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 >> Also 3,59 Sekunden, die eigentlich klingt nicht präzise entweder. 417 00:19:01,020 --> 00:19:03,710 Aber das ist, weil es kurz, wenn Sie den Ausdruck eine riesige Menge 418 00:19:03,710 --> 00:19:06,840 Sachen auf den Bildschirm, dass selbst Dinge verlangsamt. 419 00:19:06,840 --> 00:19:11,260 Was es wirklich die CPU in die Gerät war 3,59 Sekunden, in 420 00:19:11,260 --> 00:19:15,260 Im Gegensatz zu C, die 0,44 nahm Sekunden vor kurzem. 421 00:19:15,260 --> 00:19:17,620 Das ist wirklich eine Reihenfolge der Größenordnung anders. 422 00:19:17,620 --> 00:19:20,280 >> Also, wo ist, dass der Preis aus? 423 00:19:20,280 --> 00:19:21,790 Warum ist es so viel langsamer? 424 00:19:21,790 --> 00:19:24,220 Warum PHP durchzuführen, so schlecht? 425 00:19:24,220 --> 00:19:25,242 Danielle? 426 00:19:25,242 --> 00:19:26,550 >> ZIELGRUPPE: Sie haben nicht wirklich verwenden Sie eine Hash-Tabelle. 427 00:19:26,550 --> 00:19:27,710 >> DAVID MALAN: Ich habe nicht wirklich verwenden Sie eine Hash-Tabelle. 428 00:19:27,710 --> 00:19:28,760 Also habe ich getan. 429 00:19:28,760 --> 00:19:29,870 Es ist also ein assoziatives Array. 430 00:19:29,870 --> 00:19:33,650 Wahrscheinlich, wenn die Leute bei PHP wirklich smart, unter der sie verwendet 431 00:19:33,650 --> 00:19:39,520 Haube eine tatsächliche Hash-Tabelle implementiert in so etwas wie C oder C + +. 432 00:19:39,520 --> 00:19:41,290 Aber. 433 00:19:41,290 --> 00:19:42,760 Ja. 434 00:19:42,760 --> 00:19:44,010 >> ZIELGRUPPE: [unverständlich]. 435 00:19:44,010 --> 00:19:46,690 436 00:19:46,690 --> 00:19:47,080 >> DAVID MALAN: Ja. 437 00:19:47,080 --> 00:19:50,780 Also jede der Funktionen, die ich jetzt geschrieben - Eigentlich kann man sagen, dass einmal mehr ein 438 00:19:50,780 --> 00:19:51,480 etwas lauter? 439 00:19:51,480 --> 00:19:54,509 >> ZIELGRUPPE: Jede der Funktionen, die Sie enthalten hat viel mehr Voll 440 00:19:54,509 --> 00:19:56,610 Kapazität als - 441 00:19:56,610 --> 00:19:57,550 >> DAVID MALAN: Also das ist sehr wahr. 442 00:19:57,550 --> 00:20:01,490 Es gibt viel mehr Aufwand, dass wir nicht wirklich zu sehen, indem sie nur auf 443 00:20:01,490 --> 00:20:03,730 dictionary.php, die ich gerade geschrieben habe. 444 00:20:03,730 --> 00:20:08,020 Im Gegensatz dazu gibt es eine ganze Dolmetscher gehen in den Hintergrund. 445 00:20:08,020 --> 00:20:12,040 In der Tat, wenn ich lief dieses Programm, es nicht ausgeführt wurde zusammengestellt Nullen und Einsen 446 00:20:12,040 --> 00:20:14,290 für meine Intel CPU ausgelegt. 447 00:20:14,290 --> 00:20:19,270 Vielmehr lief Zeile für Zeile PHP-Code, der genau aussieht 448 00:20:19,270 --> 00:20:20,350 wie wir es getippt. 449 00:20:20,350 --> 00:20:22,475 Und so, wenn Sie eine verwenden interpretierte Sprache, die Sie 450 00:20:22,475 --> 00:20:23,850 eigentlich zahlen diesen Preis. 451 00:20:23,850 --> 00:20:27,010 Es wird einige Zeit dauern, um zu lesen Ihre Datei von oben nach unten, von links nach 452 00:20:27,010 --> 00:20:30,740 rechts, und führen Sie dann jeweils Linie wieder und wieder. 453 00:20:30,740 --> 00:20:34,250 >> Jetzt in der Realität, vor allem über das Internet, Sie können tatsächlich beschleunigen diesen Prozess 454 00:20:34,250 --> 00:20:38,660 durch Zwischenspeichern der Ergebnisse der PHP-Code interpretiert. 455 00:20:38,660 --> 00:20:41,640 Und das macht Sinn, über das Internet, weil wenn Sie nicht ein Benutzer wie haben 456 00:20:41,640 --> 00:20:46,300 mich hier, aber 1.000 oder 10.000 Benutzer, dann vielleicht das erste Mal die Datei 457 00:20:46,300 --> 00:20:49,050 abgerufen, es ist langsam, aber danach es ist viel schneller. 458 00:20:49,050 --> 00:20:51,000 >> Aber auch dies ist wiederum ein Kompromiß. 459 00:20:51,000 --> 00:20:53,870 Und für so etwas wie eine Forschungsdaten eingestellt ist, oder sogar etwas groß wie 460 00:20:53,870 --> 00:20:58,330 diese, werden die Benutzer schließlich beginnen, diese Verlangsamung fühlen. 461 00:20:58,330 --> 00:21:02,670 >> Also kurz gesagt, interpretierte Sprachen sehr viel in der Mode, sehr beliebt, und 462 00:21:02,670 --> 00:21:06,710 ehrlich gesagt sind wahrscheinlich die Sprachen, die Sie sollten bei der Lösung von Problemen zu erreichen 463 00:21:06,710 --> 00:21:08,200 Anschluss an CS50. 464 00:21:08,200 --> 00:21:12,720 Aber klar, wie viel Sie wirklich nehmen für gewährt unter der Haube 465 00:21:12,720 --> 00:21:15,910 wirklich diese letzten Wochen in Hash- Tabellen und Bäumen, und versucht, 466 00:21:15,910 --> 00:21:20,770 was letztendlich tatsächlich verwendet werden Umsetzung Dinge wie offene Klammer, 467 00:21:20,770 --> 00:21:24,200 eckige Klammer, die wir jetzt dankbar für selbstverständlich. 468 00:21:24,200 --> 00:21:26,360 >> Werfen wir also einen Blick jetzt in dieser Web-Kontext. 469 00:21:26,360 --> 00:21:29,890 Und ich erwähnte letzte Mal, dass es ein Haufen von Superglobalen in PHP, dass 470 00:21:29,890 --> 00:21:32,490 sind nicht wirklich relevant auf der Kommandozeile. 471 00:21:32,490 --> 00:21:36,210 Sie sind mehr relevant im Kontext der Verwendung von PHP in einer Web-Kontext. 472 00:21:36,210 --> 00:21:41,220 So läuft PHP auf einem Web-Server, um um Sachen wie HTML zu generieren. 473 00:21:41,220 --> 00:21:44,540 >> Und wir blickte auf $ _GET und $ _POST, das ist, wo automatisch der Benutzer 474 00:21:44,540 --> 00:21:49,100 Eingangs endet einfach, wenn Sie unterbreitet einen zu bilden, um eine Datei mit der Endung. php auf einer Web- 475 00:21:49,100 --> 00:21:50,460 Server wie das Gerät. 476 00:21:50,460 --> 00:21:53,310 Aber lassen Sie uns kurz auf $ _COOKIE Und $ _SESSION. 477 00:21:53,310 --> 00:21:56,670 >> In juristischer Hinsicht, was ist ein Cookie als Sie es im Kontext der verstehen 478 00:21:56,670 --> 00:21:58,220 über das Web? 479 00:21:58,220 --> 00:21:59,450 >> ZIELGRUPPE: Datei auf dem Computer. 480 00:21:59,450 --> 00:21:59,920 >> DAVID MALAN: Ja. 481 00:21:59,920 --> 00:22:03,500 Es ist eine Datei auf dem Computer des Benutzers unabhängig von Website gepflanzt 482 00:22:03,500 --> 00:22:04,410 Sie geschehen, zu besuchen. 483 00:22:04,410 --> 00:22:07,334 Also, wenn Sie auf Facebook, wenn Sie gehen, gehen zu bankofamerica.com, wenn Sie gehen, 484 00:22:07,334 --> 00:22:10,330 auf google.com, wenn Sie zu fast jedem gehen Website in der Welt in diesen Tagen, 485 00:22:10,330 --> 00:22:14,850 einschließlich cs50.net wird ein Cookie gepflanzt auf dem Computer, das ist 486 00:22:14,850 --> 00:22:19,800 entweder im RAM gespeicherte Wert in Ihrem Computer in Ihrem Browser-Speicher oder 487 00:22:19,800 --> 00:22:22,800 manchmal in der Tat eine Datei gespeichert auf Ihrer Festplatte. 488 00:22:22,800 --> 00:22:26,960 >> Und was ist in der Regel in dieser Datei gespeichert nicht Ihren Benutzernamen, Ihr 489 00:22:26,960 --> 00:22:31,060 vergessen, in der Regel nicht etwas, empfindlich, wenn die Website nicht so 490 00:22:31,060 --> 00:22:35,040 gut mit ihrer Sicherheit, sondern es ist eine große eindeutige Kennung unter 491 00:22:35,040 --> 00:22:35,680 andere Dinge. 492 00:22:35,680 --> 00:22:38,920 Es ist eine große Zufallszahl auf Ihrem gepflanzt Computer, sondern Sie als denken können 493 00:22:38,920 --> 00:22:42,740 Art eine virtuelle Hand Stempel wie von ein Club oder ein Freizeitpark, die 494 00:22:42,740 --> 00:22:47,160 ermöglicht es dem Personal, dass die Eigentümer der Service, daran zu erinnern, wer Sie sind. 495 00:22:47,160 --> 00:22:51,030 Also, wenn das große Zufallszahl ist wie 12345678, aber das ist offensichtlich 496 00:22:51,030 --> 00:22:54,180 nicht zu zufällig, denken, dass die Handstempel, dass, wenn Sie besuchen 497 00:22:54,180 --> 00:22:57,930 facebook.com zum ersten Mal, sie stempeln diese Nummer auf der Hand. 498 00:22:57,930 --> 00:23:01,510 Und dann, weil Sie sprechen HTTP, Sie ein Browser, und weil Facebook 499 00:23:01,510 --> 00:23:06,440 spricht offensichtlich das gleiche wie ein Web Server, so das Protokoll HTTP, dass 500 00:23:06,440 --> 00:23:09,930 wenn Sie anschließend besuchen facebook.com, ob es eine zweite 501 00:23:09,930 --> 00:23:13,560 später eine Stunde später noch am nächsten Tag, so lange, wie Sie nicht explizit haben 502 00:23:13,560 --> 00:23:17,050 abgemeldet, effektiv die ist wie die Hände zu waschen. 503 00:23:17,050 --> 00:23:20,280 HTTP sagt, Sie sollten Ihren präsentieren Handstempel jedes Mal wenn Sie 504 00:23:20,280 --> 00:23:22,020 Rückkehr zu dieser Website. 505 00:23:22,020 --> 00:23:24,390 >> Welche Facebook, dann ist sie nicht schauen, dass Hand-und Stempel 506 00:23:24,390 --> 00:23:26,850 sie sagen, oh, 123456789. 507 00:23:26,850 --> 00:23:30,260 Ich weiß nicht auf den ersten Blick wissen, dass diese David Malan ist in Cambridge, 508 00:23:30,260 --> 00:23:34,690 Massachusetts, aber sie überprüfen können ihre Datenbank und sagen, oh, die Person 509 00:23:34,690 --> 00:23:39,930 , auf dessen Computer die wir gepflanzt 123456789 David Malan aus Cambridge, 510 00:23:39,930 --> 00:23:40,440 Massachusetts. 511 00:23:40,440 --> 00:23:46,000 Lasst uns zeigen, dass die Benutzer dann sein Profil Seite oder seinem News Feed. 512 00:23:46,000 --> 00:23:49,660 >> Aber es gibt hier ein Problem, wenn diese ist, wie das Web in der Tat funktioniert. 513 00:23:49,660 --> 00:23:51,390 Werfen wir einen Blick auf ein kleines Beispiel. 514 00:23:51,390 --> 00:23:55,190 Lassen Sie tatsächlich gehen zu sagen, facebook.com. 515 00:23:55,190 --> 00:23:58,130 Aber bevor wir dorthin gehen konnte, lassen mir gehen Sie vor und öffnen Chrome 516 00:23:58,130 --> 00:23:59,790 Inspector hier unten. 517 00:23:59,790 --> 00:24:01,140 Lassen Sie mich auf der Registerkarte Netzwerk zu suchen. 518 00:24:01,140 --> 00:24:06,020 Und nun gehen Sie vor und geben lassen in https://facebook.com. 519 00:24:06,020 --> 00:24:09,410 Und ich mache das so, dass wir nicht sehen alle diese Weiterleitungen und Abfall 520 00:24:09,410 --> 00:24:10,660 Blick durch die Zeit. 521 00:24:10,660 --> 00:24:12,690 Lassen Sie mich drücken Sie Enter. 522 00:24:12,690 --> 00:24:13,130 >> Gut. 523 00:24:13,130 --> 00:24:14,580 Wir sehen eine ganze Reihe von Anfragen. 524 00:24:14,580 --> 00:24:15,640 Es kommt Facebook. 525 00:24:15,640 --> 00:24:16,930 Es gibt eine ganze Reihe von Dateien. 526 00:24:16,930 --> 00:24:19,290 Und hier, nach meiner Erwähnung von Latenz letzte Mal, das ist 527 00:24:19,290 --> 00:24:21,240 eine Menge von HTTP-Anfragen. 528 00:24:21,240 --> 00:24:23,700 Aber der erste ist wahrscheinlich die interessantesten. 529 00:24:23,700 --> 00:24:26,420 >> Lassen Sie uns also hier unten scrollen, und Ich werde in einem zweiten vergrößern. 530 00:24:26,420 --> 00:24:29,090 Das wird Art sein ein Chaos, aber mal sehen. 531 00:24:29,090 --> 00:24:31,660 Facebook schickt uns eine ganze Reihe von Sachen. 532 00:24:31,660 --> 00:24:33,490 >> Aber whoa, interessant. 533 00:24:33,490 --> 00:24:37,880 Sie sind der Pflanzung nicht eine, sondern vier Handstempel auf meine Hand hier. 534 00:24:37,880 --> 00:24:40,400 Set-Cookie, Set-Cookie, Set-Cookie, Set-Cookie. 535 00:24:40,400 --> 00:24:44,030 Und es gibt ein paar Features hier. 536 00:24:44,030 --> 00:24:46,170 Alle von ihnen erwähnen einige Art der Ausatmung. 537 00:24:46,170 --> 00:24:50,090 Und es sieht aus wie Facebook hofft, an mich zu erinnern, bis zum Jahr 2015. 538 00:24:50,090 --> 00:24:53,670 Also das ist vermutlich der Zeitpunkt, zu dem Ich muss sich abmelden oder sie werden nur 539 00:24:53,670 --> 00:24:55,710 Ich bin automatisch davon ausgehen, nicht zurück. 540 00:24:55,710 --> 00:24:57,840 Also das ist eigentlich ein anständiger Zeit. 541 00:24:57,840 --> 00:24:59,170 >> Und es gibt einige andere Dinge, die sich hier. 542 00:24:59,170 --> 00:25:03,036 Dieses Cookie wird zwangsweise sein sagen, es im Jahr 1970 abgelaufen gelöscht 543 00:25:03,036 --> 00:25:04,460 vor Cookies existierte. 544 00:25:04,460 --> 00:25:06,510 So wird der Browser nur gehen anzunehmen, OK, das ist wie 545 00:25:06,510 --> 00:25:07,910 Waschen der Hände Marke. 546 00:25:07,910 --> 00:25:11,240 >> Aber jetzt, wenn mein Browser macht eine nachfolgende Anforderung - 547 00:25:11,240 --> 00:25:14,340 lassen Sie mich gehen Sie vor und tun dies wieder und reload. 548 00:25:14,340 --> 00:25:18,170 Nun lassen Sie mich zurück blättern Sie zu der Top-Anfrage und nach unten gehen 549 00:25:18,170 --> 00:25:20,760 hier anfordern Header. 550 00:25:20,760 --> 00:25:21,390 Beachten Sie diese. 551 00:25:21,390 --> 00:25:25,280 So, jetzt bin ich unter nicht-Antwort-Header, aber beachten, es sagt Request-Header. 552 00:25:25,280 --> 00:25:29,220 Und feststellen, dass mein Browser als Teil des seine Forderung nach der Kollision mit reload hat 553 00:25:29,220 --> 00:25:32,780 mindestens folgende gesendet Informationen. 554 00:25:32,780 --> 00:25:34,670 Nicht Set-Cookie, aber Cookie. 555 00:25:34,670 --> 00:25:38,750 Also das ist die Linie, den HTTP-Header, so zu sprechen, wo mein Browser ist eine Art 556 00:25:38,750 --> 00:25:43,340 der ohne mein Wissen präsentieren meine Hand für Facebook-Inspektion. 557 00:25:43,340 --> 00:25:46,020 >> Also diese Cookies kann dann für das, was genutzt? 558 00:25:46,020 --> 00:25:49,420 Zu erinnern, wer Sie sind, oder daran erinnern, wie oft Sie dort gewesen sind, oder 559 00:25:49,420 --> 00:25:50,280 wirklich etwas. 560 00:25:50,280 --> 00:25:52,742 >> So, hier ist counter.php. 561 00:25:52,742 --> 00:25:53,780 Und lassen Sie mich vergrößern Sie die Schrift. 562 00:25:53,780 --> 00:25:58,380 Und jedes Mal, wenn ich diese Seite neu laden, Kündigung es ist zu erinnern, wie viele Male 563 00:25:58,380 --> 00:25:59,250 Ich bin dort gewesen. 564 00:25:59,250 --> 00:26:00,570 Nun, das ist gar nicht so beeindruckend. 565 00:26:00,570 --> 00:26:03,140 Sagen wir einfach, dass die Registerkarte zu schließen, und jetzt zurückgehen zu lassen, 566 00:26:03,140 --> 00:26:07,860 http://localhost/counter.php. 567 00:26:07,860 --> 00:26:08,970 >> Oh, das ist interessant. 568 00:26:08,970 --> 00:26:10,960 Es ist immer noch in Erinnerung, auch obwohl ich die Registerkarte geschlossen. 569 00:26:10,960 --> 00:26:14,010 Und ehrlich gesagt, wenn ich den Browser zu schließen, Wenn in der richtigen Weise durchgeführt, I 570 00:26:14,010 --> 00:26:18,950 konnte sich noch erinnern, dass dieser Benutzer wer er oder sie war das erste Mal, und 571 00:26:18,950 --> 00:26:22,840 nur wenn ich in Chrome-Menü, gehen die hier ist hier, und gehen Sie zu 572 00:26:22,840 --> 00:26:25,990 Geschichte, und klicken Sie auf Internetdaten löschen, wie einige von euch vielleicht in der haben 573 00:26:25,990 --> 00:26:33,050 Vergangenheit, nur dann wird Ihre Cookies während der Web tatsächlich gelöscht werden 574 00:26:33,050 --> 00:26:33,970 Entwicklung. 575 00:26:33,970 --> 00:26:35,340 >> Also, wenn wir gehen - 576 00:26:35,340 --> 00:26:37,080 wir hautnah gedit hier. 577 00:26:37,080 --> 00:26:38,910 Und wenn wir jetzt auf diese Datei. 578 00:26:38,910 --> 00:26:44,210 Lassen Sie mich gehen in unsere vhosts / localhost / Öffentlichkeit, und lass mich tun 579 00:26:44,210 --> 00:26:46,340 counter.php. 580 00:26:46,340 --> 00:26:48,350 Beachten Sie, dass dies ein ziemlich einfaches Programm. 581 00:26:48,350 --> 00:26:50,250 Es ist eine ziemlich einfache Website. 582 00:26:50,250 --> 00:26:51,770 >> Also der Anfang der Datei ist nur Kommentare. 583 00:26:51,770 --> 00:26:54,930 Aber hier ist eine neue Linie, die Sie wurden bereits in p-set sieben gesehen, 584 00:26:54,930 --> 00:26:56,000 session_start (). 585 00:26:56,000 --> 00:27:00,380 Dies ist eine Zeile PHP-Code, der Wesentlichen erzählt die Web-Server machen 586 00:27:00,380 --> 00:27:03,400 Achten Sie darauf, die Hände zu stempeln und zu Achten Sie darauf, Handstempel zu überprüfen. 587 00:27:03,400 --> 00:27:06,810 Das ist alles, Linie tut, und es tut all dieses Prozesses für uns. 588 00:27:06,810 --> 00:27:09,510 Dann merke ich habe gerade zwei Zweige hier. 589 00:27:09,510 --> 00:27:14,150 Wenn der Zähler Schlüssel in dieser Sonder globale Variable namens 590 00:27:14,150 --> 00:27:18,010 $ _SESSION Eingestellt ist - mit anderen Worten, wenn es etwas gibt Wert - 591 00:27:18,010 --> 00:27:22,440 lasst es uns und speichern sie in einem lokalen Variable namens $ Zähler. 592 00:27:22,440 --> 00:27:27,000 Else, wir weisen Sie $ counter der Standardwert von 0 auf. 593 00:27:27,000 --> 00:27:30,320 >> Jetzt ist hier ein Aspekt, der von PHP ist ein Segen und ein Fluch. 594 00:27:30,320 --> 00:27:32,080 PHP ist ein wenig schlampig. 595 00:27:32,080 --> 00:27:35,160 Während also in C, was wäre die Umfang der Gegen haben 596 00:27:35,160 --> 00:27:36,725 entweder hier oder hier? 597 00:27:36,725 --> 00:27:39,270 598 00:27:39,270 --> 00:27:41,690 >> Es wäre beschränkt sind auf diese geschweiften Klammern. 599 00:27:41,690 --> 00:27:42,090 Ratet mal, was? 600 00:27:42,090 --> 00:27:46,920 In PHP, auch außerhalb derer es existiert geschweiften Klammern, hier, und hier, 601 00:27:46,920 --> 00:27:49,120 und hier, und hier, und auch unten. 602 00:27:49,120 --> 00:27:52,400 Also ich sagen, das ist ein Segen, in dem Sinne, dass Sie nicht haben, um so zu denken 603 00:27:52,400 --> 00:27:54,070 hart wie wir schon vor Wochen getan hat. 604 00:27:54,070 --> 00:27:56,880 Aber es ist auch ein bisschen wie ein Fluch, dass egal, wo Sie eine Variable in verwenden 605 00:27:56,880 --> 00:28:00,020 PHP, zumindest in einem Programm wie dieses, es ist für global zugänglich 606 00:28:00,020 --> 00:28:01,170 Guten oder zum Schlechten. 607 00:28:01,170 --> 00:28:06,130 Also muss man jetzt, im Auge zu behalten Ihre Variablen kann nicht undefiniert. 608 00:28:06,130 --> 00:28:07,640 Sie können sie an anderer Stelle definiert haben. 609 00:28:07,640 --> 00:28:09,460 >> Aber was soll ich denn letztlich tun? 610 00:28:09,460 --> 00:28:13,160 Ich werde innerhalb dieser globalen speichern Variable als Wert der 611 00:28:13,160 --> 00:28:17,060 Zähler das Ergebnis der Dabei Zähler plus 1. 612 00:28:17,060 --> 00:28:18,910 Also das ist nur der Arithmetik das macht die 613 00:28:18,910 --> 00:28:20,590 Inkrementierung dieses Zählers. 614 00:28:20,590 --> 00:28:24,850 Und die Tatsache, dass ich, dass die Speicherung Wert wieder hier ist Mittel zum 615 00:28:24,850 --> 00:28:29,970 die Datenbank zu aktualisieren, um im wesentlichen daran erinnern, dass Benutzer 123456789 hat 616 00:28:29,970 --> 00:28:31,010 hier zweimal. 617 00:28:31,010 --> 00:28:33,780 Und wenn ich es wieder tun ich das nächste Mal laden Sie die Seite, es geht um zu überprüfen, 618 00:28:33,780 --> 00:28:36,710 meine Hand Tempel und sagen, oh, Benutzer 123456789 hat jetzt 619 00:28:36,710 --> 00:28:38,410 dreimal hier gewesen. 620 00:28:38,410 --> 00:28:43,390 >> Und so was PHP und ähnliche Sprachen sind für uns tun, ist sie herauszufinden 621 00:28:43,390 --> 00:28:47,720 herauszufinden, wie und wo und wie lange Werte in dieser speziellen speichern 622 00:28:47,720 --> 00:28:48,830 Superglobal. 623 00:28:48,830 --> 00:28:52,750 Und dies superglobale ich das nächste Mal besuchen Sie die Seite ist irgendwie magisch 624 00:28:52,750 --> 00:28:57,440 Pre-besiedelten, mit Werten gefüllt, dass da waren Sie das letzte Mal besuchte, 625 00:28:57,440 --> 00:29:02,310 ob das vor einer Sekunde war, eine Woche vor oder im Jahr 2013, und wir sprechen jetzt 626 00:29:02,310 --> 00:29:03,790 etwa zum Jahr 2015. 627 00:29:03,790 --> 00:29:07,600 PHP und der Webserver kümmern all das für Sie. 628 00:29:07,600 --> 00:29:08,850 >> ZUSCHAUER: [unverständlich]. 629 00:29:08,850 --> 00:29:11,900 630 00:29:11,900 --> 00:29:15,760 >> DAVID MALAN: Variablen in PHP sind Wesentlichen immer global, wenn Sie 631 00:29:15,760 --> 00:29:18,400 erklären sie innerhalb einer Funktion, und dann sind sie lokal auf 632 00:29:18,400 --> 00:29:19,420 die Funktion nur. 633 00:29:19,420 --> 00:29:22,300 Aber weil ich keine schriftliche Funktionen, sind sie nun wirksam 634 00:29:22,300 --> 00:29:25,090 globalen während meiner gesamten Datei hier. 635 00:29:25,090 --> 00:29:26,040 >> ZUSCHAUER: Gibt es eine Möglichkeit um sie lokale? 636 00:29:26,040 --> 00:29:28,470 >> DAVID MALAN: Gibt es eine Weg, um sie vor Ort? 637 00:29:28,470 --> 00:29:30,680 Nur, indem Sie sie in Funktionen. 638 00:29:30,680 --> 00:29:32,790 Die in der neuesten Version von PHP, können Sie dies tun mit 639 00:29:32,790 --> 00:29:34,130 eine anonyme Funktion. 640 00:29:34,130 --> 00:29:35,930 Aber mehr dazu in der Kontext von JavaScript. 641 00:29:35,930 --> 00:29:37,260 Aber die kurze Antwort ist nein. 642 00:29:37,260 --> 00:29:40,888 Eine längere Antwort ist ja. 643 00:29:40,888 --> 00:29:42,380 Nizza. 644 00:29:42,380 --> 00:29:43,380 Gut Quizfrage. 645 00:29:43,380 --> 00:29:43,930 In Ordnung. 646 00:29:43,930 --> 00:29:47,760 >> So endlich ist die Seite selbst eigentlich ziemlich einfach. 647 00:29:47,760 --> 00:29:51,470 Beachten Sie, dass, wenn ich PHP-Modus zu verlassen, erinnern dass all diese Sachen nach unten 648 00:29:51,470 --> 00:29:53,700 unten ist gerade dabei, Spieß bekommen aus roh an den Browser. 649 00:29:53,700 --> 00:29:57,050 Dies ist in Ordnung, denn ich möchte zu senden der Benutzer einige HTML, aber ich will 650 00:29:57,050 --> 00:29:59,140 dynamisch zu aktualisieren, dass die HTML. 651 00:29:59,140 --> 00:30:03,930 Und eine Möglichkeit, ich dies tun können, ist zu klären, sehr schnell fallen zurück in PHP 652 00:30:03,930 --> 00:30:07,730 Modus verwenden Klammer Fragezeichen Gleichheitszeichen und dann Ausgang der Wert 653 00:30:07,730 --> 00:30:08,650 des Zählers. 654 00:30:08,650 --> 00:30:12,360 >> Oder wenn dies ein wenig kryptisch aussieht, diese Gleichheitszeichen ist eigentlich nur einige 655 00:30:12,360 --> 00:30:16,190 syntaktischen Zucker für diese printf ($ counter). 656 00:30:16,190 --> 00:30:19,160 Aber ehrlich gesagt, das ist nur ein wenig hässlich und ein wenig ärgerlich zu tippen. 657 00:30:19,160 --> 00:30:23,660 So PHP sehr schön bietet dieses Feature wo man einfach sagen, dass es mehr 658 00:30:23,660 --> 00:30:25,450 bündig in der gleichen Weise. 659 00:30:25,450 --> 00:30:26,940 >> Also, was ist los unter die Haube? 660 00:30:26,940 --> 00:30:31,210 Lassen Sie uns schnell Blick auf das Netzwerk Registerkarte hier für counter.php. 661 00:30:31,210 --> 00:30:35,090 Und lassen Sie mich voran und zuerst gehen Lassen Sie uns Ihre Cookies löschen. 662 00:30:35,090 --> 00:30:38,670 Lassen Sie uns klar Internetdaten seit der Beginn der Zeit. 663 00:30:38,670 --> 00:30:39,680 Jetzt gehen wir wieder hier. 664 00:30:39,680 --> 00:30:41,340 Nun wollen wir die Seite neu laden. 665 00:30:41,340 --> 00:30:42,170 Und ich bin wieder bei Null. 666 00:30:42,170 --> 00:30:44,810 Weil meine Hand Stempel wurde gewaschen, Ich bekomme jetzt ein neues Cookie. 667 00:30:44,810 --> 00:30:48,780 >> In der Tat, wenn ich mir die Netzwerk-Registerkarte und Blick auf Response-Header, bemerken 668 00:30:48,780 --> 00:30:51,960 dass das Gerät sendet mir Cookie, dessen Name ist etwas 669 00:30:51,960 --> 00:30:55,820 willkürlich, aber irgendwie vernünftig, PHPSESSID. 670 00:30:55,820 --> 00:30:58,440 Und es schickt mir das wirklich große Zufallszahl. 671 00:30:58,440 --> 00:30:59,440 Es ist nicht eine ganze Reihe. 672 00:30:59,440 --> 00:31:00,390 Es ist nicht ganz hexadezimal. 673 00:31:00,390 --> 00:31:03,600 Es ist eine Art von alphanumerische Zeichenfolge aber vermutlich ist es zufällig. 674 00:31:03,600 --> 00:31:06,830 Und das ist die Hand Stempel so auf sprechen, dass ich mich beziehe. 675 00:31:06,830 --> 00:31:11,960 >> Inzwischen, wenn ich auf laden und dann Blick auf diese zweite Linie für meine zweite 676 00:31:11,960 --> 00:31:17,600 Anfrage jetzt feststellen, dass meine Anfrage Header enthalten PHPSESSID entspricht dies, 677 00:31:17,600 --> 00:31:19,390 nicht Set-Cookie, sondern nur Cookie. 678 00:31:19,390 --> 00:31:22,950 Und das ist meines Browsers Präsentation meiner Hand Stempel. 679 00:31:22,950 --> 00:31:28,820 >> So, jetzt als Teaser, und wir werden mehr reden darüber in einer Woche oder so, aber 680 00:31:28,820 --> 00:31:31,590 in welcher Weise dies macht Sie verletzlich, deinen Facebook-Account 681 00:31:31,590 --> 00:31:34,137 anfällig und andere derartige Konten anfällig? 682 00:31:34,137 --> 00:31:35,510 >> ZUSCHAUER: Wenn jemand Ihre Cookie. 683 00:31:35,510 --> 00:31:36,750 >> DAVID MALAN: Ja, wenn jemand hat Ihre Cookie. 684 00:31:36,750 --> 00:31:39,920 Ich meine wirklich, so wie einige von euch vielleicht an wie ein Verein oder eine versucht haben 685 00:31:39,920 --> 00:31:44,030 Vergnügungspark, wenn Sie etwas ausprobieren wie diese zu kopieren den Stempel, wenn auch 686 00:31:44,030 --> 00:31:47,560 rückwärts auf eine andere Person die Hand, und dann hat er oder sie stellt sie als 687 00:31:47,560 --> 00:31:53,250 ihre eigenen, wenn es tatsächlich aussieht identisch, 123456789, dann die Bahn 688 00:31:53,250 --> 00:31:57,980 Server ist offenbar gerade dabei, vertrauen, dass der Nutzer Sie ist. 689 00:31:57,980 --> 00:32:01,450 >> Und dies ist in der Tat ein grundlegender Bedrohung jedes Mal, wenn Cookies 690 00:32:01,450 --> 00:32:05,420 denn wenn jemand nur so fälscht, um sprechen Ihre Cookie, Figuren heraus, was es 691 00:32:05,420 --> 00:32:08,660 wird entweder durch Kopieren wirklich Dazu suchen Sie in Ihrem Computer 692 00:32:08,660 --> 00:32:09,890 und wie ist, OK. 693 00:32:09,890 --> 00:32:14,520 Davids Cookie ist JJ3JIK und so weiter, und dann sind sie klug genug zu wissen 694 00:32:14,520 --> 00:32:18,080 wie das manuell sortieren senden, dass Cookie aus dem Browser oder von einem 695 00:32:18,080 --> 00:32:22,350 Programm, das sie schreiben, könnten sie völlig Anmeldung bei einer Website wie Sie. 696 00:32:22,350 --> 00:32:28,560 Es ist nicht so schwer zu tun, als jemand anderes, wenn wir p-Reihe erneut 697 00:32:28,560 --> 00:32:30,790 zwei, die, was eingeführt? 698 00:32:30,790 --> 00:32:32,065 >> ZUSCHAUER: Kryptographie. 699 00:32:32,065 --> 00:32:33,860 >> DAVID MALAN: Ein wenig Bit der Kryptographie. 700 00:32:33,860 --> 00:32:36,550 Einfache Kryptographie, zumindest in der Standard Edition, aber Krypto 701 00:32:36,550 --> 00:32:36,870 dennoch. 702 00:32:36,870 --> 00:32:37,410 weniger. 703 00:32:37,410 --> 00:32:41,440 So stellt sich heraus, wenn Sie alle zu verschlüsseln diese Header mit etwas, dass Sie 704 00:32:41,440 --> 00:32:48,770 jetzt vielleicht besser bekannt als SSL wissen, Secure Socket Layer, oder https:// URLs, 705 00:32:48,770 --> 00:32:51,890 dann all diese Dinge, die wir waren mit einem Blick auf tatsächlich verschlüsselt 706 00:32:51,890 --> 00:32:54,800 was bedeutet, dass es, wie Sie es kann das nicht lesen Handstempel. 707 00:32:54,800 --> 00:32:59,350 Nur facebook.com können, oder google.com, oder in diesem Fall kann das Gerät 708 00:32:59,350 --> 00:33:00,550 gelesen, dass Hand-Stempel. 709 00:33:00,550 --> 00:33:04,020 >> Tragischerweise aber, und auch dies ist allzu gegebenenfalls mit der NSA Sachen 710 00:33:04,020 --> 00:33:06,410 Neuerdings ist auch SSL zerbrechlich. 711 00:33:06,410 --> 00:33:09,850 Und es ist eigentlich nicht so schwer noch zu knacken, dass Verschlüsselung. 712 00:33:09,850 --> 00:33:12,040 Nicht so sehr durch Cracken der Verschlüsselung, aber durch Tricks die 713 00:33:12,040 --> 00:33:15,720 Browser in Entschlüsselung die Daten vorzeitig. 714 00:33:15,720 --> 00:33:17,880 Aber noch einmal, wir necken Sie mit, dass vor langer. 715 00:33:17,880 --> 00:33:21,242 Denn jetzt, nur Angst. 716 00:33:21,242 --> 00:33:23,070 Es ist tragisch Art wahr. 717 00:33:23,070 --> 00:33:23,760 >> In Ordnung. 718 00:33:23,760 --> 00:33:27,910 Also, wo kommt das jetzt für uns? 719 00:33:27,910 --> 00:33:29,010 Nun, lassen Sie uns dies tun. 720 00:33:29,010 --> 00:33:31,790 Gehen Sie voran und nehmen eine schnelle Teaser, bevor wir eine Pause machen. 721 00:33:31,790 --> 00:33:33,790 Und ich denke, wir werden ein wenig länger verweilen heute, aber wir gehen zu tauchen 722 00:33:33,790 --> 00:33:37,850 etwas ganz Neues und sexy, das wird Appetit auf noch mehr. 723 00:33:37,850 --> 00:33:38,950 Also das ist der Teaser. 724 00:33:38,950 --> 00:33:41,520 >> So SQL, wir kamen ins Gespräch über noch so kurz letzten Mal. 725 00:33:41,520 --> 00:33:44,670 Sie werden wirklich sich die Hände schmutzig mit einigen der in p-set sieben. 726 00:33:44,670 --> 00:33:46,480 Und in juristischer Hinsicht, was macht SQL - 727 00:33:46,480 --> 00:33:47,110 S-Q-L - 728 00:33:47,110 --> 00:33:49,850 für Sie tun? 729 00:33:49,850 --> 00:33:50,310 Was ist das? 730 00:33:50,310 --> 00:33:51,546 Ja. 731 00:33:51,546 --> 00:33:53,240 >> ZIELGRUPPE: Lassen Sie uns Sie Zugangsdaten. 732 00:33:53,240 --> 00:33:53,360 >> DAVID MALAN: Ja. 733 00:33:53,360 --> 00:33:55,120 Es lässt Sie Zugangsdaten in einer Datenbank. 734 00:33:55,120 --> 00:33:56,710 Structured Query Language. 735 00:33:56,710 --> 00:33:59,890 Und dies ist im wesentlichen eine Programmiersprache. 736 00:33:59,890 --> 00:34:03,400 Es sind Merkmale, daß wir nicht einmal in der Klasse. 737 00:34:03,400 --> 00:34:04,710 Aber Sie können effektiv Funktionen definieren. 738 00:34:04,710 --> 00:34:06,870 Sie werden gespeichert, die als Prozeduren in SQL. 739 00:34:06,870 --> 00:34:09,860 Aber wir werden es ziemlich einfach und einfach weiter verwenden Sie es für einige Grundoperationen 740 00:34:09,860 --> 00:34:14,320 wie die Auswahl von Daten, das Einfügen von Daten, Aktualisieren von Daten und Löschen von Daten. 741 00:34:14,320 --> 00:34:17,400 >> Und kann man wirklich von einer Datenbank zu denken, wie eine SQL-Datenbank, wie gerade 742 00:34:17,400 --> 00:34:18,800 als Microsoft Excel. 743 00:34:18,800 --> 00:34:21,989 Da SQL bezieht sich auf eine relationale Datenbank, in der 744 00:34:21,989 --> 00:34:23,480 Beziehung bedeutet nur Tabellen. 745 00:34:23,480 --> 00:34:24,739 Zeilen und Spalten. 746 00:34:24,739 --> 00:34:27,929 Also alles, was Sie in einer Tabelle setzen können so oder Google Docs, 747 00:34:27,929 --> 00:34:32,460 Sie könnten in einer SQL-Datenbank setzen durch die Deklaration einer Tabelle. 748 00:34:32,460 --> 00:34:34,800 >> Nun, wie Sie tatsächlich zugreifen dass die Informationen? 749 00:34:34,800 --> 00:34:38,239 Nun, mit Befehlen oder Fragen wie diese. 750 00:34:38,239 --> 00:34:40,199 SELECT, INSERT, UPDATE und DELETE. 751 00:34:40,199 --> 00:34:44,489 Und in den meisten Fällen sind dies die nur vier Zutaten, die Sie brauchen werden, um 752 00:34:44,489 --> 00:34:47,370 etwas zu tun, ganz stark Problem in sieben gesetzt. 753 00:34:47,370 --> 00:34:49,940 >> Jetzt wieder in den Tag, würden Sie tatsächlich Interaktion mit einer Datenbank in eine 754 00:34:49,940 --> 00:34:52,730 Schwarz-Weiß-Terminal-Fenster an eine blinkende Eingabeaufforderung wie diese. 755 00:34:52,730 --> 00:34:56,370 Und die Datenbank, die wir auf die laufen Gerät wird als MySQL, das ist, 756 00:34:56,370 --> 00:34:58,560 freie und Open-Source-Datenbank-Engine. 757 00:34:58,560 --> 00:35:02,240 Wenn Sie Google und lesen Sie den Wikipedia Artikel, werden Sie wissen, dass der Name 758 00:35:02,240 --> 00:35:05,060 ein bisschen Übergang für einige Versionen von Linux. 759 00:35:05,060 --> 00:35:10,460 Maria Datenbank tatsächlich ein Gabel so zu MySQL zu sprechen. 760 00:35:10,460 --> 00:35:12,740 >> Lange Rede kurzer Sinn, Oracle kaufte MySQL. 761 00:35:12,740 --> 00:35:13,870 Oracle ist ein großes Unternehmen. 762 00:35:13,870 --> 00:35:17,010 Die Menschen haben es hätte besorgt nicht mehr ganz so bleiben, Open Source, 763 00:35:17,010 --> 00:35:20,930 so ist dies nur eine Kopie von MySQL ist, die noch frei ist, noch Open-Source-und 764 00:35:20,930 --> 00:35:23,550 in Fedora Linux standardmäßig installiert. 765 00:35:23,550 --> 00:35:26,130 >> Aber das ist eine Art Schmerz in der Hals, um mit einem Kennenlernen 766 00:35:26,130 --> 00:35:27,310 Datenbank auf diese Weise. 767 00:35:27,310 --> 00:35:30,560 Also haben wir in der CS50-Appliance enthalten eine kostenlose Open-Source-Tool namens 768 00:35:30,560 --> 00:35:31,700 phpMyAdmin. 769 00:35:31,700 --> 00:35:33,940 Nur ein Zufall, dass es ist in PHP geschrieben. 770 00:35:33,940 --> 00:35:36,450 Es gibt keine Grund müssen für PHP hier. 771 00:35:36,450 --> 00:35:40,090 Aber das ist nur ein Web-basiertes Tool, das wir kostenlos heruntergeladen, installiert 772 00:35:40,090 --> 00:35:43,850 das Gerät, das uns zu haben, kann ein graphischen Benutzerschnittstelle, mit der 773 00:35:43,850 --> 00:35:48,610 um die p-set sieben Datenbank mit erforschen die neue Datenbanken zu erstellen, 774 00:35:48,610 --> 00:35:51,980 sagen für die eigene Abschlussprojekt, wenn du würdest wie, und letztlich 775 00:35:51,980 --> 00:35:55,900 dynamische Websites wie CS50 Finanzen , die Sie zur Abfrage von Daten zu ermöglichen und 776 00:35:55,900 --> 00:35:58,140 Daten dynamisch zu aktualisieren. 777 00:35:58,140 --> 00:36:01,420 >> Sie sind nicht zu verwenden, damit nur eine einfache Textdatei oder CSV. 778 00:36:01,420 --> 00:36:05,950 Sie können tatsächlich eine intelligente Datenbank Programm, so dass Sie mehr ausführen kann 779 00:36:05,950 --> 00:36:10,240 anspruchsvolle Anfragen als nur das Lesen durch alles, was linear. 780 00:36:10,240 --> 00:36:14,150 >> So zum Beispiel, das ist, was wir geben Sie aus der Box für p-set sieben. 781 00:36:14,150 --> 00:36:18,280 Dies ist eine Tabelle mit zumindest scheinbar drei Spalten, von denen eine 782 00:36:18,280 --> 00:36:21,450 Benutzername, von denen einer Hash, und der andere davon ID. 783 00:36:21,450 --> 00:36:26,200 >> Aber die interessante Sache, und nur um necken, ein Gedanke hier, den Benutzernamen 784 00:36:26,200 --> 00:36:29,270 ist vermutlich schon einzigartig, oder? 785 00:36:29,270 --> 00:36:31,190 Ich meine, die meisten jede Website, wenn Sie müssen einen Benutzernamen, gibt 786 00:36:31,190 --> 00:36:32,370 kann nicht zwei Cäsaren sein. 787 00:36:32,370 --> 00:36:33,440 Es kann keine zwei malans sein. 788 00:36:33,440 --> 00:36:34,950 Es kann keine zwei jharvards sein. 789 00:36:34,950 --> 00:36:35,600 Seine einzigartige. 790 00:36:35,600 --> 00:36:38,610 Ansonsten wissen sie nicht, was jharvard es tatsächlich ist. 791 00:36:38,610 --> 00:36:42,710 Also, was könnte die Motivation für die auch sein mit einer dritten Spalte von links 792 00:36:42,710 --> 00:36:46,970 dort angerufen ID, die aussieht wie ein Nummer, die ähnlich einzigartig ist? 793 00:36:46,970 --> 00:36:51,300 Es fühlt sich ein wenig redundante zu mir auf den ersten Blick. 794 00:36:51,300 --> 00:36:54,910 Warum könnte es zwingend zu haben nicht nur einzigartig, Benutzernamen, 795 00:36:54,910 --> 00:36:56,837 sondern auch einzigartige Zahlen? 796 00:36:56,837 --> 00:36:59,460 >> ZIELGRUPPE: Sie hätten das gleiche Passwort. 797 00:36:59,460 --> 00:37:01,720 >> DAVID MALAN: Menschen haben könnte das gleiche Passwort, sicher. 798 00:37:01,720 --> 00:37:03,900 Das könnte durchaus passieren. 799 00:37:03,900 --> 00:37:08,270 Aber wenn sie diese einzigartige Benutzernamen haben, habe ich würde behaupten, dass das nicht wirklich 800 00:37:08,270 --> 00:37:11,630 Egal, denn wenn sie in ihrer Art Benutzername, brauche ich nur zu prüfen, ihre 801 00:37:11,630 --> 00:37:15,060 vergessen, ihre Hash davon. 802 00:37:15,060 --> 00:37:15,970 Warum sonst? 803 00:37:15,970 --> 00:37:17,950 >> ZIELGRUPPE: Schneller suchen. 804 00:37:17,950 --> 00:37:18,680 >> DAVID MALAN: Schneller suchen. 805 00:37:18,680 --> 00:37:19,548 Warum? 806 00:37:19,548 --> 00:37:21,460 >> ZIELGRUPPE: ID ist nur eine. 807 00:37:21,460 --> 00:37:24,040 >> DAVID MALAN: ID ist nur ein Zeichen, oder um genauer zu sein, es ist eine Nummer, 808 00:37:24,040 --> 00:37:26,910 so ist es wahrscheinlich 32 Bit oder so ähnlich. 809 00:37:26,910 --> 00:37:30,270 Während der Benutzername, offenbar Jason Hirschhorns da oben ist eine Art 810 00:37:30,270 --> 00:37:33,900 lächerlich lange, und es wird nimm mich viel mehr Zeit in einen String 811 00:37:33,900 --> 00:37:40,910 Vergleichen H-I-R-S-C-H-H-O-R-N, und vielleicht a / 0 oder so etwas, um 812 00:37:40,910 --> 00:37:45,100 Jason zu schauen, im Gegensatz zu nur geben Sie mir sagen Benutzer Nummer zwei. 813 00:37:45,100 --> 00:37:46,510 Das ist 32 Bit. 814 00:37:46,510 --> 00:37:48,550 Es ist ein einziger, dass INT Sie haben zu vergleichen. 815 00:37:48,550 --> 00:37:52,150 Und in der Tat, das ist genau, warum Datenbanken neigen dazu, eindeutige IDs zuweisen 816 00:37:52,150 --> 00:37:53,710 Zeilen in ihnen. 817 00:37:53,710 --> 00:37:56,280 >> Jetzt gibt es was andere Datentypen sind neben INT und scheinbar 818 00:37:56,280 --> 00:37:57,160 Zeichenfolgen wie diese? 819 00:37:57,160 --> 00:37:59,700 Nun, zu mehr richtig, SQL-Datenbanken, wie 820 00:37:59,700 --> 00:38:02,060 MySQL, haben CHAR-Felder. 821 00:38:02,060 --> 00:38:05,320 Und Saibling ein wenig irreführend ist nicht eine einzelne CHAR. 822 00:38:05,320 --> 00:38:10,290 Eine CHAR-Feld in einer MySQL-Datenbank ein oder mehrere Zeichen, aber es ist ein 823 00:38:10,290 --> 00:38:11,780 feste Anzahl von Zeichen. 824 00:38:11,780 --> 00:38:15,710 >> So zum Beispiel, wenn ich gehe zu phpMyAdmin, wie Sie vielleicht schon haben, oder 825 00:38:15,710 --> 00:38:21,340 bald wird ein Problem stellte sieben, und ich gehe zu meiner Datenbank, und nur zum Spaß, 826 00:38:21,340 --> 00:38:25,700 Lassen Sie uns eine neue Tabelle namens erstellen testen, mit nur zwei Spalten. 827 00:38:25,700 --> 00:38:27,160 Ich werde dann auf Go. 828 00:38:27,160 --> 00:38:30,070 Und das wird ziemlich vertraut zu werden, allem, wie Sie basteln 829 00:38:30,070 --> 00:38:31,130 um auf eigene Faust. 830 00:38:31,130 --> 00:38:34,140 Hier könnte ich geben ID erstellen eine neue Tabelle vom Typ INT. 831 00:38:34,140 --> 00:38:37,770 Aber hier könnte ich den Benutzernamen eingeben neu, dass früher Tisch. 832 00:38:37,770 --> 00:38:40,700 Und feststellen, ich habe eine ganze Reihe von Typen zur Auswahl. 833 00:38:40,700 --> 00:38:43,610 >> Und auch das ist, warum phpMyAdmin ist irgendwie schön. 834 00:38:43,610 --> 00:38:46,770 Es ist eine Art Selbstlern Sie in diesem kann nur irgendwie Punkt, und klicken Sie auf, und 835 00:38:46,770 --> 00:38:50,730 Blick auf Dropdown-Menüs, und leiten aus dass das, was Kräfte SQL gibt Ihnen. 836 00:38:50,730 --> 00:38:54,090 >> Und in der Tat, wenn ich wählen CHAR, habe ich dann haben, um die Länge, oder wie angeben 837 00:38:54,090 --> 00:38:55,940 viele Werte, wie viele CHAR. 838 00:38:55,940 --> 00:39:00,090 So sehr die gemeinsamen Werte sind Dinge wie 255, aber das ist ein wenig lang. 839 00:39:00,090 --> 00:39:02,250 Häufig ist acht nach einem Benutzernamen. 840 00:39:02,250 --> 00:39:03,590 Aber das ist ein wenig klein, in diesen Tagen. 841 00:39:03,590 --> 00:39:05,430 Also das ist eine Design-Entscheidung. 842 00:39:05,430 --> 00:39:08,630 Ist es maximal 8 Zeichen, 32, 255, 1000? 843 00:39:08,630 --> 00:39:09,830 Es ist wirklich an Ihnen. 844 00:39:09,830 --> 00:39:12,350 Aber ein CHAR-Feld eine feste Zahl. 845 00:39:12,350 --> 00:39:16,420 So wählen Sie zu wenig und Sie sich irgendwie sind verschraubt, wenn Sie eine längere Benutzername möchten. 846 00:39:16,420 --> 00:39:19,132 Wählen Sie zu viele und was der Nachteil? 847 00:39:19,132 --> 00:39:20,820 >> ZIELGRUPPE: [unverständlich]. 848 00:39:20,820 --> 00:39:21,620 >> DAVID MALAN: Es ist verschwenderisch. 849 00:39:21,620 --> 00:39:24,835 Genau wie in C, wenn Sie eine größere haben Teil des Speichers als Sie brauchen, sind Sie 850 00:39:24,835 --> 00:39:27,190 nur Zeit und Platz verschwenden. 851 00:39:27,190 --> 00:39:31,430 So als Alternative besteht VARCHAR, die dieses Problem löst, 852 00:39:31,430 --> 00:39:36,390 Behandlungslänge nicht als fester Länge, sondern als eine maximale Länge, und mit einem 853 00:39:36,390 --> 00:39:40,990 variable Anzahl von Chars, die dann neigt dazu, nur so viele, wie Sie CHAR verwenden 854 00:39:40,990 --> 00:39:42,710 tatsächlich braucht. 855 00:39:42,710 --> 00:39:43,670 Das klingt perfekt. 856 00:39:43,670 --> 00:39:45,640 >> Warum nicht bekommen wir von der RID Char-Datentyp dann? 857 00:39:45,640 --> 00:39:48,500 Was könnte die Kehrseite der sein Verwendung VARCHARs, das klingt 858 00:39:48,500 --> 00:39:51,644 wie es ist ein schöner Sieg? 859 00:39:51,644 --> 00:39:52,596 Ja? 860 00:39:52,596 --> 00:39:53,846 >> ZIELGRUPPE: [unverständlich]. 861 00:39:53,846 --> 00:39:57,360 862 00:39:57,360 --> 00:39:57,790 >> DAVID MALAN: OK, gut. 863 00:39:57,790 --> 00:40:01,101 Also, wenn Sie alle Ihre Daten ist die gleiche Länge, was ist das Anliegen? 864 00:40:01,101 --> 00:40:05,250 >> ZIELGRUPPE: Weil Sie verschwenden Daten, indem er sie alle. 865 00:40:05,250 --> 00:40:09,060 >> DAVID MALAN: Also, wenn Sie alle Ihre Daten die gleiche Länge, aber ich würde behaupten, 866 00:40:09,060 --> 00:40:12,300 dass die Angabe eines maximalen Länge auf VARCHAR unterscheidet sich nicht von 867 00:40:12,300 --> 00:40:16,070 Angabe einer festen Länge auf, wenn CHAR Sie wissen, dass die Zahl im Voraus. 868 00:40:16,070 --> 00:40:19,500 Aber es ist in der Tat, und ich werde eine Art Auszug aus dieser Antwort die Realität 869 00:40:19,500 --> 00:40:22,610 dass es immer noch ein max, was könnte ärgerlich, vor allem, wenn Sie 870 00:40:22,610 --> 00:40:25,920 begegnen den Namen einer Person, die es ungewöhnlich lange, dass man nicht tat 871 00:40:25,920 --> 00:40:26,860 antizipieren. 872 00:40:26,860 --> 00:40:31,420 Und es ist auch ein wenig weniger effizient tatsächlich auf VARCHARs suchen, wie 873 00:40:31,420 --> 00:40:35,620 Gegensatz zu CHAR suchen, vor allem für lange Tische, die viel haben und 874 00:40:35,620 --> 00:40:36,510 viele Daten. 875 00:40:36,510 --> 00:40:40,060 So ist auch hier wieder thematische keine offensichtliche Wahl. 876 00:40:40,060 --> 00:40:42,870 >> Also nur, um Ihnen ein Gefühl der anderen geben Datentypen, die von Interesse sein könnten 877 00:40:42,870 --> 00:40:45,400 entweder p-gesetzt sieben oder in die Zukunft, gibt es INT. 878 00:40:45,400 --> 00:40:47,270 Es gibt BIGINT, die ist wie lange lange. 879 00:40:47,270 --> 00:40:48,880 Es neigt dazu, 64 Bits. 880 00:40:48,880 --> 00:40:51,640 Es gibt DECIMAL, die Sie sehen in das Problem Satz, der ein viel ist 881 00:40:51,640 --> 00:40:55,300 Reiniger Antwort auf Probleme, die wir mit Schwimmer-und variabel auftreten 882 00:40:55,300 --> 00:40:55,980 Punkt Ungenauigkeit. 883 00:40:55,980 --> 00:40:57,390 Und dann gibt es DATE. 884 00:40:57,390 --> 00:41:01,530 Es ist buchstäblich ein Datentyp, hat wie ein Jahr zurückblicken, einen Monat, ein Tag, 885 00:41:01,530 --> 00:41:03,730 und eine Stunde, Minute und Sekunde. 886 00:41:03,730 --> 00:41:07,470 >> Aber auch SQL-Datenbanken Dinge, die wir Indizes nennen. 887 00:41:07,470 --> 00:41:11,630 Und ein Index ist etwas, das Sie angeben, wenn Sie die Tabelle, um 888 00:41:11,630 --> 00:41:15,720 machen sucht und andere Operationen effizienter. 889 00:41:15,720 --> 00:41:18,550 Genauer gesagt, es gibt so etwas wie Der Primärindex, dass man 890 00:41:18,550 --> 00:41:19,440 wie folgt deklarieren. 891 00:41:19,440 --> 00:41:22,330 >> Wir haben dies für Sie mit der Benutzer-Tabelle geben wir Ihnen. 892 00:41:22,330 --> 00:41:26,160 Beachten Sie aber, wenn ich manuell neu zu die Benutzer-Tabelle geben hier 893 00:41:26,160 --> 00:41:27,110 es ein Name, der Nutzer. 894 00:41:27,110 --> 00:41:28,125 Ich habe bereits angegebenen ID. 895 00:41:28,125 --> 00:41:29,330 Ich angegebene INT. 896 00:41:29,330 --> 00:41:32,000 Ich angegebenen Benutzernamen mit maximal 32 Zeichen. 897 00:41:32,000 --> 00:41:36,140 Aber wenn wir immer in dieser Scrollen ziemlich breites Fenster, gibt es eine Ankündigung 898 00:41:36,140 --> 00:41:38,260 Haufen anderer Dinge, die ich angeben können. 899 00:41:38,260 --> 00:41:40,950 >> Man, ich kann Attribute angeben wie Sie wissen, was diese 900 00:41:40,950 --> 00:41:42,190 INT UNSIGNED sein sollte. 901 00:41:42,190 --> 00:41:45,510 Ich will nicht, negative Zahlen, so machen wir es UNSIGNED. 902 00:41:45,510 --> 00:41:48,660 Null ist hier nicht relevant, da Ich möchte es jedem Benutzer, 903 00:41:48,660 --> 00:41:49,640 haben eine eindeutige Nummer. 904 00:41:49,640 --> 00:41:50,830 Ich weiß nicht, dass es null sein. 905 00:41:50,830 --> 00:41:52,330 >> Aber dies ist interessant. 906 00:41:52,330 --> 00:41:57,780 Ich kann angeben, dass ID ist entweder die Primärschlüssel der Datenbank, oder es ist 907 00:41:57,780 --> 00:42:00,620 einzigartig, oder es ist indiziert oder Volltext. 908 00:42:00,620 --> 00:42:05,630 Also für die heutigen Zwecke, lange Geschichte Kurz gesagt, bedeutet, dass diese PRIMARY wird 909 00:42:05,630 --> 00:42:10,570 sein, sowohl konzeptionell als auch technisch das Feld, das wir verwenden, um eindeutig 910 00:42:10,570 --> 00:42:12,140 Benutzer identifizieren. 911 00:42:12,140 --> 00:42:16,140 >> Also, wenn wir schauen Nutzer, ist diese Art ein Versprechen, um sie vor allem von nachschlagen 912 00:42:16,140 --> 00:42:17,370 dass eindeutige Kennung. 913 00:42:17,370 --> 00:42:21,930 Und die Datenbank wird sichergestellt, dass, wenn Sie eine Benutzernummer 3, kann man nicht 914 00:42:21,930 --> 00:42:25,400 physisch anderen Benutzer einfügen mit der gleichen Zahl 3 ist. 915 00:42:25,400 --> 00:42:28,380 Die Datenbank wird nur verweigern , um Ihre Änderungen zu speichern. 916 00:42:28,380 --> 00:42:32,310 Welches ist eine gute Sache, da kann man schützen Sie sich vor sich. Selbst 917 00:42:32,310 --> 00:42:34,270 >> Alternativ kann für Benutzernamen ein. 918 00:42:34,270 --> 00:42:37,670 Also die zweite Zeile, Rückruf, ist das Feld Benutzername. 919 00:42:37,670 --> 00:42:41,860 Also die zweite Reihe ist hier Benutzername, wie wir es auf der anderen dort gelassen. 920 00:42:41,860 --> 00:42:43,940 >> Also, was sonst noch möchte ich angeben? 921 00:42:43,940 --> 00:42:47,840 Ich darf nicht nach SQL, zu zwei Primärschlüssel angeben. 922 00:42:47,840 --> 00:42:50,750 Sie können einen gemeinsamen Schlüssel in dem Sie festlegen Blick auf die beiden Felder, aber sie können nicht 923 00:42:50,750 --> 00:42:52,260 Primärschlüssel individuell sein. 924 00:42:52,260 --> 00:42:54,750 Also das ist nicht die Rede. 925 00:42:54,750 --> 00:42:56,040 Also, was kann ich wählen? 926 00:42:56,040 --> 00:42:59,710 >> Nun, das ist UNIQUE im Geiste ein Primärschlüssel angeben, wo Sie diese 927 00:42:59,710 --> 00:43:03,570 Feld muss eindeutig sein, aber es ist nicht dabei, das sein 928 00:43:03,570 --> 00:43:04,410 Ich verwende die ganze Zeit. 929 00:43:04,410 --> 00:43:08,450 Und wir gehen nicht, dieses zu verwenden alle die Zeit, aus welchem ​​Grund wieder? 930 00:43:08,450 --> 00:43:10,490 Es ist möglicherweise langsamer, wenn es ist eine lange Benutzernamen ein. 931 00:43:10,490 --> 00:43:11,740 Es ist nur eine Verschwendung von Zeit. 932 00:43:11,740 --> 00:43:16,140 >> INDEX dessen gibt an, dass es nicht eindeutig sein, aber ich würde gerne 933 00:43:16,140 --> 00:43:19,470 Sie Ihre Magie unter dem Arbeits Haube, um es schneller für mich zu machen 934 00:43:19,470 --> 00:43:21,420 Suche auf diesem Gebiet. 935 00:43:21,420 --> 00:43:23,320 Also das ist wahrscheinlich nicht relevant. 936 00:43:23,320 --> 00:43:26,500 Für Benutzernamen, würde ich argumentieren, dass UNIQUE ist eine gute Antwort. 937 00:43:26,500 --> 00:43:31,200 Aber nehmen wir an, dass wir die Nutzer, die mehr interessanter als nur Benutzernamen, 938 00:43:31,200 --> 00:43:32,430 Hashes und ID-Nummern. 939 00:43:32,430 --> 00:43:33,860 Was, wenn wir Menschen voller Namen gab? 940 00:43:33,860 --> 00:43:37,700 Was ist, wenn wir ihnen Adressen und andere Daten über sie? 941 00:43:37,700 --> 00:43:43,360 >> Nun, wenn Sie angeben, dass eine Spalte in eine Datenbank indiziert ist, bedeutet das, dass 942 00:43:43,360 --> 00:43:47,730 MySQL oder Oracle, oder was auch immer-Datenbank Sie sind, sollten ihre Magie zu arbeiten 943 00:43:47,730 --> 00:43:51,300 und eine Art von Phantasie-Daten Struktur wie ein Baum oder ein Trie oder eine 944 00:43:51,300 --> 00:43:55,940 Hash-Tabelle, oder etwas zu garantieren, dass, wenn Sie für die Datensuche mit 945 00:43:55,940 --> 00:43:58,150 Wählen Sie auf diesem speziellen Gebiet - 946 00:43:58,150 --> 00:44:01,310 zeigen mir, wie jeder, dass lebt auf der Oxford Street. 947 00:44:01,310 --> 00:44:02,540 Eine Abfrage so. 948 00:44:02,540 --> 00:44:06,250 Wenn Sie im Voraus festgelegt haben, dass Sie einen Index auf diesem Feld will die 949 00:44:06,250 --> 00:44:09,050 Recherchen werden viel, viel schneller sein. 950 00:44:09,050 --> 00:44:12,090 >> Wenn Sie einen Index, der beste nicht angeben Sie tun können, ist eine lineare Suche, wenn 951 00:44:12,090 --> 00:44:13,030 es ist nicht sortiert. 952 00:44:13,030 --> 00:44:16,220 Aber wenn Sie INDEX, die Smart angeben Menschen, die die Datenbank vorgenommen - 953 00:44:16,220 --> 00:44:19,340 Menschen wie Sie, die wissen jetzt, Bäume und Versuchen und Hash-Tabellen - 954 00:44:19,340 --> 00:44:23,220 wird eine solche Daten automatisch erstellen Struktur im RAM, um sicherzustellen, dass 955 00:44:23,220 --> 00:44:26,050 diese Recherchen sind viel schneller. 956 00:44:26,050 --> 00:44:29,660 >> FULLTEXT inzwischen ist im Geiste, aber können Sie tun, Wildcard 957 00:44:29,660 --> 00:44:35,480 sucht, wie mir zeigen, dass jeder lebt in Straßen, die mit dem Beginn 958 00:44:35,480 --> 00:44:36,960 Buchstabe O aus welchem ​​Grund. 959 00:44:36,960 --> 00:44:38,850 Sie können Platzhaltersuche zu tun so. 960 00:44:38,850 --> 00:44:45,880 Oder, überzeugende Dinge wie Show mir alle, die das Wort hat - 961 00:44:45,880 --> 00:44:49,400 zeigen mir, jeder, dessen Name beginnt mit einem bestimmten Buchstaben. 962 00:44:49,400 --> 00:44:51,880 Sie können nach Schlüsselwörtern suchen in dieser Weise. 963 00:44:51,880 --> 00:44:52,630 In Ordnung. 964 00:44:52,630 --> 00:44:55,760 >> Also, Gestaltungsmöglichkeiten es möglicherweise. 965 00:44:55,760 --> 00:44:57,740 Es gibt andere, dass ich Wellen meine Hände an. 966 00:44:57,740 --> 00:45:00,530 Es stellt sich heraus, dass man haben kann verschiedene Speicher-Engines. 967 00:45:00,530 --> 00:45:04,390 Und das ist mehr, als wir brauchen geheimnis sicherlich für Problem stellte sieben. 968 00:45:04,390 --> 00:45:06,920 Standardmäßig werden euch mit so etwas wie InnoDB. 969 00:45:06,920 --> 00:45:10,910 Du wirst sehen, Erwähnung dieses irgendwo in phpMyAdmin-Schnittstelle am wahrscheinlichsten. 970 00:45:10,910 --> 00:45:14,130 Aber wissen, dass es andere Design Entscheidungen, die von potentiellen sind 971 00:45:14,130 --> 00:45:18,030 Interesse kommen, wenn Abschlussarbeiten Sie etwas webbasierte tun. 972 00:45:18,030 --> 00:45:19,330 >> Aber lassen Sie uns dies tun. 973 00:45:19,330 --> 00:45:23,130 Lassen Sie uns gehen Sie vor und setzen Sie dieses auf die Bildschirm als Teaser für eine Geschichte 974 00:45:23,130 --> 00:45:26,330 mit du, ein Mitbewohner, und ein Glas Milch. 975 00:45:26,330 --> 00:45:28,240 Werfen wir einen 2 Minuten oder so brechen hier. 976 00:45:28,240 --> 00:45:31,060 Und wenn Sie dableiben können, lassen Sie uns kommen zurück, sich ein bisschen mehr an SQL und 977 00:45:31,060 --> 00:45:35,160 dann ein wenig mit JavaScript p-Set acht im Auge. 978 00:45:35,160 --> 00:45:36,120 >> In Ordnung. 979 00:45:36,120 --> 00:45:40,420 Also, lassen Sie zum Nachdenken über eine Ecke Fall, die sehr leicht entstehen können, 980 00:45:40,420 --> 00:45:44,240 im Zusammenhang mit der Verwendung einer Datenbank oder ehrlich gesagt, auch nicht mit der realen Welt Dinge 981 00:45:44,240 --> 00:45:46,280 wie Geldautomaten, um Geld zu bekommen. 982 00:45:46,280 --> 00:45:47,640 Also hier ist ein Kühlschrank. 983 00:45:47,640 --> 00:45:50,040 Angenommen, Sie haben in einem zu Ihr Wohnheim oder Ihrem Haus. 984 00:45:50,040 --> 00:45:54,990 Und Sie eine Mitbewohnerin, und beide haben Sie wirklich, wie zum Beispiel Milch. 985 00:45:54,990 --> 00:45:57,210 >> So können Sie zu Hause von der Klasse eines Tages kommen. 986 00:45:57,210 --> 00:45:58,490 Er oder sie ist noch nicht zurück. 987 00:45:58,490 --> 00:45:59,180 Sie öffnen den Kühlschrank. 988 00:45:59,180 --> 00:46:00,870 Sie wollen wirklich ein großes Glas Milch. 989 00:46:00,870 --> 00:46:01,820 Es gibt keine Milch. 990 00:46:01,820 --> 00:46:02,920 Also, was tun Sie? 991 00:46:02,920 --> 00:46:03,840 Sie schließen den Kühlschrank. 992 00:46:03,840 --> 00:46:04,670 Sie packen Ihre Schlüssel. 993 00:46:04,670 --> 00:46:05,930 Sie gehen auf den Platz. 994 00:46:05,930 --> 00:46:09,240 Und Sie in Einklang zu bekommen bei CVS an diejenigen, Self-Checkout-Dinge, die immer 995 00:46:09,240 --> 00:46:11,180 länger als eigentlich mit Kassierer. 996 00:46:11,180 --> 00:46:11,820 Wie auch immer. 997 00:46:11,820 --> 00:46:15,490 >> Also, mittlerweile, Punkt Punkt Punkt, Ihre Mitbewohner nach Hause kommt, und er oder sie 998 00:46:15,490 --> 00:46:17,440 ähnlich hat ein Verlangen um etwas Milch. 999 00:46:17,440 --> 00:46:20,380 So er oder sie öffnet den Kühlschrank, schaut nach innen, und oh, verdammt. 1000 00:46:20,380 --> 00:46:21,160 Keine Milch. 1001 00:46:21,160 --> 00:46:24,750 So er oder sie geht heraus, passiert zu gehen zum anderen CVS, die nur ein 1002 00:46:24,750 --> 00:46:27,900 blockieren weg aus irgendeinem Grund, und er oder sie in Einklang bekommt, um Milch zu kaufen. 1003 00:46:27,900 --> 00:46:30,480 >> Inzwischen, nach Hause kommen Sie, er oder sie kommt nach Hause, und was zu tun 1004 00:46:30,480 --> 00:46:31,980 Sie letztendlich haben? 1005 00:46:31,980 --> 00:46:33,080 Doppelt so viel Milch. 1006 00:46:33,080 --> 00:46:34,620 Aber Sie wissen nicht wirklich wie Milch so viel. 1007 00:46:34,620 --> 00:46:37,300 So, jetzt so viel Milch, dass jetzt haben Sie einer von ihnen ist gerade dabei, sauer 1008 00:46:37,300 --> 00:46:37,820 schließlich. 1009 00:46:37,820 --> 00:46:39,370 Also das ist eine wirklich schlechte Problem. 1010 00:46:39,370 --> 00:46:39,900 Right? 1011 00:46:39,900 --> 00:46:41,990 >> Also, was ist passiert? 1012 00:46:41,990 --> 00:46:44,810 Also grundlegend ist diese Art eines lächerlichen Beispiel. 1013 00:46:44,810 --> 00:46:48,580 Aber unter der Haube, was wir gehabt haben hier geschehen ist, beide von Ihnen geprüft 1014 00:46:48,580 --> 00:46:52,390 der Zustand einige Stück Speicher, der Kühlschrank. 1015 00:46:52,390 --> 00:46:54,420 Beide von Ihnen überprüft den Zustand einer Variablen. 1016 00:46:54,420 --> 00:46:57,360 Sie beide zog ein Fazit dass Sie dann handelte. 1017 00:46:57,360 --> 00:47:01,420 Aber leider, während Ihre Mitbewohner war im Laden, der Zustand, dass 1018 00:47:01,420 --> 00:47:05,670 Variable verändert, er oder sie kam zurück und will nun den Zustand zu ändern, aber 1019 00:47:05,670 --> 00:47:07,480 es ist schon geändert worden auf ihn oder sie. 1020 00:47:07,480 --> 00:47:11,120 Und natürlich, er oder sie nicht hätten gegangen, um den Laden, wenn sie wüssten 1021 00:47:11,120 --> 00:47:13,010 Sie waren bereits auf dem Weg. 1022 00:47:13,010 --> 00:47:16,430 >> So in der realen Welt, wie konntest du dieses Problem zu vermeiden, vorausgesetzt, Sie haben 1023 00:47:16,430 --> 00:47:18,940 Kühlschrank, müssen Sie einen Mitbewohner, und Sie eigentlich gern Milch? 1024 00:47:18,940 --> 00:47:19,760 >> ZIELGRUPPE: Kommunikation. 1025 00:47:19,760 --> 00:47:20,580 >> DAVID MALAN: Kommunikation. 1026 00:47:20,580 --> 00:47:21,160 OK. 1027 00:47:21,160 --> 00:47:22,500 Aber wie können Sie kommunizieren? 1028 00:47:22,500 --> 00:47:23,990 >> ZIELGRUPPE: Lassen Sie eine Notiz. 1029 00:47:23,990 --> 00:47:25,480 >> DAVID MALAN: Lassen Sie eine Notiz, oder? 1030 00:47:25,480 --> 00:47:28,025 Lassen Sie immer eine Notiz für Fans der Serie. 1031 00:47:28,025 --> 00:47:31,580 Alles klar, so dass immer eine Nachricht hinterlassen, oder setzen wirklich wie ein Vorhängeschloss oder etwas 1032 00:47:31,580 --> 00:47:35,440 auf dem Kühlschrank, die Ihren hält Mitbewohner von der Überprüfung des Zustands der 1033 00:47:35,440 --> 00:47:36,540 dass variable. 1034 00:47:36,540 --> 00:47:40,800 >> Nun, warum könnte dies Germane zu sein Problem stellte sieben oder Geldautomaten. 1035 00:47:40,800 --> 00:47:46,780 Nun, stellen Sie sich eine Welt, in einem Geldautomaten, wo Sie könnten gehen bis zu einem Geldautomaten sein 1036 00:47:46,780 --> 00:47:48,920 Maschine hier, und ein anderer ATM hier. 1037 00:47:48,920 --> 00:47:50,680 Und das passiert ziemlich oft. 1038 00:47:50,680 --> 00:47:54,150 Und wenn Sie zwei ATM-Karten hatten, Das ist möglich, zu erhalten. 1039 00:47:54,150 --> 00:47:57,420 Und Sie in beiden Maschinen einloggen gleichzeitig wirksam, hoffentlich 1040 00:47:57,420 --> 00:47:58,660 während niemand hinsieht. 1041 00:47:58,660 --> 00:48:01,260 Und dann haben Sie Ihre PIN eingeben etwa gleichzeitig. 1042 00:48:01,260 --> 00:48:06,280 Und dann haben Sie eine Balance Abfrage zu tun um zu sehen, wie viel Geld Sie haben. 1043 00:48:06,280 --> 00:48:08,920 Und lassen Sie uns sagen, Sie haben $ 100 in Ihrem Konto übrig. 1044 00:48:08,920 --> 00:48:13,310 So im Wesentlichen gleichzeitig, Sie sagen, eins, null, null, geben. 1045 00:48:13,310 --> 00:48:16,000 Und Sie hoffentlich wieder etwas Geld. 1046 00:48:16,000 --> 00:48:18,440 >> Aber wie viel Geld könnte man zurück? 1047 00:48:18,440 --> 00:48:21,710 Jetzt Computer am Ende des Tages, vor allem, wenn sie auf ein Gespräch 1048 00:48:21,710 --> 00:48:27,360 Server, nicht unbedingt Dinge zu tun in der Reihenfolge, ist zu erwarten. 1049 00:48:27,360 --> 00:48:30,860 >> Also nehme, was passiert, weil der unabhängig von der Netzwerkgeschwindigkeit Probleme gibt 1050 00:48:30,860 --> 00:48:34,530 sind, oder CPU Fragen da sind, oder so etwas, nehme an, dass die 1051 00:48:34,530 --> 00:48:38,530 ersten ATM prüft Ihre Balance und sieht, oh, hat diese Person 100 Dollar. 1052 00:48:38,530 --> 00:48:41,840 Aber dann abgelenkt wird, weil vielleicht ein Backup geschieht, und so ist es 1053 00:48:41,840 --> 00:48:42,500 Verlangsamung. 1054 00:48:42,500 --> 00:48:45,080 Oder vielleicht während der Überprüfung, die Netzwerk Verbindung ein wenig langsamer, da bekam 1055 00:48:45,080 --> 00:48:45,910 dies passiert einfach. 1056 00:48:45,910 --> 00:48:47,100 Sie sind physische Geräte. 1057 00:48:47,100 --> 00:48:49,330 So Währenddessen wird die zweite ATM- die gleiche Frage. 1058 00:48:49,330 --> 00:48:53,030 Wie viel Geld haben David? 100 $ ist die Antwort. 1059 00:48:53,030 --> 00:48:58,930 Aber da die erste ATM noch nicht schickte die Nachricht subtrahieren $ 100, beide 1060 00:48:58,930 --> 00:49:03,000 Geldautomaten sind Gewölbe der Bank geprüft, sehen gibt es 100 $ gibt, und jetzt 1061 00:49:03,000 --> 00:49:07,160 beide Maschinen sind potenziell werde ausspucken eine Antwort. 1062 00:49:07,160 --> 00:49:12,240 >> Nun, dies ist ideal für Sie, in einem gewissen Sinne wenn das, was die Bank tut, letztlich 1063 00:49:12,240 --> 00:49:17,200 wird, ändern Sie den Betrag auf minus 100 durch Setzen der Variable gleich Ihre 1064 00:49:17,200 --> 00:49:21,570 Bankkonto gleich 0 ist, im Gegensatz zu tun, minus 100. 1065 00:49:21,570 --> 00:49:24,410 Jetzt im schlimmsten Fall für die Bank - 1066 00:49:24,410 --> 00:49:27,470 oder im besten für die Bank, inzwischen sie geben Ihnen $ 200, und 1067 00:49:27,470 --> 00:49:31,690 Ihr Bankkonto zeigt nun negativ $ 100, das ist wirklich nicht 1068 00:49:31,690 --> 00:49:32,950 Sie profitieren überhaupt. 1069 00:49:32,950 --> 00:49:36,500 Aber der Punkt ist, dass dieses Rennen Bedingung für zwei Mitbewohner bekommen 1070 00:49:36,500 --> 00:49:40,660 Milch, oder für zwei Geldautomaten versucht, Bargeld zu bekommen und ändern Sie den Zustand der Gewölbe 1071 00:49:40,660 --> 00:49:44,510 gleichzeitig besteht irgendeine Mal, wenn Sie eine Datenbank haben. 1072 00:49:44,510 --> 00:49:48,290 >> Jetzt in Problem stellte sieben, dieses Problem zu entsteht in dem Sinne, dass, wenn Sie einen kaufen 1073 00:49:48,290 --> 00:49:52,110 Aktien von Facebook-Lager, und dann B. Sie einen zweiten Anteil kaufen 1074 00:49:52,110 --> 00:49:55,160 Face Lager, müssen Sie sicherstellen, eine Entscheidung, den Programmierer. 1075 00:49:55,160 --> 00:49:58,710 Um zu entscheiden, wie ein Update der Datenbank, Chancen sind Sie gehen zu 1076 00:49:58,710 --> 00:50:02,250 haben eine Zeile für diesen Bestand, und das ist eine Möglichkeit, sie umzusetzen. 1077 00:50:02,250 --> 00:50:06,640 Und Sie gehen zu einem Anteil von gerade FB, die ihre Aktien Ticker-Symbol ist 1078 00:50:06,640 --> 00:50:10,120 für dieses Benutzernamen oder dieses Benutzers ID, die eindeutige Kennung. 1079 00:50:10,120 --> 00:50:12,340 >> Aber die gleiche Geschichte kann hier passieren. 1080 00:50:12,340 --> 00:50:15,800 Wenn Sie eine SELECT in SQL zu tun, wie Sie sehen werden Problem in sieben gesetzt, wenn Sie sehen, 1081 00:50:15,800 --> 00:50:18,460 oh, hat David 1 Aktie von Facebook-Aktien. 1082 00:50:18,460 --> 00:50:23,240 Lassen Sie mich dies ändern, um zwei Aktien erfolgen, weil er kaufen will ein 1083 00:50:23,240 --> 00:50:24,120 zweite Aktie. 1084 00:50:24,120 --> 00:50:27,860 Aber angenommen, David hatte tatsächlich zwei Browser-Fenster zu öffnen, oder annehmen, dass 1085 00:50:27,860 --> 00:50:32,150 es ist ein Gemeinschaftskonto mit zwei Ehepartner, und beide von ihnen auszuführen versucht 1086 00:50:32,150 --> 00:50:36,770 die gleiche Operation, auch dort die Potenzial für eine Entscheidung zu sein existiert 1087 00:50:36,770 --> 00:50:39,670 basierend auf der vorherigen hergestellt Zustand der Welt - 1088 00:50:39,670 --> 00:50:41,290 das Konto one share - 1089 00:50:41,290 --> 00:50:45,630 und beide Personen, oder beide Server, jetzt versuchen zu sagen, es erhöhen, um zwei Aktien. 1090 00:50:45,630 --> 00:50:49,020 Aber in diesem Fall können Sie geladen haben mir Geld für beide Aktien, aber 1091 00:50:49,020 --> 00:50:50,830 erhöht, genau das zu einer Zeit. 1092 00:50:50,830 --> 00:50:54,730 >> Also kurz gesagt, das grundlegende Problem hier, wie mit dem Witz über ein Verlassen 1093 00:50:54,730 --> 00:50:58,750 beachten, oder indem ein Vorhängeschloss auf sie ist wenn zwei Menschen oder zwei Threads - 1094 00:50:58,750 --> 00:50:59,930 denken Sie zurück zu kratzen - 1095 00:50:59,930 --> 00:51:03,220 den Zustand einer Variablen zu inspizieren und dann versuchen, diese Variable ändern, 1096 00:51:03,220 --> 00:51:07,950 aber diese beiden Dinge nicht passieren, bei der Gleichzeitig aber unterbrochen bekommen können 1097 00:51:07,950 --> 00:51:11,500 durch andere Dinge passiert, können Daten bekommen in einem sehr seltsamen Zustand. 1098 00:51:11,500 --> 00:51:15,450 Und Sie profitieren können, oder Sie leiden im Sinne des Geld Beispiel. 1099 00:51:15,450 --> 00:51:18,110 >> So in Problem stellte sieben, geben wir Ihnen Diese eine Zeile Code, die lange 1100 00:51:18,110 --> 00:51:21,000 Geschichte kurz, löst dieses Problem in MySQL. 1101 00:51:21,000 --> 00:51:24,950 Diese sehr lange Anweisung, die nicht funktioniert sogar auf eine Linie auf die passen 1102 00:51:24,950 --> 00:51:30,370 Bildschirm hier sicher, dass Ihre Betriebs ist, was Atom genannt. 1103 00:51:30,370 --> 00:51:33,720 Es geschieht alles auf einmal, oder es überhaupt nicht passieren. 1104 00:51:33,720 --> 00:51:37,530 Diese sehr langen Satz kann nicht teilweise unterbrochen zu werden. 1105 00:51:37,530 --> 00:51:39,840 >> Und was sie tut, ist buchstäblich was es sagt. 1106 00:51:39,840 --> 00:51:44,200 Legen Sie in eine der folgenden Tabelle diese drei Felder bestimmte Werte, 1107 00:51:44,200 --> 00:51:47,280 sondern auf doppelten Schlüssel, nicht tun, einen Einsatz. 1108 00:51:47,280 --> 00:51:48,280 Haben ein Update. 1109 00:51:48,280 --> 00:51:52,450 Das ist also ähnlich wie bei der SELECT-und ein INSERT, um so in der gleichen Zeit zu sprechen. 1110 00:51:52,450 --> 00:51:55,150 Und was ist der Schlüssel, die wahrscheinlich wobei hier genannten? 1111 00:51:55,150 --> 00:51:58,300 1112 00:51:58,300 --> 00:52:01,380 >> Es stellt sich heraus, und Sie werden sehen, diese in Problem stellte sieben der spec, weil 1113 00:52:01,380 --> 00:52:06,040 wir haben dort ein eindeutiger Schlüssel sein, erklärte an diesem Tisch, so dass 1114 00:52:06,040 --> 00:52:08,480 Sie können nicht mehrere Zeilen für den gleichen Benutzer die 1115 00:52:08,480 --> 00:52:10,150 elbe Penny-Stock-Symbol - 1116 00:52:10,150 --> 00:52:13,780 in diesem Beispiel hier ist DVN.V eine dumme Penny Stock, die wir 1117 00:52:13,780 --> 00:52:14,980 finden Sie in der Spezifikation. 1118 00:52:14,980 --> 00:52:17,860 Denn wir haben es erklärt, einzigartig zu sein, bedeutet dies, dass, wenn Sie 1119 00:52:17,860 --> 00:52:23,580 versuchen, eine doppelte Zeile einzufügen, sind Sie stattdessen gehen, um es zu aktualisieren, ohne 1120 00:52:23,580 --> 00:52:27,020 jemand anderes eine Chance zu ändern der Zustand der Welt nicht. 1121 00:52:27,020 --> 00:52:29,400 Also kurz gesagt, sorgt diese Dinge sind atomar. 1122 00:52:29,400 --> 00:52:32,530 >> Generell aber, Datenbanken wie MySQL - 1123 00:52:32,530 --> 00:52:35,460 und Sie diese Funktion nicht brauchen, für p-set sieben, aber denken Sie daran, für 1124 00:52:35,460 --> 00:52:36,200 die Zukunft - 1125 00:52:36,200 --> 00:52:38,870 unterstützen, was werden Geschäfte bezeichnet, wo Sie sagen können 1126 00:52:38,870 --> 00:52:40,990 START TRANSACTION wörtlich. 1127 00:52:40,990 --> 00:52:43,270 Sie können dann ausführen zwei SQL-Anweisungen. 1128 00:52:43,270 --> 00:52:45,710 Und eine SQL-Anweisung, wie Sie sehen werden in p-set sieben, sieht ein wenig 1129 00:52:45,710 --> 00:52:46,750 so etwas. 1130 00:52:46,750 --> 00:52:48,820 Aktualisieren Sie eine Tabelle namens Konto. 1131 00:52:48,820 --> 00:52:52,550 Den Balance-Spalte gleich, was auch immer der Saldo derzeit Spalte 1132 00:52:52,550 --> 00:52:57,280 minus 1000, wo die Anzahl der Kontonummer, wie die Benutzer-ID, 1133 00:52:57,280 --> 00:53:00,830 gleich 2 ist, und aktualisieren Sie dann Konto Punkt Punkt Punkt. 1134 00:53:00,830 --> 00:53:04,350 >> So in juristischer Hinsicht, was haben diese beiden Fragen scheint in das Tun werden 1135 00:53:04,350 --> 00:53:05,840 realen Welt Sinn für Banking? 1136 00:53:05,840 --> 00:53:07,440 >> ZIELGRUPPE: Übertragen zu Einsparungen. 1137 00:53:07,440 --> 00:53:08,020 >> DAVID MALAN: Genau. 1138 00:53:08,020 --> 00:53:10,470 Die Übertragung der Mittel von einem Konto zum anderen. 1139 00:53:10,470 --> 00:53:14,400 Und das ist ein weiteres Beispiel, wo Sie diese beiden Dinge wirklich passieren soll 1140 00:53:14,400 --> 00:53:15,570 oder nicht passieren. 1141 00:53:15,570 --> 00:53:18,880 Sie wollen nicht, etwas zu bekommen in die Mitte von ihnen und möglicherweise versauen 1142 00:53:18,880 --> 00:53:22,220 die Mathematik oder mess up, wie viel Geld Sie haben, oder wie viel 1143 00:53:22,220 --> 00:53:23,170 Geld, das die Bank hat. 1144 00:53:23,170 --> 00:53:26,890 Also, was ist wirklich schön zu Transaktionen in MySQL ist das, und 1145 00:53:26,890 --> 00:53:30,160 Datenbanken allgemein ist, dass sie und intelligente Menschen, die implementiert haben 1146 00:53:30,160 --> 00:53:33,670 diese Funktionen herauszufinden, wie man sicher, dass diese beiden Dinge geschehen 1147 00:53:33,670 --> 00:53:35,120 oder nicht. 1148 00:53:35,120 --> 00:53:38,580 >> Und wenn Sie wirklich anstreben, machen eine Website, die von Menschen auf der verwendet wird, 1149 00:53:38,580 --> 00:53:41,490 Campus, die Menschen in der realen Welt zu tun etwas in der Start Sinne 1150 00:53:41,490 --> 00:53:43,300 Dies sind die Arten von Design-Entscheidungen, 1151 00:53:43,300 --> 00:53:45,020 werden immer so wichtig. 1152 00:53:45,020 --> 00:53:48,240 Ansonsten starten Sie Daten verlieren, verlieren Benutzer, oder im schlimmsten Fall als 1153 00:53:48,240 --> 00:53:51,800 wir hier gesehen habe, möglicherweise Geld verlieren. 1154 00:53:51,800 --> 00:53:56,180 Also noch einmal, mehr dazu in Problem eingestellt Sieben sowie vielleicht einige 1155 00:53:56,180 --> 00:53:57,530 Sie in der letzten Projekte. 1156 00:53:57,530 --> 00:54:01,870 >> Also lassen Sie uns das Bild hatten wir ändern vor einem Augenblick nur in eine weitere Möglichkeit. 1157 00:54:01,870 --> 00:54:04,070 Lassen Sie mich also tatsächlich sehen, wenn ich kann - 1158 00:54:04,070 --> 00:54:06,030 Nö, das ist weg. 1159 00:54:06,030 --> 00:54:06,690 Da ist es. 1160 00:54:06,690 --> 00:54:09,020 >> Also das ist, wo wir letztes Mal links. 1161 00:54:09,020 --> 00:54:12,390 Und es stellt sich heraus, wir werden werfen eine weitere Sache, in die Mischung hier - 1162 00:54:12,390 --> 00:54:14,510 eine Sprache namens JavaScript. 1163 00:54:14,510 --> 00:54:18,060 So JavaScript passt eigentlich in diesem Stück - 1164 00:54:18,060 --> 00:54:22,086 und ich wusste nicht recht sollten Sie genug Platz, so ist dies jetzt nicht maßstäblich. 1165 00:54:22,086 --> 00:54:23,900 OK, das ist wirklich erbärmlich. 1166 00:54:23,900 --> 00:54:27,075 OK, das ist also kein JavaScript. 1167 00:54:27,075 --> 00:54:27,340 Gut. 1168 00:54:27,340 --> 00:54:28,760 Ich bin wirklich tut es einen schlechten Dienst. 1169 00:54:28,760 --> 00:54:29,390 Gut. 1170 00:54:29,390 --> 00:54:34,790 >> So ist ein weiterer JavaScript-Programmierung Sprache und unsere letzte, wenn das hilft 1171 00:54:34,790 --> 00:54:37,770 zu versichern, dass es nicht viel mehr der Hydranten hier. 1172 00:54:37,770 --> 00:54:41,100 So ist auch ein JavaScript interpretiert Sprache, die bedeutet, dass Sie nicht zu tun 1173 00:54:41,100 --> 00:54:42,670 kompilieren Sie es in Nullen und Einsen. 1174 00:54:42,670 --> 00:54:43,690 Sie führen es einfach. 1175 00:54:43,690 --> 00:54:47,680 Aber was ist grundlegend anders mit JavaScript Regel ist, dass Sie 1176 00:54:47,680 --> 00:54:49,815 führen Sie es nicht auf Ihrem Web-Server. 1177 00:54:49,815 --> 00:54:52,570 Es ist nicht in der laufen bekommen Gerät an sich. 1178 00:54:52,570 --> 00:54:57,490 Vielmehr wird von einem Benutzer heruntergeladen wird über HTTP in ihren Browser - 1179 00:54:57,490 --> 00:55:00,260 Chrome, Safari, Internet Explorer, Firefox, was auch immer - 1180 00:55:00,260 --> 00:55:03,860 und es ist der Browser, der diese ausführt bestimmten Programmiersprache. 1181 00:55:03,860 --> 00:55:08,000 >> So klar zu sein, PHP war bisher ausgeführt, entweder in der Befehlszeile in 1182 00:55:08,000 --> 00:55:11,290 unsere Schwarz-Weiß-Fenster, auf einem Server wie das Gerät, einen Computer 1183 00:55:11,290 --> 00:55:14,490 mag das Gerät, oder es ist schon von einem Web-Server ausgeführt 1184 00:55:14,490 --> 00:55:15,860 auf einem Computer läuft. 1185 00:55:15,860 --> 00:55:20,490 Aber das Thema ist hier, dass PHP bisher ausgeführt wurde, Server-Seite, so dass 1186 00:55:20,490 --> 00:55:24,820 und der Benutzer den Browser des Benutzers sieht nie eine Zeile PHP-Code. 1187 00:55:24,820 --> 00:55:28,530 >> In der Tat, wenn Sie jemals einen Browser zu öffnen für Ihre Website oder eine andere, und Sie 1188 00:55:28,530 --> 00:55:32,400 tatsächlich sehen, PHP-Code in Ihrem Fenster, hat jemand oben geschraubt. 1189 00:55:32,400 --> 00:55:34,950 Weil es nicht sollen sein zu einem Browser direkt gesendet. 1190 00:55:34,950 --> 00:55:38,150 Es soll hingerichtet und gedreht werden in so etwas wie HTML. 1191 00:55:38,150 --> 00:55:40,120 >> Aber JavaScript ist im Wesentlichen das Gegenteil. 1192 00:55:40,120 --> 00:55:44,350 Es soll in der Regel innerhalb ausgeführt werden Browserfenster eines Benutzers. 1193 00:55:44,350 --> 00:55:46,840 Und welche Arten von Websites verwenden JavaScript dann in diesen Tagen? 1194 00:55:46,840 --> 00:55:49,640 1195 00:55:49,640 --> 00:55:52,180 >> Wie buchstäblich jedem beliebtesten Website. 1196 00:55:52,180 --> 00:55:55,430 Jede Website, die euch wahrscheinlich täglich benutzen, verwenden JavaScript für die 1197 00:55:55,430 --> 00:55:57,330 einfachste und auch der sexiest Funktionen. 1198 00:55:57,330 --> 00:55:59,800 >> So etwas wie Facebook Chat, wenn Sie dafür verwenden. 1199 00:55:59,800 --> 00:56:01,040 Wie funktioniert das eigentlich? 1200 00:56:01,040 --> 00:56:05,090 Nun, so weit, all das, was wir haben mit HTML gemacht und PHP nimmt an, dass 1201 00:56:05,090 --> 00:56:08,750 Sie ziehen eine URL, und Sie die Eingabetaste drücken, und Sie sehen, einige HTML-Inhalte. 1202 00:56:08,750 --> 00:56:11,970 Und Sie den Link, dass die Änderungen auf URL wechselt die Seite, und lädt 1203 00:56:11,970 --> 00:56:12,740 einige neue Inhalte. 1204 00:56:12,740 --> 00:56:16,340 Klicken Sie auf eine andere URL oder ein Formular, können Sie zu einer anderen Seite gewischt bekommen und 1205 00:56:16,340 --> 00:56:17,420 Sie sehen einige neue Inhalte. 1206 00:56:17,420 --> 00:56:22,710 >> Aber mit so etwas wie Facebook Chat, oder GChat oder Google Maps, nur selten 1207 00:56:22,710 --> 00:56:27,350 nicht die ganze Seite neu zu laden, so dass Sie vorübergehend ein weißer Bildschirm zu sehen und 1208 00:56:27,350 --> 00:56:28,470 dann neue Inhalte. 1209 00:56:28,470 --> 00:56:32,610 Vielmehr Webseiten sind heute dynamisch immer wieder aktualisiert und 1210 00:56:32,610 --> 00:56:35,570 wieder und wieder alle Art von hinter den Kulissen. 1211 00:56:35,570 --> 00:56:38,560 Und es stellt sich heraus, dass, wenn Sie zu gehen etwas wie Facebook oder GChat, 1212 00:56:38,560 --> 00:56:43,050 oder Gmail, und die Seite Aktuelles automatisch ohne Nachladen der 1213 00:56:43,050 --> 00:56:47,630 gesamten Bildschirm, was passiert ist, dass Ihr Browser hat irgendwie heimlich 1214 00:56:47,630 --> 00:56:49,410 zusätzliche HTTP-Anforderungen - 1215 00:56:49,410 --> 00:56:52,740 nicht für die gesamte Web-Seiten, aber nur für kleine Datenmengen, wie die 1216 00:56:52,740 --> 00:56:55,740 Instant Message, dass Ihr Freund gerade Sie gesendet oder den Status zu aktualisieren, dass 1217 00:56:55,740 --> 00:56:58,210 jemand gerade geschickt Sie, oder den Tweet dass jemand gerade geschickt. 1218 00:56:58,210 --> 00:57:02,120 Es ist nur so wenig Anträge auf Daten, und dann mit JavaScript 1219 00:57:02,120 --> 00:57:06,370 Programmiersprache, zu ändern, was die Web-Seite sieht aus wie ohne die 1220 00:57:06,370 --> 00:57:09,860 Server helfen, ohne dass der Server Erzeugen, dass HTML. 1221 00:57:09,860 --> 00:57:13,820 >> Also kurz gesagt, kann dann verwendet werden JavaScript nicht nur holen neue Daten aus 1222 00:57:13,820 --> 00:57:16,750 der Server ohne Nachladen eine ganze Seite oder ein Formular. 1223 00:57:16,750 --> 00:57:20,060 Es kann auch verwendet werden, um zu ändern die sogenannte DOM - 1224 00:57:20,060 --> 00:57:21,520 Document Object Model - 1225 00:57:21,520 --> 00:57:24,620 Das ist nur die Phantasie Weg für sagte der Baum des HTML 1226 00:57:24,620 --> 00:57:26,220 dass wir das letzte Mal gesehen Zeit. 1227 00:57:26,220 --> 00:57:31,640 >> So zu beruhigen, ist JavaScript syntaktisch so ähnlich C als gut. 1228 00:57:31,640 --> 00:57:32,820 Es gibt keine Hauptfunktion. 1229 00:57:32,820 --> 00:57:35,430 Sie müssen nur mit dem Schreiben beginnen Sie den Code und es wird ausgeführt, erhalten oder 1230 00:57:35,430 --> 00:57:36,900 mehr richtig interpretiert. 1231 00:57:36,900 --> 00:57:38,660 Bedingungen wird wie folgt aussehen. 1232 00:57:38,660 --> 00:57:41,230 Nicht anders als C oder PHP für diese Angelegenheit. 1233 00:57:41,230 --> 00:57:43,890 Boolesche Ausdrücke oder-ed zusammen wird wie folgt aussehen. 1234 00:57:43,890 --> 00:57:45,590 Anded zusammen wie folgt aussehen. 1235 00:57:45,590 --> 00:57:47,750 >> Schalter wird wie folgt aussehen. 1236 00:57:47,750 --> 00:57:49,440 For-Schleifen wird wie folgt aussehen. 1237 00:57:49,440 --> 00:57:51,060 While-Schleifen wird wie folgt aussehen. 1238 00:57:51,060 --> 00:57:53,316 Do while-Schleifen wie diese aussehen wird. 1239 00:57:53,316 --> 00:57:54,780 >> Das ist neu. 1240 00:57:54,780 --> 00:57:58,753 So JavaScript hat nicht eine foreach Konstrukt per se, sondern dieses Konstrukt 1241 00:57:58,753 --> 00:58:03,870 für variable i in Array und ich in diesem Fall wird ein Indexwert. 1242 00:58:03,870 --> 00:58:06,880 So ist es ein wenig anders aus, dass foreach, wenn neue Versionen 1243 00:58:06,880 --> 00:58:10,280 JavaScript kommen aus die ganze Zeit, so auch diese Sprache verfügt 1244 00:58:10,280 --> 00:58:10,880 weiterentwickelt werden. 1245 00:58:10,880 --> 00:58:16,920 >> Und so nebenbei, JavaScript in diesen Tagen Außerdem können auf einem Server wie verwendet werden 1246 00:58:16,920 --> 00:58:19,920 PHP mit einem Framework namens Node.js. 1247 00:58:19,920 --> 00:58:24,670 Einer der CS50 TF, Kevin, hat dazu geführt, eine Seminar über Node.js, die verfügbar ist auf 1248 00:58:24,670 --> 00:58:26,440 cs50.net/seminars. 1249 00:58:26,440 --> 00:58:28,830 Also, wenn Sie neugierig sind, wissen, dass Sie kann dies auf der Server-Seite verwenden, wie 1250 00:58:28,830 --> 00:58:33,870 gut, aber das ist ein ziemlich neuer Trend, sondern ein mächtiges dazu. 1251 00:58:33,870 --> 00:58:35,270 >> Dies ist ein wenig anders. 1252 00:58:35,270 --> 00:58:37,910 Dies ist ein Array in JavaScript. 1253 00:58:37,910 --> 00:58:40,115 Und was fällt Ihnen als unterschiedliche im Vergleich zu C oder PHP? 1254 00:58:40,115 --> 00:58:43,890 1255 00:58:43,890 --> 00:58:47,420 Es gibt ein paar schnelle Geschichten können wir hier erzählen. 1256 00:58:47,420 --> 00:58:49,367 Was ist im Vergleich zu PHP fehlt? 1257 00:58:49,367 --> 00:58:51,652 >> ZUSCHAUER: [unverständlich]. 1258 00:58:51,652 --> 00:58:52,110 >> DAVID MALAN: Ja? 1259 00:58:52,110 --> 00:58:53,322 Sorry, noch einmal sagen? 1260 00:58:53,322 --> 00:58:54,740 >> ZUSCHAUER: Nicht erklärte den Typ der Variablen. 1261 00:58:54,740 --> 00:58:56,390 >> DAVID MALAN: Wir sind nicht erklärt den Typ der Variablen. 1262 00:58:56,390 --> 00:58:59,630 Also eigentlich ganz wie PHP, sind wir nicht Angabe der Typen dieser Variablen. 1263 00:58:59,630 --> 00:59:02,670 Vielmehr sind wir mehr generisch sagen var für variable. 1264 00:59:02,670 --> 00:59:06,690 Wir haben noch keine PHP Ärgernis der Dollar-Zeichen, die zwar mühsam, 1265 00:59:06,690 --> 00:59:09,160 Typ, nicht mehr machen klar, dass etwas ist eine Variable. 1266 00:59:09,160 --> 00:59:11,830 Während hier, wir sind irgendwie zurück zu C-Ansatz nur durch Aufruf einer 1267 00:59:11,830 --> 00:59:14,500 Variable mit dem Namen wollen wir zu geben, wie Zahlen. 1268 00:59:14,500 --> 00:59:17,170 Und auch wie PHP, haben wir eckigen Klammern für die 1269 00:59:17,170 --> 00:59:19,170 Werte in diesem Array. 1270 00:59:19,170 --> 00:59:22,490 >> So Variablen in JavaScript auch könnte wie folgt aussehen. 1271 00:59:22,490 --> 00:59:26,900 Beachten Sie hier das ist ein String genannt s, aber ähnlich wir nicht angegeben haben 1272 00:59:26,900 --> 00:59:28,750 dass es ein String. 1273 00:59:28,750 --> 00:59:33,160 Hier aber ist ein Feature, das nicht existiert in genau der gleichen Weise in PHP, 1274 00:59:33,160 --> 00:59:34,460 aber ein bisschen ähnlich. 1275 00:59:34,460 --> 00:59:36,530 Dies ist ein Objekt in JavaScript. 1276 00:59:36,530 --> 00:59:42,110 Und Objekte sind eine Art der Schweizer Armee Knife einer Datenstruktur, dass Sie 1277 00:59:42,110 --> 00:59:43,900 können sie für eine beliebige Anzahl von Dingen zu verwenden. 1278 00:59:43,900 --> 00:59:46,860 >> Hier zum Beispiel, wir erklären eine Variable namens zitieren. 1279 00:59:46,860 --> 00:59:49,110 Der Typ dieser Variablen ein Objekt ist. 1280 00:59:49,110 --> 00:59:53,550 Sie können dies als eine C-Struktur denken das hat Schlüssel und Werte. 1281 00:59:53,550 --> 00:59:55,250 Symbol ist ein Schlüssel. 1282 00:59:55,250 --> 00:59:57,350 FB ist ein Wert, offenbar a symbol. 1283 00:59:57,350 --> 00:59:57,930 Comma. 1284 00:59:57,930 --> 01:00:02,180 Der Preis ist ein weiterer Schlüssel, und sein Wert ist offenbar eine Gleitkomma oder ein 1285 01:00:02,180 --> 01:00:06,510 Anzahl allgemeiner in JavaScript von 49,26 $. 1286 01:00:06,510 --> 01:00:09,030 >> So PHP nicht - 1287 01:00:09,030 --> 01:00:12,980 haben wir nicht in PHP-Objekte gesehen recht wie diese, aber wir sahen ein analoges, 1288 01:00:12,980 --> 01:00:14,093 , das war was? 1289 01:00:14,093 --> 01:00:14,980 >> ZUSCHAUER: [unverständlich]. 1290 01:00:14,980 --> 01:00:16,110 >> DAVID MALAN: Assoziative Arrays. 1291 01:00:16,110 --> 01:00:19,990 Während also PHP hat assoziative Arrays deren Syntax jemals etwas so 1292 01:00:19,990 --> 01:00:20,370 anders - 1293 01:00:20,370 --> 01:00:21,780 sahen wir die eckigen Klammern. 1294 01:00:21,780 --> 01:00:23,860 Wir sahen die seltsamen Symbole Pfeile. 1295 01:00:23,860 --> 01:00:27,330 JavaScript hat Objekte, aber dies ist meist eine semantische Differenz und eine 1296 01:00:27,330 --> 01:00:29,260 verschiedenen Synonym für jetzt. 1297 01:00:29,260 --> 01:00:35,060 Doch als beiseite, PHP hat auch Objekte in einer Weise, dass Java und andere 1298 01:00:35,060 --> 01:00:37,810 Sprachen haben Objekte in objektorientierten Programmierung. 1299 01:00:37,810 --> 01:00:40,440 Aber wir nutzen diese nur für die Datentypen für jetzt. 1300 01:00:40,440 --> 01:00:42,170 Objekte und assoziative Arrays. 1301 01:00:42,170 --> 01:00:44,140 >> Dies könnte man es ein wenig klarer. 1302 01:00:44,140 --> 01:00:45,890 Hier ist, warum ein Objekt ist nützlich. 1303 01:00:45,890 --> 01:00:48,760 Wenn Sie einen Schüler erklären wollen, wie Zamyla, können wir tatsächlich 1304 01:00:48,760 --> 01:00:52,630 kapseln so nach innen davon sprechen Objekt mit geschweiften Klammern wie 1305 01:00:52,630 --> 01:00:55,060 vor einem ganzen Bündel von Schlüsseln und Werte in hier. 1306 01:00:55,060 --> 01:00:59,150 Wir haben eine ID, ein Haus und einen Namen für Zamyla, durch ein Semikolon wie folgt 1307 01:00:59,150 --> 01:01:00,690 üblich am Ende. 1308 01:01:00,690 --> 01:01:04,840 >> Hier unten ist auch dies leicht anders, aber auch sehr mächtig 1309 01:01:04,840 --> 01:01:05,690 in diesen Tagen. 1310 01:01:05,690 --> 01:01:08,780 Hier ist ein Array, und ich weiß, dass da es gibt eine eckige Klammer up 1311 01:01:08,780 --> 01:01:11,090 Top und eine eckige Klammer an der Unterseite. 1312 01:01:11,090 --> 01:01:16,050 Und dies ist eine Anordnung, welche Daten geben offenbar in JavaScript? 1313 01:01:16,050 --> 01:01:21,260 Dies ist ein Array von sieht wie drei Objekte. 1314 01:01:21,260 --> 01:01:24,580 Und ich weiß, dass es nur ein Objekt ist wegen der geschweiften Klammern. 1315 01:01:24,580 --> 01:01:28,760 Und feststellen, es ist offen geschweifte Klammer, einige Sachen, in der Nähe geschweifte Klammer, Komma, 1316 01:01:28,760 --> 01:01:31,180 dann etwas mehr, Komma, und dann einige mehr. 1317 01:01:31,180 --> 01:01:33,800 Also das ist drei Argumente durch zwei Kommas getrennt. 1318 01:01:33,800 --> 01:01:36,810 >> Also das ist ein Array von drei Objekten. 1319 01:01:36,810 --> 01:01:39,940 Und jedes dieser Objekte zu sein scheint ein Student oder Mitarbeiter der einige 1320 01:01:39,940 --> 01:01:42,370 Art, mit einer ID jeweils Haus und Name. 1321 01:01:42,370 --> 01:01:45,060 Aber ich habe diese so genannten JSON genannt - 1322 01:01:45,060 --> 01:01:47,450 JavaScript Object Notation. 1323 01:01:47,450 --> 01:01:52,060 Und das ist ein Datenformat, das eigentlich ist so sehr beliebt und in 1324 01:01:52,060 --> 01:01:55,100 Mode in diesen Tagen, dass wenn Sie ein Schreiben Anwendung, die die Facebook nutzt 1325 01:01:55,100 --> 01:01:59,150 API, die Twitter-API, wirklich fast jede API gibt in diesen Tagen, 1326 01:01:59,150 --> 01:02:02,820 darunter einige der CS50 eigenen, die Daten, die Sie erhalten, ist nicht in 1327 01:02:02,820 --> 01:02:04,720 alten Schule CSV-Format. 1328 01:02:04,720 --> 01:02:06,780 >> Da erinnere sich, dass CSV ist super einfach. 1329 01:02:06,780 --> 01:02:10,230 Es ist nur Säulen getrennt durch Komma. 1330 01:02:10,230 --> 01:02:13,190 JSON-Daten gibt Ihnen mehr Metadaten. 1331 01:02:13,190 --> 01:02:17,800 Es verbindet einen Schlüssel mit jedem Wert, so sie haben nicht nur davon ausgehen, dass 1332 01:02:17,800 --> 01:02:22,460 die nullte Spalte ist ein Wert, Spalte eine ist eine weitere, zweite Spalte ist eine andere. 1333 01:02:22,460 --> 01:02:26,790 Alles in einem JSON-Objekt hier ist eine Art von Selbst-Beschreibung, denn jeder 1334 01:02:26,790 --> 01:02:30,940 einer der Namen in dieser Datei hat buchstäblich davor Namen als 1335 01:02:30,940 --> 01:02:32,510 Anführungszeichen. 1336 01:02:32,510 --> 01:02:34,950 >> Werfen wir also einen Blick auf ein paar Beispiele. 1337 01:02:34,950 --> 01:02:36,800 Lassen Sie mich in das Gerät zu gehen. 1338 01:02:36,800 --> 01:02:41,000 Und lassen Sie mich in unsere vhost gehen Verzeichnis in der Öffentlichkeit. 1339 01:02:41,000 --> 01:02:45,590 Und lassen Sie mich in der go JavaScript-Verzeichnis. 1340 01:02:45,590 --> 01:02:49,610 Und lassen Sie uns fortfahren und eröffnen dom-0.html, wo DOM bedeutet nur, 1341 01:02:49,610 --> 01:02:51,010 Dokument-Objekt-Modell. 1342 01:02:51,010 --> 01:02:53,490 Es ist der Baum, zu dem Zeug Ich vorhin sprach. 1343 01:02:53,490 --> 01:02:54,950 >> Und lassen Sie mich folgendes vorschlagen. 1344 01:02:54,950 --> 01:02:57,720 Hier ist eine Web-Seite, deren Körper ist ziemlich einfach. 1345 01:02:57,720 --> 01:03:00,170 So, hier unten an der Unterseite, bemerken Ich habe ein Formular. 1346 01:03:00,170 --> 01:03:01,500 Wir haben die nie gesehen. 1347 01:03:01,500 --> 01:03:07,600 Es hat zwei Eingänge, von denen einer ein HAS ID der Name, von denen einer eine Art hat 1348 01:03:07,600 --> 01:03:09,830 vorlegen, und die erste ein Typ ist der Text. 1349 01:03:09,830 --> 01:03:11,900 Also das klingt eigentlich ziemlich einfach. 1350 01:03:11,900 --> 01:03:13,090 >> Lassen Sie uns hier. 1351 01:03:13,090 --> 01:03:15,390 Gehen wir zurück zu dieser Seite finden Sie hier. 1352 01:03:15,390 --> 01:03:21,030 Lassen Sie uns in localhost gehen, und gehen in JavaScript unserem Verzeichnis, und gehen Sie zu 1353 01:03:21,030 --> 01:03:24,640 dom-0, und hier haben wir dieses Formular. 1354 01:03:24,640 --> 01:03:26,550 Also das ist offensichtlich Alle auf dieser Seite tut. 1355 01:03:26,550 --> 01:03:28,740 Es hat ein Namensfeld mit eine Schaltfläche Senden. 1356 01:03:28,740 --> 01:03:30,340 Aber ich werde mich nicht hier, PHP zu verwenden. 1357 01:03:30,340 --> 01:03:34,310 Ich werde alles tun, Client-Seite so zu sprechen, in JavaScript wie folgt. 1358 01:03:34,310 --> 01:03:39,100 >> Beachten Sie, dass ich in der Tat den Namen gegeben Bereich dieses Eingangs eine einzigartige 1359 01:03:39,100 --> 01:03:42,350 Kennung, die wird tatsächlich rette mich einige Zeit in einem Augenblick. 1360 01:03:42,350 --> 01:03:45,480 Und feststellen, ich habe ein anderes Tag eingeführt im Kopf meiner Web-Seite, die 1361 01:03:45,480 --> 01:03:46,565  -Tag. 1362 01:03:46,565 --> 01:03:50,120 >> So ist es in diesem Sinne, dass JavaScript eine clientseitige Programmiersprache. 1363 01:03:50,120 --> 01:03:55,020 In diesem Fall, so wie CSS, habe ich es gerade innerhalb meiner HTML. 1364 01:03:55,020 --> 01:03:58,810 Beachten Sie aber, ich habe eine Funktion deklariert das sieht ein wenig wie PHP 1365 01:03:58,810 --> 01:04:01,530 syntaktisch, aber das ist eigentlich JavaScript ist es, weil wieder 1366 01:04:01,530 --> 01:04:03,920 Client-Seite in den Browser. 1367 01:04:03,920 --> 01:04:07,590 Und nehmen Sie eine Vermutung, was das wird tun, auch wenn einige der Syntax 1368 01:04:07,590 --> 01:04:09,338 hier ist neu. 1369 01:04:09,338 --> 01:04:11,760 >> ZIELGRUPPE: Hallo zu sagen, wer auch immer. 1370 01:04:11,760 --> 01:04:14,020 >> DAVID MALAN: Es wird um Hallo zu sagen wem auch immer besucht diese Seite. 1371 01:04:14,020 --> 01:04:15,120 Also, wie? 1372 01:04:15,120 --> 01:04:18,070 >> So bemerken, es stellt sich heraus in JavaScript gibt es ein alert ()-Funktion. 1373 01:04:18,070 --> 01:04:22,840 Das ist eine sehr traurige Art von Funktion, die wirklich nur dazu neigt, Benutzer zu ärgern. 1374 01:04:22,840 --> 01:04:25,440 Es ist nicht das Sie wirklich nutzen sollte in der Regel, aber es ist eine schnelle und schmutzige 1375 01:04:25,440 --> 01:04:27,710 Art der Art von Druck etwas auf einer grafischen Benutzer 1376 01:04:27,710 --> 01:04:29,180 Schnittstelle, wie ein Browser. 1377 01:04:29,180 --> 01:04:31,400 Beachten Sie hier, dass ich habe eine Zeichenfolge in einfache Anführungszeichen. 1378 01:04:31,400 --> 01:04:36,010 Es stellt sich heraus, dass im Gegensatz zu C, JavaScript tatsächlich haben Sie Single verwenden 1379 01:04:36,010 --> 01:04:38,730 zitiert, und ehrlich gesagt, es ist nur eine Art der stilistischen Konvention unter 1380 01:04:38,730 --> 01:04:41,180 JavaScript-Programmierer einfache Anführungszeichen zu benutzen. 1381 01:04:41,180 --> 01:04:43,750 PHP, die sie tatsächlich haben leicht andere Bedeutung. 1382 01:04:43,750 --> 01:04:45,810 Aber jetzt weiß nur, dass das ist der einzige Grund. 1383 01:04:45,810 --> 01:04:49,270 Die Konvention in JavaScript ist oft zu einfache Anführungszeichen, aber wir nutzen könnten 1384 01:04:49,270 --> 01:04:50,950 Anführungszeichen in beiden Orten. 1385 01:04:50,950 --> 01:04:52,610 >> Also das ist interessant. 1386 01:04:52,610 --> 01:04:56,430 Daran erinnern letzte Mal, dass wir hatten, dass Bild auf dem Bildschirm, die einen Baum zog 1387 01:04:56,430 --> 01:04:59,720 wo Sie hatte den Knoten HTML, und die Kopf-Knoten und die Körperknoten, 1388 01:04:59,720 --> 01:05:00,800 und dann einige Text. 1389 01:05:00,800 --> 01:05:04,700 Aber es gab einen speziellen Knoten an der ganz oben, dass ich das Dokument genannt. 1390 01:05:04,700 --> 01:05:08,260 Nun stellt sich heraus, in JavaScript, jede Mal, wenn Sie ein Programm in JavaScript zu schreiben 1391 01:05:08,260 --> 01:05:11,040 in einem Browser haben Sie Zugriff auf eine besondere globale Variable. 1392 01:05:11,040 --> 01:05:14,130 Im Geiste von PHP bei super dieser wird gerufen 1393 01:05:14,130 --> 01:05:16,050 Kleinbuchstaben-Dokument. 1394 01:05:16,050 --> 01:05:21,480 >> Es ist wie eine Struktur, aber diese Struktur hat auch Funktionen im Inneren. 1395 01:05:21,480 --> 01:05:23,790 So eine C-Struktur hat nur Daten in der Regel. 1396 01:05:23,790 --> 01:05:29,060 Aber ein JavaScript-Objekt, da dies technisch hat auch Funktionen, 1397 01:05:29,060 --> 01:05:31,830 anders als Methoden bekannt, darin. 1398 01:05:31,830 --> 01:05:35,750 Und Sie können eine Funktion innerhalb rufen diese Aufgabe ganz wörtlich tut sein 1399 01:05:35,750 --> 01:05:39,610 Name, Punkt, und dann den Namen des die Funktion, oder auch Methode. 1400 01:05:39,610 --> 01:05:41,160 Es ist nur ein Synonym, wirklich. 1401 01:05:41,160 --> 01:05:42,450 >> Und was bedeutet diese Funktion? 1402 01:05:42,450 --> 01:05:43,840 Sie können erraten Art aus seinem Namen. 1403 01:05:43,840 --> 01:05:45,590 Holen Element von ID. 1404 01:05:45,590 --> 01:05:50,040 Also, das wird die Web-Seite zu suchen, Suche den Baum, auf der Suche nach 1405 01:05:50,040 --> 01:05:55,210 was Knoten, AKA-Element hat ein eindeutige ID Zitat unquote Namen. 1406 01:05:55,210 --> 01:05:56,560 Und was soll ich tun? 1407 01:05:56,560 --> 01:06:00,350 Ich werde, um den Wert zu erhalten Innenseite dass der Knoten in dem Baum, und ich werde 1408 01:06:00,350 --> 01:06:02,580 irgendwie sagen hallo zu diesem Namen. 1409 01:06:02,580 --> 01:06:05,360 >> So nehmen Sie eine Vermutung, auch wenn wir nicht haben sehen dies noch nicht, was zu tun das Plus 1410 01:06:05,360 --> 01:06:07,396 Symbole bedeuten hier und hier wohl? 1411 01:06:07,396 --> 01:06:08,230 >> ZIELGRUPPE: verketten. 1412 01:06:08,230 --> 01:06:09,220 >> DAVID MALAN: verketten. 1413 01:06:09,220 --> 01:06:11,290 Richtig, und das sind nur Art von Design-Entscheidungen 1414 01:06:11,290 --> 01:06:12,280 Menschen gemacht vor Jahren. 1415 01:06:12,280 --> 01:06:15,190 In PHP, verketten Sie Dinge mit Punkten. 1416 01:06:15,190 --> 01:06:18,800 In C über mehrere Reifen springen, und Sie rufen Funktionen wie StrCopy () oder 1417 01:06:18,800 --> 01:06:20,600 strcat () oder andere solche Funktionen. 1418 01:06:20,600 --> 01:06:22,060 Aber in Javascript, verwenden Sie Pluspunkte. 1419 01:06:22,060 --> 01:06:24,770 Also das ist nur die Verkettung drei Saiten - 1420 01:06:24,770 --> 01:06:27,850 hallo, ein Name, und dann ein Ausrufezeichen. 1421 01:06:27,850 --> 01:06:30,390 >> Also, wann und warum ist diese Funktion wenn auch genannt? 1422 01:06:30,390 --> 01:06:33,150 Nun, nehmen Sie eine Vermutung von der HTML unten. 1423 01:06:33,150 --> 01:06:35,810 Warum ist zu begrüßen () aufgerufen wird, oder wann? 1424 01:06:35,810 --> 01:06:39,730 1425 01:06:39,730 --> 01:06:44,030 >> Offenbar, so gut ich kann sagen, auf vorlegen, wenn dieses Formular gesendet wird, 1426 01:06:44,030 --> 01:06:47,200 Ich werde alles tun, was innerhalb dieser Zitate. 1427 01:06:47,200 --> 01:06:50,900 Und gesagt, ich werde rufen grüßen () und dann wieder falsch. 1428 01:06:50,900 --> 01:06:53,090 >> Na ja, mal sehen, was die Netto- Effekt ist erstklassig. 1429 01:06:53,090 --> 01:06:58,290 Also lassen Sie mich gehen Sie vor und geben in, sagen wir, Loren, Senden. 1430 01:06:58,290 --> 01:06:59,440 Hallo Loren. 1431 01:06:59,440 --> 01:07:02,990 Mal sehen, ob vielleicht nur war dieser ein glücklicher Umsetzung. 1432 01:07:02,990 --> 01:07:03,200 Nope. 1433 01:07:03,200 --> 01:07:05,990 So ist es aus, was die Eingabe Namen habe ich eigentlich dort setzen. 1434 01:07:05,990 --> 01:07:07,970 >> Beachten Sie aber, was nicht zu ändern. 1435 01:07:07,970 --> 01:07:10,360 Die URL ist immer noch dom-0.html. 1436 01:07:10,360 --> 01:07:11,820 Es gibt keine register.php. 1437 01:07:11,820 --> 01:07:13,110 Es gibt keine zweite Datei. 1438 01:07:13,110 --> 01:07:14,930 Es gibt kein action-Attribut. 1439 01:07:14,930 --> 01:07:19,720 Was also ist das return false vermutlich tun? 1440 01:07:19,720 --> 01:07:23,660 Warum rufe ich grüßen () und dann false zurück wahrscheinlich? 1441 01:07:23,660 --> 01:07:26,420 Was geschieht in der Regel, wenn Sie auf Senden auf einem Formular, das auch wir haben 1442 01:07:26,420 --> 01:07:27,854 in der vergangenen Woche gesehen? 1443 01:07:27,854 --> 01:07:29,900 >> ZIELGRUPPE: [unverständlich]. 1444 01:07:29,900 --> 01:07:30,860 >> DAVID MALAN: Es geht irgendwo, oder? 1445 01:07:30,860 --> 01:07:32,720 Es geht bis zu einem gewissen Ziel-URL. 1446 01:07:32,720 --> 01:07:34,120 Aber ich glaube nicht, dass das hier passieren. 1447 01:07:34,120 --> 01:07:37,620 Ich möchte meine Web-Seite fertig sein dynamisch wie Google Mail, wo einst du bist 1448 01:07:37,620 --> 01:07:38,650 da, Sie dort zu bleiben. 1449 01:07:38,650 --> 01:07:42,900 Die URL nicht in einer Weise verändern, dass zeigt die ganze Seite neu geladen wird. 1450 01:07:42,900 --> 01:07:46,680 Vielmehr ich etwas ändern will nur wie Ausdruck etwas 1451 01:07:46,680 --> 01:07:48,320 hier auf dem Bildschirm. 1452 01:07:48,320 --> 01:07:49,630 >> Nun lassen Sie mich diese reinigen bis ein wenig. 1453 01:07:49,630 --> 01:07:55,370 Lassen Sie mich nicht öffnen dom-0, aber lassen Sie mich öffnen dom-2. 1454 01:07:55,370 --> 01:07:57,350 Nur so können Sie einige Syntax hier gesehen habe. 1455 01:07:57,350 --> 01:08:02,080 >> Es stellt sich heraus, dass das, was wir gerade haben wird mit rohen JavaScript. 1456 01:08:02,080 --> 01:08:04,420 Also das ist wirklich die Sprache JavaScript. 1457 01:08:04,420 --> 01:08:07,340 Einige von euch vielleicht wissen, von eine Bibliothek jQuery genannt. 1458 01:08:07,340 --> 01:08:09,980 >> So jQuery ist nicht das Gleiche etwas wie JavaScript. 1459 01:08:09,980 --> 01:08:14,110 Es ist nur eine Bibliothek, die eine wirklich intelligente Kerl schrieb und populär wie 1460 01:08:14,110 --> 01:08:18,100 dass fast jeder in der Welt jetzt jQuery verwendet, wenn mit Hilfe von JavaScript. 1461 01:08:18,100 --> 01:08:20,890 Und auf den ersten Blick, ehrlich gesagt, es sieht ein wenig kryptisch. 1462 01:08:20,890 --> 01:08:24,990 Aber du wirst finden, vor allem, wenn Sie gehen dort für das endgültige Projekt mit Web- 1463 01:08:24,990 --> 01:08:29,029 Entwicklung, werden Sie feststellen, dass diese reinigt die Dinge und spart Ihnen eine ganz 1464 01:08:29,029 --> 01:08:30,229 Codezeilen. 1465 01:08:30,229 --> 01:08:33,189 >> Also lasst uns einfach Blick auf, wie diese Form funktioniert. 1466 01:08:33,189 --> 01:08:35,664 Beachten Sie, was habe ich anscheinend zu entfernen von meinem HTML? 1467 01:08:35,664 --> 01:08:38,240 1468 01:08:38,240 --> 01:08:40,630 Es gibt keine auf einreichen Handler so zu sprechen. 1469 01:08:40,630 --> 01:08:41,470 Es gibt kein Attribut. 1470 01:08:41,470 --> 01:08:43,359 Weil Sie wissen, was Ich habe nicht wirklich? 1471 01:08:43,359 --> 01:08:45,640 Ich fühlte mich wie wir fielen in alte Gewohnheiten gibt. 1472 01:08:45,640 --> 01:08:49,340 So wie es begann zu fühlen, schlampig sowohl mit CSS vermischen 1473 01:08:49,340 --> 01:08:52,149 HTML, weil Sie Art des Werfens verschiedenen Sprachen auf der ganzen 1474 01:08:52,149 --> 01:08:56,180 Ort, ähnlich wie hat das angefangen zu fühlen wie eine schlechte Straße zu gehen, wo 1475 01:08:56,180 --> 01:09:01,069 Ich setze JavaScript-Code innerhalb meiner HTML anstatt Factoring es aus. 1476 01:09:01,069 --> 01:09:02,279 >> Also das ist die Lektion hier. 1477 01:09:02,279 --> 01:09:05,080 In dom-2.html, ich bin Factoring es aus. 1478 01:09:05,080 --> 01:09:07,399 Und ich werde die Dinge etwas zu tun anders. 1479 01:09:07,399 --> 01:09:09,630 Denn jetzt werde ich meine Hände winken an, was das wirklich tut 1480 01:09:09,630 --> 01:09:10,590 unter der Haube. 1481 01:09:10,590 --> 01:09:14,210 Aber für jetzt davon ausgehen, dass die ersten Code-Zeile in dieser Bibliothek 1482 01:09:14,210 --> 01:09:18,170 jQuery nur genannt, wenn die Dokument fertig ist, gehen Sie wie folgt. 1483 01:09:18,170 --> 01:09:20,080 >> Da Web-Seiten nehmen können einige Zeit zum Laden. 1484 01:09:20,080 --> 01:09:23,029 Sie könnten auf einem langsamen Internet sein Verbindung, und es könnte sein Spinnen 1485 01:09:23,029 --> 01:09:25,290 und Spinnen, und schließlich ist es geladen. 1486 01:09:25,290 --> 01:09:29,060 Das Code-Zeile sagt nur warten, bis die ganze Seite ist bereit, das Dokument 1487 01:09:29,060 --> 01:09:31,189 ist bereit, vor der Ausführung dieses Codes. 1488 01:09:31,189 --> 01:09:34,390 >> Und nun bemerken, ist dies wahrscheinlich das nützlichste ersten 1489 01:09:34,390 --> 01:09:36,189 weg von jQuery. 1490 01:09:36,189 --> 01:09:42,140 Diese Zeile hier ist sehr ähnlich im Geist auf diese Linie hier viel länger. 1491 01:09:42,140 --> 01:09:46,920 Während in rohen JavaScript-Code, gibt existiert ein Dokument, die globale Objekt 1492 01:09:46,920 --> 01:09:50,460 hat eine Funktion namens getElementById () die Leute, die geschrieben 1493 01:09:50,460 --> 01:09:55,720 jQuery vereinfacht, daß nur sagen, Dollar-Zeichen, und dann innerhalb von 1494 01:09:55,720 --> 01:10:00,250 Klammern gesetzt zwei Zitate, und dann legte eine Raute gefolgt von der 1495 01:10:00,250 --> 01:10:02,250 einzigartige ID, die Sie packen möchten. 1496 01:10:02,250 --> 01:10:06,170 So ist dies äquivalent document.getElementById. 1497 01:10:06,170 --> 01:10:11,090 >> Inzwischen. Einreichen bedeutet nur, auf Einreichung von welcher Form auch immer du bist 1498 01:10:11,090 --> 01:10:14,240 , die sich auf auf der linken Seite, gehen Sie vor und führen diese. 1499 01:10:14,240 --> 01:10:16,600 Aber das ist jetzt die Neugier zu. 1500 01:10:16,600 --> 01:10:19,560 Was ist komisch, was Ich habe hier hervorgehoben? 1501 01:10:19,560 --> 01:10:23,840 1502 01:10:23,840 --> 01:10:28,594 Es ist nicht nur Art von syntaktisch neu, es gibt auch etwas fehlt. 1503 01:10:28,594 --> 01:10:29,558 >> ZIELGRUPPE: Es ist gerade angerufen Funktion? 1504 01:10:29,558 --> 01:10:31,970 Es ist nicht Alarm gerufen? 1505 01:10:31,970 --> 01:10:32,440 >> DAVID MALAN: Ja. 1506 01:10:32,440 --> 01:10:35,450 Nun, so alert () ist nach unten hier, um fair zu sein. 1507 01:10:35,450 --> 01:10:39,520 Aber es gibt keine Erwähnung eines zu nennen, wie Sie wissen, foo oder 1508 01:10:39,520 --> 01:10:40,980 etwas hier oben. 1509 01:10:40,980 --> 01:10:43,830 Und in der Tat, ist eines der Merkmale dieser von JavaScript, die recht ist 1510 01:10:43,830 --> 01:10:45,370 mächtig, aber auch ganz neu. 1511 01:10:45,370 --> 01:10:47,460 Und PHP hat eigentlich das auch. 1512 01:10:47,460 --> 01:10:49,500 >> Lassen Sie mich gehen Sie vor und tun etwas sehr kurz. 1513 01:10:49,500 --> 01:10:52,030 Lassen Sie mich gehen Sie vor und setzen Sie diese hier. 1514 01:10:52,030 --> 01:10:52,600 Lassen Sie mich dies zu tun. 1515 01:10:52,600 --> 01:10:53,690 Funktion. 1516 01:10:53,690 --> 01:10:56,455 Nennen wir diesen Handler (). 1517 01:10:56,455 --> 01:10:58,290 Eine Handler-Funktion so zu sprechen. 1518 01:10:58,290 --> 01:11:00,110 Etwas, das eine Operation behandelt. 1519 01:11:00,110 --> 01:11:02,700 Lassen Sie mich meine bereinigen Einzug. 1520 01:11:02,700 --> 01:11:04,380 Und setzen Sie diese hier. 1521 01:11:04,380 --> 01:11:06,090 Und legte das hier. 1522 01:11:06,090 --> 01:11:06,470 Yep. 1523 01:11:06,470 --> 01:11:07,060 OK. 1524 01:11:07,060 --> 01:11:10,300 >> So, jetzt habe ich eine Funktion namens Handler (), dass ich nicht wirklich weiß, 1525 01:11:10,300 --> 01:11:10,890 was es noch tut. 1526 01:11:10,890 --> 01:11:12,710 Es muss nur noch das Zeug. 1527 01:11:12,710 --> 01:11:13,900 Whoops. 1528 01:11:13,900 --> 01:11:15,820 Nahm zu viel. 1529 01:11:15,820 --> 01:11:18,490 Lassen Sie uns dies tun. 1530 01:11:18,490 --> 01:11:18,990 Gut. 1531 01:11:18,990 --> 01:11:20,240 Entschuldigung. 1532 01:11:20,240 --> 01:11:23,140 1533 01:11:23,140 --> 01:11:23,690 Gut. 1534 01:11:23,690 --> 01:11:24,720 Lassen Sie mich dies zu tun. 1535 01:11:24,720 --> 01:11:25,020 OK. 1536 01:11:25,020 --> 01:11:27,040 Das sieht schön gerade übermitteln jetzt. 1537 01:11:27,040 --> 01:11:29,090 Lassen Sie mich dies zu tun. 1538 01:11:29,090 --> 01:11:29,860 Tun Sie dies. 1539 01:11:29,860 --> 01:11:30,950 Und OK. 1540 01:11:30,950 --> 01:11:33,080 So, jetzt lassen wir diese hier. 1541 01:11:33,080 --> 01:11:35,840 1542 01:11:35,840 --> 01:11:37,270 Keine Programmierung an der Fliege. 1543 01:11:37,270 --> 01:11:37,900 OK. 1544 01:11:37,900 --> 01:11:40,000 >> So, jetzt gehen wir zurück zu wo die Geschichte begann. 1545 01:11:40,000 --> 01:11:43,530 Zuvor sagte ich, dass diese Linie hier bedeutet, wenn das Dokument fertig, los 1546 01:11:43,530 --> 01:11:44,380 vor und tun dies. 1547 01:11:44,380 --> 01:11:45,660 Was will ich tun? 1548 01:11:45,660 --> 01:11:49,070 Gut gesagt, ich will gehen vor und tun die folgenden. 1549 01:11:49,070 --> 01:11:53,700 Führen Sie diese Code-Zeile, und dann was ich dir zu tun ist, nennen das 1550 01:11:53,700 --> 01:11:56,370 funktionieren, wenn das Formular abgeschickt wird. 1551 01:11:56,370 --> 01:11:57,730 >> Nun, das ist das, was ist interessant. 1552 01:11:57,730 --> 01:11:59,170 Dies ist nicht selbst eine Funktion. 1553 01:11:59,170 --> 01:12:02,540 Beachten Sie, ich bin nicht setzen Klammern hier in der üblichen Weise. 1554 01:12:02,540 --> 01:12:06,800 Ich bin buchstäblich vorbei eine Funktion namens Handler (), um eine andere Funktion 1555 01:12:06,800 --> 01:12:10,800 genannt submit () als Argument als aber es ist wie eine Variable. 1556 01:12:10,800 --> 01:12:14,290 Und dies ist eines der Merkmale JavaScript ist Funktionen selbst 1557 01:12:14,290 --> 01:12:15,710 sind wirklich nur Objekte. 1558 01:12:15,710 --> 01:12:18,350 In der Tat, sie sind wirklich nur Variablen von einer Sorte. 1559 01:12:18,350 --> 01:12:21,340 Und wenn der Name der Funktion ist Handler (), gibt es keinen Grund, warum ich nicht kann 1560 01:12:21,340 --> 01:12:23,390 geben es als Argument hier. 1561 01:12:23,390 --> 01:12:27,530 Und das bedeutet, wenn das Formular mit der ID der Demo ist 1562 01:12:27,530 --> 01:12:29,320 vorgelegt, rufen Sie diese Funktion. 1563 01:12:29,320 --> 01:12:32,770 >> Aber jetzt, wenn ich das alles rückgängig machen, warum dann habe ich vielleicht tun 1564 01:12:32,770 --> 01:12:34,850 dies vor einem Augenblick? 1565 01:12:34,850 --> 01:12:36,840 Nun, das ist eine anonyme Funktion. 1566 01:12:36,840 --> 01:12:41,080 Denn ehrlich gesagt, erkannte ich, warum bin ich Mühe, Zeit zu verschwenden erklärte ein 1567 01:12:41,080 --> 01:12:45,540 Funktion namens Handler () nur aufrufen es in einem und nur einem Ort? 1568 01:12:45,540 --> 01:12:48,640 Wenn ich den Namen nicht, und ich weiß nicht müssen es nennen mehr als einem Ort, 1569 01:12:48,640 --> 01:12:51,200 implementieren wir nur die Funktion genau dort, wo ich es brauche. 1570 01:12:51,200 --> 01:12:55,190 Und so JavaScript und PHP unterstützen, was werden als anonyme Funktionen, die 1571 01:12:55,190 --> 01:12:57,900 erlauben Sie mir, genau das zu tun. 1572 01:12:57,900 --> 01:12:59,570 >> Aber wir sind nur die Spitze des Eisbergs. 1573 01:12:59,570 --> 01:13:02,430 Beginnen wir mit nur ein paar necken letzte Beispiele. 1574 01:13:02,430 --> 01:13:04,600 >> Wenn ich in quote.php gehen. 1575 01:13:04,600 --> 01:13:07,160 1576 01:13:07,160 --> 01:13:11,870 Beachten Sie, dass dies eigentlich ein PHP Funktion, ein PHP-Programm, das ich geschrieben habe 1577 01:13:11,870 --> 01:13:15,270 erwartet, dass ein HTTP-Parameter aufgerufen Symbol, und ich kann übergeben 1578 01:13:15,270 --> 01:13:16,730 ein Wert wie FB. 1579 01:13:16,730 --> 01:13:20,010 Und wenn wir tatsächlich an der Quelle zu sehen Code, das ist die Abfrage einer kostenlosen Website 1580 01:13:20,010 --> 01:13:23,680 genannt Yahoo Finance, wie p-Set sieben, und es ist zu mir zurück 1581 01:13:23,680 --> 01:13:26,580 etwas in der scheinbar -Format bekannt ist JSON - 1582 01:13:26,580 --> 01:13:28,010 JavaScript Object Notation. 1583 01:13:28,010 --> 01:13:28,810 Es ist nur ein Objekt. 1584 01:13:28,810 --> 01:13:32,500 Beachten Sie die geschweiften Klammern, die Zitate, der Doppelpunkt und die Kommas. 1585 01:13:32,500 --> 01:13:34,720 >> Jetzt mittlerweile, das ist ziemlich cool. 1586 01:13:34,720 --> 01:13:38,520 Da kann ich wahrscheinlich einen Programmier Sprache, um URLs zu erzeugen 1587 01:13:38,520 --> 01:13:40,370 , die aussehen wie diese dynamisch, oder? 1588 01:13:40,370 --> 01:13:43,340 Ich kann dies bei Google ändern und wieder Google 1589 01:13:43,340 --> 01:13:47,930 Aktienkurs von $ 1,017.55. 1590 01:13:47,930 --> 01:13:49,640 Also mal sehen, ob wir nicht verwenden können, das jetzt. 1591 01:13:49,640 --> 01:13:56,590 >> Lassen Sie mich mit ajax-0 hier gehen, die sieht wie folgt aus. 1592 01:13:56,590 --> 01:13:59,750 Es ist nur eine Website, die hat eine Form mit einem Button. 1593 01:13:59,750 --> 01:14:05,860 Lassen Sie mich hier voran gehen und in YHOO geben für Yahoo-Aktie Symbol, klicken Sie auf Get 1594 01:14:05,860 --> 01:14:10,530 Zitat, und jetzt merke ich bekommen habe eine Warnung mit 32.86. 1595 01:14:10,530 --> 01:14:14,050 >> Lassen Sie mich tatsächlich zu einem Züchter Version dieser Seite, Version zwei, 1596 01:14:14,050 --> 01:14:17,530 geben wir sagen, Microsoft, MSFT. 1597 01:14:17,530 --> 01:14:18,410 Jetzt anfragen. 1598 01:14:18,410 --> 01:14:19,850 Und nun bemerken, die keine Benachrichtigung. 1599 01:14:19,850 --> 01:14:22,770 Beachten Sie sagt, wo es Preis bestimmt werden? 1600 01:14:22,770 --> 01:14:27,060 Es ist das einfachste von Beispielen, Hinweise zu welchem ​​GChat und Facebook 1601 01:14:27,060 --> 01:14:30,070 Chat und Google Mail und andere solche Websites werden dabei durch tatsächlich 1602 01:14:30,070 --> 01:14:31,290 Ändern der Web-Seite. 1603 01:14:31,290 --> 01:14:31,800 >> Beachten Sie diese. 1604 01:14:31,800 --> 01:14:33,120 Lassen Sie mich die Seite neu. 1605 01:14:33,120 --> 01:14:35,080 Lassen Sie mich zu öffnen Chrome Inspector. 1606 01:14:35,080 --> 01:14:36,890 Lassen Sie mich auf die Elemente gehen Registerkarte hier unten. 1607 01:14:36,890 --> 01:14:42,310 Jetzt merken, wenn ich hier unten vergrößern und Öffnen Sie diese auf, bemerken, dass dies mein 1608 01:14:42,310 --> 01:14:44,500 HTML-DOM - mein Dokument-Objektmodell. 1609 01:14:44,500 --> 01:14:45,920 Das ist mein HTML. 1610 01:14:45,920 --> 01:14:48,750 Aber jetzt bemerken, auch wenn es geht ein wenig schwer, es in beide sehen 1611 01:14:48,750 --> 01:14:52,080 Orten gleichzeitig, wenn ich tippen FB hier oben, beobachten Sie die unten 1612 01:14:52,080 --> 01:14:54,110 auf dem Bildschirm nur. 1613 01:14:54,110 --> 01:14:57,720 >> Es ist wirklich zu ändern meine HTML-Datei auf der Fliege. 1614 01:14:57,720 --> 01:15:01,670 Und es ist dabei ganz einfach durch so etwas tut. 1615 01:15:01,670 --> 01:15:06,800 Wenn ich öffnen ajax-2, Bekanntmachung der Umsetzung etwas so sexy wie 1616 01:15:06,800 --> 01:15:09,560 dass, obwohl es ziemlich hässlich, aber so anspruchsvoll wie die 1617 01:15:09,560 --> 01:15:11,910 Funktionell hat es einige HTML unten. 1618 01:15:11,910 --> 01:15:13,810 Aber merke ich verwendet, um zu taggen. 1619 01:15:13,810 --> 01:15:16,640 Wir haben diese nicht verwendet, aber dieses ist wie a, aber es muss nicht zwingen 1620 01:15:16,640 --> 01:15:17,840 alles auf einer neuen Zeile. 1621 01:15:17,840 --> 01:15:20,830 Es macht einfach einen rechteckigen Bereich auf der gleichen Zeile im Wesentlichen. 1622 01:15:20,830 --> 01:15:22,870 >> Beachten Sie, dass ich gab ihm die ID Preis. 1623 01:15:22,870 --> 01:15:26,800 Und es zeigt sich durch Verwendung der gleichen JavaScript-Bibliothek, ich habe eine Funktion 1624 01:15:26,800 --> 01:15:30,440 genannt quote (), dass heißt, wenn das Formular abgeschickt wird. 1625 01:15:30,440 --> 01:15:31,800 Und was ich tue, ist diese. 1626 01:15:31,800 --> 01:15:35,730 Ich Deklaration einer Variablen in JavaScript url genannt, spart den Wert 1627 01:15:35,730 --> 01:15:38,650 quote.php? symbol =. 1628 01:15:38,650 --> 01:15:44,220 Mit anderen Worten, ich selbst bin Anfang eine HTTP-Anforderung vorzubereiten, und dann 1629 01:15:44,220 --> 01:15:49,250 Ich Verkettung auf, dass mit einem Plus welcher das Element mit der ID 1630 01:15:49,250 --> 01:15:54,190 von Symbol ist, das ist bekannt, dass Textfeld rechts unten. 1631 01:15:54,190 --> 01:15:56,630 So genau wie wir Formen in der Vergangenheit. 1632 01:15:56,630 --> 01:16:01,450 >> Und dann stellt sich heraus, in jQuery, wenn Sie rufen. val (), die von einer val ruft 1633 01:16:01,450 --> 01:16:05,900 Funktion, ein Wert, Funktion, das bekommt was der Benutzer eingetippt 1634 01:16:05,900 --> 01:16:08,920 Und dann der gesamte Netzwerkverkehr das geschieht, ist dies. 1635 01:16:08,920 --> 01:16:11,230 $. GetJSON. 1636 01:16:11,230 --> 01:16:13,720 >> Und nebenbei, ist Dollar-Zeichen nur eine Kurznotation. 1637 01:16:13,720 --> 01:16:16,860 Es ist wirklich jQuery.getJSON. 1638 01:16:16,860 --> 01:16:21,520 Hol mir zu JSON von dieser URL, und als der Antrag zurückkommt, rufen Sie dieses 1639 01:16:21,520 --> 01:16:26,550 Funktion und übergeben Sie als Argument was auch immer kam wieder vom Server. 1640 01:16:26,550 --> 01:16:31,205 >> Also mit anderen Worten, wenn ich zurück in die Browser, und ich gehe zurück zu quote.php, 1641 01:16:31,205 --> 01:16:35,590 was mein Browser tut, ist immer Dieses Datenpaket. 1642 01:16:35,590 --> 01:16:38,930 Und wenn ich dann auf diese Seite hier, bemerken, wenn wir stattdessen an das Netzwerk gehen 1643 01:16:38,930 --> 01:16:43,820 Registerkarte, und deaktivieren Sie es, und geben Sie in so etwas wie GOOG für Google und Holen 1644 01:16:43,820 --> 01:16:46,340 Zitat, bemerken die Seite nicht ändern. 1645 01:16:46,340 --> 01:16:50,990 Aber eine HTTP-Anfrage gemacht wurde, und was zurückgekommen, wenn wir uns die 1646 01:16:50,990 --> 01:16:56,130 Antwort ist eine ganze Reihe von JSON dass wir mit zugegriffen schließlich 1647 01:16:56,130 --> 01:16:58,070 Diese einfache Linie hier. 1648 01:16:58,070 --> 01:17:00,150 >> Data ist was geworden war vom Server. 1649 01:17:00,150 --> 01:17:02,120 Der Preis ist der Name des Schlüssel Ich kümmere mich um. 1650 01:17:02,120 --> 01:17:05,230 So data.price gibt mir, dass. 1651 01:17:05,230 --> 01:17:07,540 >> Jetzt mittlerweile, und das ist das letzte Beispiel. 1652 01:17:07,540 --> 01:17:09,280 Sie können noch mehr mit der Seite zu tun. 1653 01:17:09,280 --> 01:17:12,440 Eine eigentlich gut zwei. 1654 01:17:12,440 --> 01:17:14,780 Wir können zurückbringen die markieren, wenn Sie daran erinnern. 1655 01:17:14,780 --> 01:17:15,850 Das ist kein JavaScript. 1656 01:17:15,850 --> 01:17:17,110 Wir können das tun. 1657 01:17:17,110 --> 01:17:17,690 Sehr spannend. 1658 01:17:17,690 --> 01:17:18,800 Wir werden das zu verlassen, wie einem Cliffhanger. 1659 01:17:18,800 --> 01:17:21,590 >> Aber spannender, können Sie Dinge wie diese. 1660 01:17:21,590 --> 01:17:25,940 Wenn ich nach Geolocation-1, stellt sich heraus, dass Chrome weiß, dass wir bei 1661 01:17:25,940 --> 01:17:30,672 Breitengrad 42.37. -71,10. 1662 01:17:30,672 --> 01:17:32,940 So gibt es noch mehr gibt zur Verfügung. 1663 01:17:32,940 --> 01:17:34,290 Aber mehr dazu nächste Woche. 1664 01:17:34,290 --> 01:17:35,540 Wir sehen uns am Montag. 1665 01:17:35,540 --> 01:17:37,558