1 00:00:00,000 --> 00:00:11,330 2 00:00:11,330 --> 00:00:12,360 >> DAVID Malan: Todo ben. 3 00:00:12,360 --> 00:00:15,970 Este é CS50, e este é o fin de semana nove. 4 00:00:15,970 --> 00:00:18,560 Foi un turbilhão sobre nos últimos días. 5 00:00:18,560 --> 00:00:21,580 E sete conxunto de problemas, se é xeonllo profundamente dentro del, entende que hai un gran 6 00:00:21,580 --> 00:00:23,340 pouco novo que está aí dentro. 7 00:00:23,340 --> 00:00:26,660 Pero imos ver se non podemos remendos todo xunto aquí brevemente 8 00:00:26,660 --> 00:00:29,230 antes, logo desviando en máis noutra dirección e visión 9 00:00:29,230 --> 00:00:30,510 onde máis podemos ir. 10 00:00:30,510 --> 00:00:32,630 >> Entón, ata agora, nós xa falamos sobre HTML. 11 00:00:32,630 --> 00:00:33,740 Nós falamos sobre CSS. 12 00:00:33,740 --> 00:00:34,705 Nós falamos sobre PHP. 13 00:00:34,705 --> 00:00:36,520 Vostede comezou a probar SQL. 14 00:00:36,520 --> 00:00:38,360 Hoxe, imos falar un pouco sobre JavaScript. 15 00:00:38,360 --> 00:00:41,230 Pero como facer todo isto dispares linguas se encaixan? 16 00:00:41,230 --> 00:00:44,970 >> Entón nós falamos a semana pasada sobre o noción de ter un servidor. 17 00:00:44,970 --> 00:00:48,470 Entón imos chamar este rectángulo como un servidor web aquí. 18 00:00:48,470 --> 00:00:52,200 E un servidor web serve certamente arquivos. 19 00:00:52,200 --> 00:00:54,640 E algúns deses arquivos poden ser arquivos HTML. 20 00:00:54,640 --> 00:00:58,270 Entón, unha das cousas que un servidor web Pode cuspir pode ser un ficheiro que 21 00:00:58,270 --> 00:01:01,290 nós imos chamar así contendo un pouco de HTML. 22 00:01:01,290 --> 00:01:04,786 Así, en termos leigos, o que O HTML permiten que faga? 23 00:01:04,786 --> 00:01:06,036 >> Audiencia: Ollar Páxina agradable. 24 00:01:06,036 --> 00:01:09,670 25 00:01:09,670 --> 00:01:12,310 >> DAVID Malan: OK, facer unha páxina de bo aspecto, aínda que eu creo que eu teño probado 26 00:01:12,310 --> 00:01:13,370 que doutra forma. 27 00:01:13,370 --> 00:01:18,250 Así HTML deixa pór para fóra páxinas estruturalmente, e permite que 28 00:01:18,250 --> 00:01:22,410 tipo de estética marcar unha páxina, marcar o contido estático, de xeito que 29 00:01:22,410 --> 00:01:23,640 Pode, entón, vela cun navegador web. 30 00:01:23,640 --> 00:01:24,690 >> Pero esa é a clave. 31 00:01:24,690 --> 00:01:26,130 É contido estático. 32 00:01:26,130 --> 00:01:28,590 Vostede escribe-lo, garda-lo, e logo, enviá-lo para ti. 33 00:01:28,590 --> 00:01:31,130 E o servidor web serve entón Lo para os seus visitantes. 34 00:01:31,130 --> 00:01:35,700 >> Pero nós estilizar cousas usando un diferente linguaxe completamente. 35 00:01:35,700 --> 00:01:40,150 Comezamos a usar un atributo de estilo en certos etiquetas. 36 00:01:40,150 --> 00:01:43,400 E o atributo de estilo, imos definir cousas como o tamaño do tipo de letra e cor. 37 00:01:43,400 --> 00:01:46,460 E probablemente xa comezaron a descubrir, ou vai logo para a final 38 00:01:46,460 --> 00:01:50,160 proxectos potencialmente, aínda outro propiedades que pode usar no CSS. 39 00:01:50,160 --> 00:01:54,710 E así, en termos leigos, o que realmente, será que o CSS fai? 40 00:01:54,710 --> 00:01:57,810 Estes son só algúns exemplos dos mesmos. 41 00:01:57,810 --> 00:02:00,730 Que fai isto HTML non parece que de 42 00:02:00,730 --> 00:02:02,606 que xa vimos ata agora? 43 00:02:02,606 --> 00:02:04,850 >> Audiencia: Establecer estilos por si mesmo. 44 00:02:04,850 --> 00:02:06,700 >> DAVID Malan: Establecer estilos por si mesmo. 45 00:02:06,700 --> 00:02:10,280 Así, establecer as cousas como clases de como pode ter atopado, ou exclusivamente 46 00:02:10,280 --> 00:02:13,800 identificar nós nun documento a que se pode estilizar a eles. 47 00:02:13,800 --> 00:02:16,890 Pero, máis en concreto, eu diría que a CSS realmente permite que levar as cousas a 48 00:02:16,890 --> 00:02:20,790 última milla e permite que especifique moi máis precisamente a estética, 49 00:02:20,790 --> 00:02:24,340 mentres HTML para a maior parte deixa vostede estruturar as súas páxinas. 50 00:02:24,340 --> 00:02:27,310 >> E aínda que existen algúns patróns, como vimos etiqueta para 51 00:02:27,310 --> 00:02:30,690 unha etiqueta título, que a grosso modo fixo cousas grandes e en negra. 52 00:02:30,690 --> 00:02:34,250 Iso é unha definición moi xenérica da marca - gran e valente. 53 00:02:34,250 --> 00:02:35,260 O tamaño da fonte é esa? 54 00:02:35,260 --> 00:02:36,080 Que cor é esa? 55 00:02:36,080 --> 00:02:36,890 Como negriña é isto? 56 00:02:36,890 --> 00:02:39,830 E CSS permite máis finamente sintonizar cousas así. 57 00:02:39,830 --> 00:02:42,150 Así como disposición, como algúns de vós xa viron. 58 00:02:42,150 --> 00:02:45,180 >> E, francamente, CSS é algo dunha linguaxe confusa. 59 00:02:45,180 --> 00:02:48,370 É moi poderosa que pode facer literalmente calquera sitio que ten 60 00:02:48,370 --> 00:02:51,880 ver na web hoxe con el, pero é un tipo de dor no pescozo. 61 00:02:51,880 --> 00:02:54,440 E algúns de vós xa bateu a súa cabeza contra as paredes xa só para facer 62 00:02:54,440 --> 00:02:58,560 algo estúpido como centro dun menú na conxunto de problemas de sete se chegou a 63 00:02:58,560 --> 00:02:59,470 Nese punto xa. 64 00:02:59,470 --> 00:03:01,530 >> Pero entender, isto ser máis doado co tempo. 65 00:03:01,530 --> 00:03:02,820 Comeza a conta patróns. 66 00:03:02,820 --> 00:03:06,020 E unha vez máis, Google vai ser o seu amigo para as varias formas en que pode 67 00:03:06,020 --> 00:03:07,220 resolver este tipo de problemas. 68 00:03:07,220 --> 00:03:11,520 >> E atrévome a dicir, con CSS, HTML e máis Xeralmente, pode resolver problemas en 69 00:03:11,520 --> 00:03:15,910 moitas outras formas, que pode moi ben ser correcto, do que podería 70 00:03:15,910 --> 00:03:18,900 en algo así como C, mesmo agora PHP ou JavaScript. 71 00:03:18,900 --> 00:03:21,080 Hai só moitos diferentes formas para poñer as cousas fóra. 72 00:03:21,080 --> 00:03:22,570 >> Pero iso comezou a estar desorde, dixemos. 73 00:03:22,570 --> 00:03:26,480 Só tipo de commingling seu HTML e seu CSS co atributo de estilo foi 74 00:03:26,480 --> 00:03:27,590 algo desleixado. 75 00:03:27,590 --> 00:03:31,460 E, así, no canto dixen, máis ou menos abstractamente falando, que ten que 76 00:03:31,460 --> 00:03:34,050 polo menos comezar a factor o CSS probablemente. 77 00:03:34,050 --> 00:03:37,430 Atributos non o seu estilo, pero polo menos usar a etiqueta de estilo dentro do que 78 00:03:37,430 --> 00:03:38,840 parte da páxina web? 79 00:03:38,840 --> 00:03:39,560 >> Audiencia: Head. 80 00:03:39,560 --> 00:03:40,120 >> DAVID Malan: Na cabeza. 81 00:03:40,120 --> 00:03:43,270 Ata agora, só tiñamos o título se alí, pero tamén se pode engadir un estilo 82 00:03:43,270 --> 00:03:47,230 marcar, e pode poñer o seu CSS aproximadamente falando en dirección ao principio da páxina. 83 00:03:47,230 --> 00:03:52,550 Pero, entón, levou as cousas un paso adiante e nós consignado que máis 84 00:03:52,550 --> 00:03:54,130 nun ficheiro separado. 85 00:03:54,130 --> 00:03:57,240 >> E así, estes dous ficheiros foron dalgún xeito, agora ligados. 86 00:03:57,240 --> 00:03:59,550 E, de feito, foi o tag que fixo iso. 87 00:03:59,550 --> 00:04:02,920 E o que foi un dos máis completo motivacións para a nosa factoring CSS 88 00:04:02,920 --> 00:04:04,057 todo o máis? 89 00:04:04,057 --> 00:04:05,280 >> Audiencia: Reutilización. 90 00:04:05,280 --> 00:04:05,785 >> DAVID Malan: Reutilización. 91 00:04:05,785 --> 00:04:06,150 Non? 92 00:04:06,150 --> 00:04:09,470 Podes ver en p establecer sete xa que moitas das páxinas, a 93 00:04:09,470 --> 00:04:12,260 páxina de compra, a páxina de venda, o portfolio páxina, son, probablemente, 94 00:04:12,260 --> 00:04:13,550 estructurado forma un tanto semellante. 95 00:04:13,550 --> 00:04:17,579 Hai un logotipo CS50 finanzas na parte superior a non ser que decidiu cambialo. 96 00:04:17,579 --> 00:04:19,839 Hai un pé na inferior das páxinas. 97 00:04:19,839 --> 00:04:24,315 E CSS permite que despois de levar para fóra lo nun ficheiro separado para que se 98 00:04:24,315 --> 00:04:27,780 quere cambiar algo no mundo ao longo de todo o seu sitio web, pode realmente 99 00:04:27,780 --> 00:04:29,390 basta cambia-lo nun lugar. 100 00:04:29,390 --> 00:04:32,750 >> Pero hai un prezo a pagar potencialmente por consignado o 101 00:04:32,750 --> 00:04:38,380 CSS do meu ficheiro HTML nun separado arquivo de referencia co 102 00:04:38,380 --> 00:04:40,650 tag, que vimos o luns. 103 00:04:40,650 --> 00:04:43,850 O que podería ser o lado negativo diso? 104 00:04:43,850 --> 00:04:48,830 Pensando dunha semana atrás, para cando estamos fala de HTTP e TCP / IP e como 105 00:04:48,830 --> 00:04:52,070 Internet funciona. 106 00:04:52,070 --> 00:04:53,530 Algo aquí? 107 00:04:53,530 --> 00:04:54,730 >> Audiencia: Hai que máis tempo. 108 00:04:54,730 --> 00:04:55,470 >> DAVID Malan: Hai que máis tempo. 109 00:04:55,470 --> 00:04:56,750 Por que? 110 00:04:56,750 --> 00:04:59,450 >> Audiencia: [inaudível]. 111 00:04:59,450 --> 00:04:59,750 >> DAVID Malan: Yeah. 112 00:04:59,750 --> 00:05:01,240 Por iso, sen dúbida, ten un pouco máis de tempo. 113 00:05:01,240 --> 00:05:04,290 Porque un, o CSS está obviamente non o mesmo ficheiro. 114 00:05:04,290 --> 00:05:06,920 Entón, agora non ten que facer un, senón dous peticións. 115 00:05:06,920 --> 00:05:11,230 E cada unha destas peticións, como vimos en Chrome no chamado Inspector, 116 00:05:11,230 --> 00:05:15,740 e nós miramos a guía de rede, cada deses arquivos require un HTTP 117 00:05:15,740 --> 00:05:18,360 petición, o que vimos leva unha certa cantidade de tempo. 118 00:05:18,360 --> 00:05:19,290 Agora, quizais non sexa moi. 119 00:05:19,290 --> 00:05:20,670 Quizais sexa só 20 milésimas de segundo. 120 00:05:20,670 --> 00:05:22,260 Quizais sexa a 200 milisegundos. 121 00:05:22,260 --> 00:05:25,530 >> Pero pensar nunha páxina, como Facebook, ou CNN, ou Google, que son moi 122 00:05:25,530 --> 00:05:28,060 maior que os exemplos que temos mirou ata agora. 123 00:05:28,060 --> 00:05:32,070 Estas páxinas poden ter decenas de arquivos, cada un dos cales pode esixir un 124 00:05:32,070 --> 00:05:33,550 Descarga de un arquivo. 125 00:05:33,550 --> 00:05:35,800 Entón, as cousas poden potencialmente comezar a desacelerar. 126 00:05:35,800 --> 00:05:39,280 >> E, sobre todo nestes días en que todos teñen teléfonos móbiles nos nosos petos e 127 00:05:39,280 --> 00:05:43,010 conexións de internet máis lentas, ter que agardar uns milisegundos, algúns 128 00:05:43,010 --> 00:05:46,110 máis milisegundos para adicional ficheiros poden realmente ser lento. 129 00:05:46,110 --> 00:05:50,430 Latencia é a palabra que describe o tipo de esperar que ten que 130 00:05:50,430 --> 00:05:53,110 probar ao esperar algún anaco de información. 131 00:05:53,110 --> 00:05:54,430 >> Pero hai un lado positivo. 132 00:05:54,430 --> 00:05:56,600 Polo tanto, non é todo tipo de un - 133 00:05:56,600 --> 00:05:58,170 realmente é un pouco de unha gangorra aquí. 134 00:05:58,170 --> 00:06:02,970 Desvantaxe agora, pero o que os navegadores pódense facer se son intelixentes, a fin de evitar 135 00:06:02,970 --> 00:06:08,870 ter que solicitar a mesma styles.css arquivo de novo pode ser para facer o que? 136 00:06:08,870 --> 00:06:09,390 >> Cache-lo. 137 00:06:09,390 --> 00:06:10,370 Entón caché - 138 00:06:10,370 --> 00:06:11,690 C-A-C-H-E - 139 00:06:11,690 --> 00:06:15,810 xeralmente significa aquí só para salvar a arquivo que solicitou por primeira vez, e 140 00:06:15,810 --> 00:06:17,440 logo comprobar o seu caché para el. 141 00:06:17,440 --> 00:06:20,400 Comprobe se está tipo de recipiente de almacenamento, e se xa ten un 142 00:06:20,400 --> 00:06:24,520 copia do styles.css, aínda que algún outro páxina en p-set, ou en calquera sitio, 143 00:06:24,520 --> 00:06:28,560 solicita-lo novo, só para dar o usuario que aínda copia en caché. 144 00:06:28,560 --> 00:06:30,140 Non te preocupes que o solicite. 145 00:06:30,140 --> 00:06:32,560 >> Desvantaxe alí, con todo, como algúns de vós ter tropeçar no p-set. 146 00:06:32,560 --> 00:06:35,870 Se se fai unha modificación no servidor e volver ao navegador e 147 00:06:35,870 --> 00:06:39,250 actualizar, por veces, o navegador fai un favor e non se incomoda 148 00:06:39,250 --> 00:06:43,660 re-descarga do seu arquivo styles.css porque, imos alí, cales son as posibilidades 149 00:06:43,660 --> 00:06:47,620 que estes estilos que Facebook usa van cambiar hora a hora ou 150 00:06:47,620 --> 00:06:48,140 día a día? 151 00:06:48,140 --> 00:06:48,800 É moi baixo. 152 00:06:48,800 --> 00:06:52,260 Poden cambiar co paso do tempo, aínda que non por minuto ou por hora. 153 00:06:52,260 --> 00:06:55,810 >> Así, un truco, só FYI ao facer web desenvolvemento, a miúdo manteña premida a 154 00:06:55,810 --> 00:06:59,500 clave cambiar, por exemplo, e despois prema en recargar no seu navegador, e que a vontade 155 00:06:59,500 --> 00:07:03,280 tipicamente dicir a recarga navegador todo, incluso se xa ten 156 00:07:03,280 --> 00:07:04,180 na caché. 157 00:07:04,180 --> 00:07:06,630 Entón, de novo, vantaxes e desvantaxes, pero todos eles 158 00:07:06,630 --> 00:07:08,260 en última instancia, decisións de deseño. 159 00:07:08,260 --> 00:07:11,520 >> Entón, agora, non só rematar a historia aquí. 160 00:07:11,520 --> 00:07:15,790 Se eu agora ir para atrás e cara atrás e cara atrás e volta, comezan a introducir non só 161 00:07:15,790 --> 00:07:18,060 HTML, pero PHP. 162 00:07:18,060 --> 00:07:20,786 Así, en termos leigos, o que PHP imos facer? 163 00:07:20,786 --> 00:07:22,770 >> Audiencia: [inaudível]. 164 00:07:22,770 --> 00:07:24,258 >> DAVID Malan: Qué é isto? 165 00:07:24,258 --> 00:07:25,250 >> Audiencia: Presente lóxica no código. 166 00:07:25,250 --> 00:07:26,620 >> DAVID Malan: Si, introducir lóxica no seu código. 167 00:07:26,620 --> 00:07:29,570 Polo tanto, é unha linguaxe de programación de verdade con loops e variables, e 168 00:07:29,570 --> 00:07:32,620 funcións e condicións, e todos as cousas que teño usado camiño de volta 169 00:07:32,620 --> 00:07:33,780 cando desde o principio. 170 00:07:33,780 --> 00:07:36,780 E PHP, que xa vimos, se pode usar ou na liña de comandos - é 171 00:07:36,780 --> 00:07:39,190 Non ten que ter nada que ver coa web, aínda que iso é 172 00:07:39,190 --> 00:07:43,150 realmente as súas orixes e que tende para ser bo e propicio para - 173 00:07:43,150 --> 00:07:47,130 pero pode usar PHP só pola natureza o feito de que ten unha impresión () 174 00:07:47,130 --> 00:07:49,660 función, e unha función () printf, ou unha función () echo. 175 00:07:49,660 --> 00:07:52,440 Hai grupos de formas que pode imprimir un texto con PHP. 176 00:07:52,440 --> 00:07:56,540 >> Polo tanto, pode utilizar esta programación lingua para saída exactamente 177 00:07:56,540 --> 00:07:58,460 o que estabamos a falar antes. 178 00:07:58,460 --> 00:08:01,360 Pode xerar dinamicamente seu HTML. 179 00:08:01,360 --> 00:08:02,300 Quizais non toda ela. 180 00:08:02,300 --> 00:08:06,460 Quizais as cousas códigos ríxidos, como o cabeceira e pé, e logo, 181 00:08:06,460 --> 00:08:07,950 e as súas follas de estilo, e todo iso. 182 00:08:07,950 --> 00:08:11,190 Pero para algo así como-p establecer sete, onde está manipulando accións e 183 00:08:11,190 --> 00:08:14,690 amosando a bolsa do usuario, que é vai cambiar dinamicamente, pode 184 00:08:14,690 --> 00:08:18,960 certamente usar PHP ea lóxica que dá vostede como unha linguaxe de programación para 185 00:08:18,960 --> 00:08:22,320 saída subconxuntos dinámicamente da páxina. 186 00:08:22,320 --> 00:08:25,900 >> Entón, cando fala sobre sitios dinámicos, ou programación web, que é 187 00:08:25,900 --> 00:08:27,200 o que está realmente a falar. 188 00:08:27,200 --> 00:08:31,450 Usando unha linguaxe como PHP, ou cousas chamado Python ou Ruby, ou Java, ou 189 00:08:31,450 --> 00:08:35,900 Aínda outras linguas, para consultar unha base de datos moitas veces, ou outro servidor, e 190 00:08:35,900 --> 00:08:38,580 despois cuspir dinámica de HTML. 191 00:08:38,580 --> 00:08:42,470 >> Agora, o resultado final, como un aparte, é que o HTML da maioría dos sitios, 192 00:08:42,470 --> 00:08:45,970 incluíndo o seu set-p sete, é, probablemente, vai ser unha gran confusión se 193 00:08:45,970 --> 00:08:48,060 ollar para a fonte código nun navegador web. 194 00:08:48,060 --> 00:08:49,010 Isto non é un gran negocio. 195 00:08:49,010 --> 00:08:51,550 Neste momento, cando nos preocupa estilo, nos preocupa co 196 00:08:51,550 --> 00:08:52,740 cousas que escribe. 197 00:08:52,740 --> 00:08:56,240 Non se preocupan as cousas que o que as súas saídas de código. 198 00:08:56,240 --> 00:08:59,520 Entón non se preocupe con sangría aquí, se é que é PHP 199 00:08:59,520 --> 00:09:01,190 de feito, a saída de material. 200 00:09:01,190 --> 00:09:04,430 Despois de todo, o teu navegador non vai se importar, e un ser humano non estará ollando 201 00:09:04,430 --> 00:09:05,400 na fonte de calquera maneira. 202 00:09:05,400 --> 00:09:09,000 Nós os funcionarios, por exemplo, sería estar a ollar para o PHP. 203 00:09:09,000 --> 00:09:13,440 >> Entón deixe-me dar un exemplo rápido agora de por que máis que pode ser útil. 204 00:09:13,440 --> 00:09:18,620 Entón, francamente, eu non me lembro da última xa que eu usei C para resolver un problema en 205 00:09:18,620 --> 00:09:19,620 do mundo real. 206 00:09:19,620 --> 00:09:22,330 Foi, probablemente, na posgrao cando Eu precisaba usar unha linguaxe que 207 00:09:22,330 --> 00:09:26,710 foi moi baixo nivel e me deu a oportunidade de facer algo moi alta 208 00:09:26,710 --> 00:09:30,720 realizando para realmente salvar o maior número de CPU ciclos que puiden, en gran parte, 209 00:09:30,720 --> 00:09:33,990 porque eu estaba usando enormes conxuntos de datos, e cada ciclo de CPU contadas. 210 00:09:33,990 --> 00:09:37,750 E, francamente, mesmo en cousas como teléfonos nos días de hoxe e outros dispositivos 211 00:09:37,750 --> 00:09:39,910 onde non pode ter tanto memoria e non pode ter como 212 00:09:39,910 --> 00:09:44,160 moi CPU, mediante linguaxes máis rápidas aínda é atractivo. 213 00:09:44,160 --> 00:09:47,290 >> Pero no mundo real, cando acaba de quere xogar un programa conxunto para 214 00:09:47,290 --> 00:09:50,340 analizar algúns datos, ou recadou unha morea de inscricións para 215 00:09:50,340 --> 00:09:53,330 algún grupo de estudantes e queres rapidamente automatizar o envío de correos electrónicos 216 00:09:53,330 --> 00:09:56,240 un por un para cada un dos registrantes, vai chegar a 217 00:09:56,240 --> 00:09:59,240 unha linguaxe de alto nivel de C, por así dicir. 218 00:09:59,240 --> 00:10:04,060 Algo así como PHP ou Python, ou Ruby, ou unha media ducia de outros que existen 219 00:10:04,060 --> 00:10:04,550 nos días de hoxe. 220 00:10:04,550 --> 00:10:07,200 Pero os tres son probablemente o máis de moda agora. 221 00:10:07,200 --> 00:10:10,840 >> E o que isto significa que pode abrir un editor de texto como o gedit ou 222 00:10:10,840 --> 00:10:14,030 máis que calquera outra cousa e despois é só comezar escribir o código sen ter que se preocupar 223 00:10:14,030 --> 00:10:17,800 sobre a compilación, sen ter que realmente preocuparse a xestión de memoria, 224 00:10:17,800 --> 00:10:20,820 manter presente que algo desleixo acabará por volver 225 00:10:20,820 --> 00:10:24,790 para morde-lo, se o conxunto de datos queda maior ou o problema queda grande. 226 00:10:24,790 --> 00:10:27,230 Pero o que iso supón para nós é o seguinte. 227 00:10:27,230 --> 00:10:29,860 >> Déixeme ir adiante e executar ortográfico do conxunto de problemas seis. 228 00:10:29,860 --> 00:10:33,480 Entón, esta é a miña implementación baseada en trie que eu usei no gran 229 00:10:33,480 --> 00:10:35,500 placa onde eu non tan ben executada. 230 00:10:35,500 --> 00:10:38,720 Nós imos voltar nunha semana e revisitar os que se acabar na parte superior do 231 00:10:38,720 --> 00:10:40,430 tarxeta grande na nosa última clase. 232 00:10:40,430 --> 00:10:44,520 Pero, por agora, déixeme ir adiante e só executar a miña solución no texto, e nós imos facer 233 00:10:44,520 --> 00:10:48,460 a Biblia King James, e aquí imos nós. 234 00:10:48,460 --> 00:10:51,080 >> Polo tanto, estas son todas as supostamente palabras con erros ortográficos en cada 235 00:10:51,080 --> 00:10:52,240 a Biblia King James. 236 00:10:52,240 --> 00:10:55,560 E a miña implementación levou medio segundo en total. 237 00:10:55,560 --> 00:10:58,270 Entón, non moi malo neste determinado ordenador. 238 00:10:58,270 --> 00:11:01,540 Pero pense o que código que eu tiña que escribir. 239 00:11:01,540 --> 00:11:02,880 Debería canto código tiña que escribir. 240 00:11:02,880 --> 00:11:06,170 Debería cantas horas gastou no D-hall ou o seu dormitorio ou onde queira 241 00:11:06,170 --> 00:11:07,890 realmente codificación se esa solución. 242 00:11:07,890 --> 00:11:11,850 >> Ben, se eu realmente teño un nivel máis elevado linguaxe como PHP, tome nota do 243 00:11:11,850 --> 00:11:13,350 o que podo facer aquí. 244 00:11:13,350 --> 00:11:16,410 En primeiro lugar, supoña que este é, en vez o seu código de distribución. 245 00:11:16,410 --> 00:11:17,790 Este é un ficheiro chamado ortográfico. 246 00:11:17,790 --> 00:11:20,220 Está dispoñible como parte hoxe código de distribución. 247 00:11:20,220 --> 00:11:22,670 E eu vou acenar a man a máis dos detalles, pero esta é realmente 248 00:11:22,670 --> 00:11:25,500 un exemplo interesante de como podes porta unha linguaxe 249 00:11:25,500 --> 00:11:28,870 como C sobre a PHP. 250 00:11:28,870 --> 00:11:33,420 Eu literalmente abriu dúas ventás de texto, un coa miña versión C de speller.c, 251 00:11:33,420 --> 00:11:36,960 e eu só comecei a traducir-lo no meu cabeza para PHP e escribindo-lo usando 252 00:11:36,960 --> 00:11:38,840 funcións equivalentes máis próximos. 253 00:11:38,840 --> 00:11:40,100 >> Entón, algunhas destas cousas son diferentes. 254 00:11:40,100 --> 00:11:43,730 Vimos a última vez que o PHP non usa incluír no exactamente da mesma maneira. 255 00:11:43,730 --> 00:11:47,050 Usa esixe normalmente, aínda que inclúen existe. 256 00:11:47,050 --> 00:11:50,330 Establecer é un pouco diferente do # Establece en C, pero iso é 257 00:11:50,330 --> 00:11:51,890 como nós facemos unha constante. 258 00:11:51,890 --> 00:11:55,860 $ Argc botan existe en PHP, polo que temos visto iso antes. 259 00:11:55,860 --> 00:11:58,650 Estes son só variables, todo de que comezan con cifrões. 260 00:11:58,650 --> 00:12:00,590 Teña en conta que estes son só unha banda de flotar puntos. 261 00:12:00,590 --> 00:12:03,970 >> Así, longa historia curta, vostede é benvido navegar este curioso, este é 262 00:12:03,970 --> 00:12:10,010 case unha conversión liña por liña do Versión C de speller.c en PHP. 263 00:12:10,010 --> 00:12:12,630 E pode facelo de novo para media ducia de outras linguas. 264 00:12:12,630 --> 00:12:14,910 >> Pero o que é interesante é iso. 265 00:12:14,910 --> 00:12:16,910 Ou o que é francamente desanimado é iso. 266 00:12:16,910 --> 00:12:20,790 Déixeme ir adiante e escribir sobre dictionary.php, e afirman que eu son 267 00:12:20,790 --> 00:12:23,670 indo a ir adiante e re-aplicar conxunto de problemas de seis aquí. 268 00:12:23,670 --> 00:12:27,530 >> Entón, imos propoñer que, neste primeiro arquivo, que aplicarase en 269 00:12:27,530 --> 00:12:30,550 PHP, entón déixeme abrir miñas marcas como estas. 270 00:12:30,550 --> 00:12:34,780 Deixe-me dar a min mesmo un mundial variable, $ tamaño queda cero. 271 00:12:34,780 --> 00:12:36,710 E eu vou dar me unha táboa hash. 272 00:12:36,710 --> 00:12:38,110 Vou usar unha táboa hash para esa cousa. 273 00:12:38,110 --> 00:12:42,070 ¿Como declarar unha táboa hash en PHP? 274 00:12:42,070 --> 00:12:42,990 Feito. 275 00:12:42,990 --> 00:12:43,980 Aceptar. 276 00:12:43,980 --> 00:12:48,870 >> Soporte de forma aberta preto do soporte representa que en PHP, como vimos? 277 00:12:48,870 --> 00:12:51,850 Unha matriz, senón unha matriz que podería ser unha matriz asociativa. 278 00:12:51,850 --> 00:12:54,320 Unha matriz asociativa é unha estrutura de datos que 279 00:12:54,320 --> 00:12:55,860 asocia chaves con valores. 280 00:12:55,860 --> 00:12:59,430 >> Agora, o máis sinxelo numericamente indexado matriz, as claves son o que? 281 00:12:59,430 --> 00:13:02,250 282 00:13:02,250 --> 00:13:03,960 Cero, un, dous, tres, non? 283 00:13:03,960 --> 00:13:08,780 Old school cousas de volta a partir de C. Pero pode tamén ser cadeas como foo e bar, 284 00:13:08,780 --> 00:13:12,210 ou Maxwell, ou calquera cadea. 285 00:13:12,210 --> 00:13:14,240 Para que eu poida aproveitar esta en só un momento. 286 00:13:14,240 --> 00:13:17,550 >> Déixeme ir adiante e declarar unha función como - 287 00:13:17,550 --> 00:13:19,020 imos facer load () en primeiro lugar. 288 00:13:19,020 --> 00:13:20,690 Así, a carga () función. 289 00:13:20,690 --> 00:13:23,440 E PHP é un pouco diferente, xa que vostede literalmente clase de función, pero 290 00:13:23,440 --> 00:13:24,930 non escribir un tipo de retorno. 291 00:13:24,930 --> 00:13:28,760 Eu estou indo a ir adiante e dicir que o función load () debe ter en 292 00:13:28,760 --> 00:13:31,000 argumento $ dicionario, só como a versión C fixo. 293 00:13:31,000 --> 00:13:32,510 Eu estou facendo iso da memoria. 294 00:13:32,510 --> 00:13:34,910 >> E propoño que eu son vai facer. 295 00:13:34,910 --> 00:13:37,080 Estou simplemente fará foreach. 296 00:13:37,080 --> 00:13:40,710 Vou chamar a unha función chamada file (), pasando o nome daquel 297 00:13:40,710 --> 00:13:44,990 ficheiro, que é a variable $ $ Dicionario como palabra. 298 00:13:44,990 --> 00:13:49,410 E, a continuación, dentro do meu loop for aquí, estou indo a ir adiante e gardar na miña 299 00:13:49,410 --> 00:13:57,440 $ $ Táboa que a noticia se realidade. 300 00:13:57,440 --> 00:13:57,918 Feito. 301 00:13:57,918 --> 00:14:01,264 Oh, espera. 302 00:14:01,264 --> 00:14:02,422 Feito. 303 00:14:02,422 --> 00:14:02,760 Aceptar. 304 00:14:02,760 --> 00:14:04,970 >> Esa é a función load () dicir en PHP. 305 00:14:04,970 --> 00:14:05,865 Agora, por que é que isto funciona? 306 00:14:05,865 --> 00:14:07,010 E eu son o tipo de trapaça aquí. 307 00:14:07,010 --> 00:14:09,980 >> Entón, un, foreach vimos brevemente última vez. 308 00:14:09,980 --> 00:14:13,680 Significa só que podes iterado unha matriz, sen preocuparse i 309 00:14:13,680 --> 00:14:16,150 e n e máis aló, e todo iso. 310 00:14:16,150 --> 00:14:21,350 Dicionario é, por suposto, o nome do ficheiro, algo así como grande ou pequeno, os dous 311 00:14:21,350 --> 00:14:22,830 dicionarios que usan última vez. 312 00:14:22,830 --> 00:14:26,715 Arquivo é unha función que abre o texto arquivo, le-lo na liña por liña, e 313 00:14:26,715 --> 00:14:29,840 mans cara atrás un abano enorme, cada un de cuxos elementos é un 314 00:14:29,840 --> 00:14:31,340 liña a partir dese ficheiro. 315 00:14:31,340 --> 00:14:36,040 Así que esta é a combinación de fopen, e fread, e mentres loop, e fclose, 316 00:14:36,040 --> 00:14:37,080 e todo iso. 317 00:14:37,080 --> 00:14:40,150 Por último, como a palabra significa só que esta é a variable que terei acceso a 318 00:14:40,150 --> 00:14:41,890 en cada iteración neste loop. 319 00:14:41,890 --> 00:14:46,910 >> Así, en breve, este forro aquí significa abrir o ficheiro cuxo nome é en 320 00:14:46,910 --> 00:14:50,750 dicionario, a variable, iterado liña por liña, e cada vez que comeza 321 00:14:50,750 --> 00:14:54,290 unha liña, almacenar nunha variable chamada palabra, e, a continuación, facer algo coa palabra. 322 00:14:54,290 --> 00:14:55,280 O que quero facer? 323 00:14:55,280 --> 00:14:58,110 Quero poñer palabras na miña táboa de hash. 324 00:14:58,110 --> 00:15:00,860 >> Ben, podo poñer algo na miña Táboa de Hash como en C 325 00:15:00,860 --> 00:15:02,140 usar corchetes. 326 00:15:02,140 --> 00:15:03,660 Este é o nome da miña táboa de hash. 327 00:15:03,660 --> 00:15:07,180 Vou índice para este hash mesa neste lugar. 328 00:15:07,180 --> 00:15:08,920 Entón non entre parénteses cero, non entre parénteses un. 329 00:15:08,920 --> 00:15:11,990 Cita bracket algo pecha comiñas, todo o que esa palabra é. 330 00:15:11,990 --> 00:15:15,200 E, así como pode ter no seu trie traballo táboa hash, só tenda 331 00:15:15,200 --> 00:15:17,650 efectivamente un booleano, implicitamente ou explicitamente. 332 00:15:17,650 --> 00:15:18,260 Feito. 333 00:15:18,260 --> 00:15:20,000 Estou almacenando o valor verdadeiro. 334 00:15:20,000 --> 00:15:23,150 >> Agora hai un par de cousas Estou cortando esquinas aquí. 335 00:15:23,150 --> 00:15:27,720 Tecnicamente, non vai ser unha nova liña irritante, / n, a finais de 336 00:15:27,720 --> 00:15:28,820 cada unha destas palabras. 337 00:15:28,820 --> 00:15:31,770 Así que probablemente debe chamar unha función PHP chamado costeleta (), que vai 338 00:15:31,770 --> 00:15:33,460 literalmente cortar aquilo. 339 00:15:33,460 --> 00:15:35,020 E eu realmente teño facer outra cousa. 340 00:15:35,020 --> 00:15:38,380 Eu probablemente debería incrementar o tamaño de cada iteración, entón estou mantendo o control 341 00:15:38,380 --> 00:15:39,560 globalmente do que é. 342 00:15:39,560 --> 00:15:43,180 E, francamente, e este é un dos aspectos máis estúpidos PHP, se está 343 00:15:43,180 --> 00:15:46,950 usar unha variable global, ten que dicir explicitamente que é. 344 00:15:46,950 --> 00:15:51,670 Entón, eu estou indo realmente escribir mundial $ Tamaño, $ táboa global, e agora 345 00:15:51,670 --> 00:15:52,690 miña función é completa. 346 00:15:52,690 --> 00:15:57,475 >> Polo tanto, non é tan sinxelo coma antes, pero probablemente levou menos tempo do que o C 347 00:15:57,475 --> 00:15:58,220 versión, quizais? 348 00:15:58,220 --> 00:15:58,730 Aceptar. 349 00:15:58,730 --> 00:16:00,390 >> Entón agora imos facer a comprobación () función. 350 00:16:00,390 --> 00:16:04,300 A ver se isto levou polo menos o horas a fío que nos levou en C. Entón, 351 00:16:04,300 --> 00:16:06,500 déixeme ir adiante e declarar comprobar como unha función. 352 00:16:06,500 --> 00:16:09,070 Toma na argumentación palabra, que é vai vir de Speller. 353 00:16:09,070 --> 00:16:13,410 E eu estou indo só para comprobar se o isset seguinte variable, mesa 354 00:16:13,410 --> 00:16:18,400 soporte strtolower de palabra - 355 00:16:18,400 --> 00:16:20,590 imos equilibrar todos os meus parénteses - 356 00:16:20,590 --> 00:16:24,275 a continuación, regresar certo. 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 que era realmente o disco parte deste programa. 360 00:16:30,330 --> 00:16:31,940 En caso contrario, volverá false. 361 00:16:31,940 --> 00:16:32,630 Feito. 362 00:16:32,630 --> 00:16:33,460 Isto é de verificación (). 363 00:16:33,460 --> 00:16:34,520 >> Agora, por que é que isto funciona? 364 00:16:34,520 --> 00:16:37,040 Ben, un pase nunha palabra, que é unha cadea. 365 00:16:37,040 --> 00:16:41,400 Dous, estou comprobando dentro do hash mesa, que se chama $ table. 366 00:16:41,400 --> 00:16:45,470 Estou forzando-o para minúsculas, chamando unha función moi semellante tolower () en 367 00:16:45,470 --> 00:16:48,580 C, pero iso fai toda a palabra, non un personaxe único. 368 00:16:48,580 --> 00:16:52,680 E se isto for definido, noutras palabras, non é un valor establecido, noutras palabras, 369 00:16:52,680 --> 00:16:54,880 se é verdade, entón si, esta é unha palabra. 370 00:16:54,880 --> 00:16:56,530 Porque eu poñelas alí con load (). 371 00:16:56,530 --> 00:16:59,100 E se non, eu vou voltar false. 372 00:16:59,100 --> 00:17:00,090 >> Agora, os outros son moi sinxelo. 373 00:17:00,090 --> 00:17:03,570 Tamaño Función (), como fago isto? 374 00:17:03,570 --> 00:17:05,230 Eu, esencialmente, facer retornar $ size. 375 00:17:05,230 --> 00:17:07,770 Pero eu teño que tecnicamente a facer esa cousa irritante. 376 00:17:07,770 --> 00:17:10,640 E en realidade se escoitar, eu estaba cortando un canto moitos. 377 00:17:10,640 --> 00:17:12,920 Realmente teño que facer $ table global. 378 00:17:12,920 --> 00:17:16,260 >> Pero o que se dixo, descargar). 379 00:17:16,260 --> 00:17:17,380 Descargar () é incrible. 380 00:17:17,380 --> 00:17:20,500 Unload () función. 381 00:17:20,500 --> 00:17:23,990 Como quero aplicar descarga ()? 382 00:17:23,990 --> 00:17:25,079 Feito. 383 00:17:25,079 --> 00:17:25,450 Aceptar. 384 00:17:25,450 --> 00:17:28,900 >> Entón descargar (), xestión de memoria é totalmente tomado coidado para ti 385 00:17:28,900 --> 00:17:31,800 algo así como PHP e moito de linguaxes de alto nivel. 386 00:17:31,800 --> 00:17:32,600 Entón, iso é incrible. 387 00:17:32,600 --> 00:17:36,080 Como por que diaños nós pasamos o pasado oito semanas máis sobre C escritura 388 00:17:36,080 --> 00:17:41,030 parecer moi lento, moito tempo consumindo problemas con decenas de horas 389 00:17:41,030 --> 00:17:42,530 de traballar baixo o cinto? 390 00:17:42,530 --> 00:17:46,110 >> Así, por unha banda, isto pode funcionar moi ben para pequenos programas. 391 00:17:46,110 --> 00:17:47,840 El certamente acelerou o meu tempo de desenvolvemento. 392 00:17:47,840 --> 00:17:49,790 Pero imos ver que pasa no mundo real. 393 00:17:49,790 --> 00:17:52,370 >> Déixeme ir a este directorio nunha fiestra de terminal. 394 00:17:52,370 --> 00:17:53,370 Hai ortográfico. 395 00:17:53,370 --> 00:17:56,570 E entenda como un aparte, e pode atopei isto en conxunto de problemas 396 00:17:56,570 --> 00:17:58,190 seis ou sete conxunto de problemas. 397 00:17:58,190 --> 00:18:01,610 Non ten que estrictamente acabar con arquivos PHP con. php. 398 00:18:01,610 --> 00:18:05,250 Se pór unha liña como aquel primeiro en o principio, que é unha liña especial 399 00:18:05,250 --> 00:18:10,980 de sintaxe que significa, esencialmente, atopar o programa chamado PHP e usalo para 400 00:18:10,980 --> 00:18:12,270 interpretar este ficheiro. 401 00:18:12,270 --> 00:18:15,410 Entón agora ninguén realmente sabe que Estou executando un programa PHP. 402 00:18:15,410 --> 00:18:19,860 Eu poida executa-lo só como se foron algo compilados en C. 403 00:18:19,860 --> 00:18:20,650 >> Pero aquí está a cousa. 404 00:18:20,650 --> 00:18:21,600 De feito, imos facelo de novo. 405 00:18:21,600 --> 00:18:23,530 Dropbox/pset6 /. 406 00:18:23,530 --> 00:18:25,390 Hai ortográfico. 407 00:18:25,390 --> 00:18:26,720 OK, 0,44 segundo. 408 00:18:26,720 --> 00:18:28,080 El ficou máis rápido desta vez. 409 00:18:28,080 --> 00:18:29,745 >> Agora imos para a versión de PHP. 410 00:18:29,745 --> 00:18:43,070 411 00:18:43,070 --> 00:18:44,320 O toque agradable. 412 00:18:44,320 --> 00:18:50,830 413 00:18:50,830 --> 00:18:53,285 Pero basta pensar canto tempo Salvei en horario de oficina. 414 00:18:53,285 --> 00:18:56,990 415 00:18:56,990 --> 00:18:57,790 Aceptar. 416 00:18:57,790 --> 00:19:01,020 >> Entón, 3,59 segundo, o que realmente non soa ten tamén. 417 00:19:01,020 --> 00:19:03,710 Pero iso é porque longa historia curta, cando está imprimindo unha cantidade enorme 418 00:19:03,710 --> 00:19:06,840 de cousas para a pantalla, que si atrasa as cousas. 419 00:19:06,840 --> 00:19:11,260 O que realmente levou o CPU en aparello foi de 3,59 segundos, a 420 00:19:11,260 --> 00:19:15,260 contraste con C, que tivo 0,44 segundos máis recentemente. 421 00:19:15,260 --> 00:19:17,620 Isto é realmente unha orde de magnitude diferente. 422 00:19:17,620 --> 00:19:20,280 >> Entón, onde é que o prezo ven? 423 00:19:20,280 --> 00:19:21,790 Por que é moito máis lento? 424 00:19:21,790 --> 00:19:24,220 Por que PHP realizar tan mal? 425 00:19:24,220 --> 00:19:25,242 Danielle? 426 00:19:25,242 --> 00:19:26,550 >> Audiencia: Realmente non utilizar unha táboa hash. 427 00:19:26,550 --> 00:19:27,710 >> DAVID Malan: Realmente non utilizar unha táboa hash. 428 00:19:27,710 --> 00:19:28,760 Entón eu medio que fixen. 429 00:19:28,760 --> 00:19:29,870 Polo tanto, é un array asociativo. 430 00:19:29,870 --> 00:19:33,650 O máis probable é que a xente en PHP son moi intelixente, eles usaban por baixo da 431 00:19:33,650 --> 00:19:39,520 portada unha táboa hash que foi realmente executada en algo así como C ou C + +. 432 00:19:39,520 --> 00:19:41,290 Pero. 433 00:19:41,290 --> 00:19:42,760 É. 434 00:19:42,760 --> 00:19:44,010 >> Audiencia: [inaudível]. 435 00:19:44,010 --> 00:19:46,690 436 00:19:46,690 --> 00:19:47,080 >> DAVID Malan: Yeah. 437 00:19:47,080 --> 00:19:50,780 Así, cada unha das funcións que escribín agora - En realidade, pode dicir que unha vez por 438 00:19:50,780 --> 00:19:51,480 pouco máis alto? 439 00:19:51,480 --> 00:19:54,509 >> Audiencias: Cada unha das funcións que vostede incluíu ten moito máis completo 440 00:19:54,509 --> 00:19:56,610 capacidade do que - 441 00:19:56,610 --> 00:19:57,550 >> DAVID Malan: Entón, iso é moi certo. 442 00:19:57,550 --> 00:20:01,490 Hai moito máis sobrecarga que estamos non realmente ver, concentrando-se só en 443 00:20:01,490 --> 00:20:03,730 dictionary.php, que eu acabo de escribir. 444 00:20:03,730 --> 00:20:08,020 Por outra banda, hai un intérprete enteiro ir ao fondo. 445 00:20:08,020 --> 00:20:12,040 En realidade, cando eu execute este programa, el non estaba funcionando ceros e uns compilados 446 00:20:12,040 --> 00:20:14,290 designado para o meu CPU Intel. 447 00:20:14,290 --> 00:20:19,270 Pola contra, estaba correndo liña por liña Código PHP parecer exactamente 448 00:20:19,270 --> 00:20:20,350 como se inseriu. 449 00:20:20,350 --> 00:20:22,475 E así, sempre que usar unha linguaxe interpretada, vostede 450 00:20:22,475 --> 00:20:23,850 realmente pagan ese prezo. 451 00:20:23,850 --> 00:20:27,010 Vai levar moito tempo para ler seu cume ficheiro para abaixo, de esquerda 452 00:20:27,010 --> 00:20:30,740 dereita, e entón executar cada liña de novo e de novo. 453 00:20:30,740 --> 00:20:34,250 >> Agora, en realidade, sobre todo na web, realmente pode acelerar este proceso 454 00:20:34,250 --> 00:20:38,660 almacenando en memoria os resultados da Código PHP que está a ser interpretado. 455 00:20:38,660 --> 00:20:41,640 E iso ten sentido na web, xa que se non ten un usuario, como 456 00:20:41,640 --> 00:20:46,300 me aquí, pero 1.000 ou 10.000 usuarios, a continuación, quizais a primeira vez que o arquivo é 457 00:20:46,300 --> 00:20:49,050 accedeuse é lento, pero, posteriormente, é moito máis rápido. 458 00:20:49,050 --> 00:20:51,000 >> Pero isto tamén, unha vez máis, é un trade off. 459 00:20:51,000 --> 00:20:53,870 E para algo como un datos de investigación establecido, ou incluso algo grande como 460 00:20:53,870 --> 00:20:58,330 tanto, os seus usuarios, finalmente, comezar a sentir que a desaceleración. 461 00:20:58,330 --> 00:21:02,670 >> Así, en breve, interpretado linguas son moi en voga, moi popular, e 462 00:21:02,670 --> 00:21:06,710 francamente son probablemente os idiomas debe chegar para a resolución de problemas 463 00:21:06,710 --> 00:21:08,200 posterior para CS50. 464 00:21:08,200 --> 00:21:12,720 Pero entenda o que está realmente tendo por seguro debaixo do capo 465 00:21:12,720 --> 00:21:15,910 Realmente estas últimas semanas en Hash táboas e árbores, e intenta, 466 00:21:15,910 --> 00:21:20,770 os cales son utilizados, en última instancia para realmente aplicar cousas como soporte aberto, 467 00:21:20,770 --> 00:21:24,200 corchete, que podemos agora gratitude tomar para concedida. 468 00:21:24,200 --> 00:21:26,360 >> Entón, imos dar un ollo agora neste contexto web. 469 00:21:26,360 --> 00:21:29,890 E eu mencionen a última vez que non hai unha banda de superglobais en PHP que 470 00:21:29,890 --> 00:21:32,490 non son realmente relevantes na liña de comandos. 471 00:21:32,490 --> 00:21:36,210 Son máis relevantes na contexto de usar PHP nun contexto web. 472 00:21:36,210 --> 00:21:41,220 Entón, executando o PHP nun servidor web, a fin para xerar cousas como HTML. 473 00:21:41,220 --> 00:21:44,540 >> E mirou $ _GET e $ _POST, e que é onde os usuarios automaticamente ' 474 00:21:44,540 --> 00:21:49,100 entrada acaba simplemente se enviar unha formar a un arquivo que remata en. php nun web 475 00:21:49,100 --> 00:21:50,460 servidor como o aparello. 476 00:21:50,460 --> 00:21:53,310 Pero imos examinar brevemente $ _COOKIE E $ _SESSION. 477 00:21:53,310 --> 00:21:56,670 >> En termos leigos, o que é unha cookie como entende-lo no contexto 478 00:21:56,670 --> 00:21:58,220 a través da web? 479 00:21:58,220 --> 00:21:59,450 >> Audiencia: o ficheiro no computador. 480 00:21:59,450 --> 00:21:59,920 >> DAVID Malan: Yeah. 481 00:21:59,920 --> 00:22:03,500 É un arquivo no ordenador do usuario plantada por calquera web 482 00:22:03,500 --> 00:22:04,410 ocorrer de visitar. 483 00:22:04,410 --> 00:22:07,334 Entón, cando vai para o Facebook, cando vai para bankofamerica.com, cando vai 484 00:22:07,334 --> 00:22:10,330 a google.com, cando vai a case calquera sitio no mundo nos días de hoxe, 485 00:22:10,330 --> 00:22:14,850 incluíndo cs50.net, unha cookie é plantada no seu ordenador, o que é 486 00:22:14,850 --> 00:22:19,800 ou un valor almacenado na memoria RAM no seu ordenador na memoria do seu navegador, ou 487 00:22:19,800 --> 00:22:22,800 ás veces, en realidade un ficheiro gardado no seu disco duro. 488 00:22:22,800 --> 00:22:26,960 >> E o que normalmente almacenados no ficheiro non é o seu nome de usuario, e non o seu 489 00:22:26,960 --> 00:22:31,060 contrasinal, normalmente non é algo sensible a non ser que o sitio non é tan 490 00:22:31,060 --> 00:22:35,040 bo coa súa seguridade, senón é un gran identificador único entre 491 00:22:35,040 --> 00:22:35,680 outras cousas. 492 00:22:35,680 --> 00:22:38,920 É un número aleatorio gran plantado no seu ordenador, pero pode pensar como 493 00:22:38,920 --> 00:22:42,740 unha especie de selo de man virtual como de un club ou algún parque de atraccións que 494 00:22:42,740 --> 00:22:47,160 permite que o equipo, os propietarios deste servizo, para lembrar quen é vostede. 495 00:22:47,160 --> 00:22:51,030 Entón, se o número aleatorio grande é como 12345678, a pesar de que, obviamente, 496 00:22:51,030 --> 00:22:54,180 non moi aleatorio, pense que, como o selo de man que cando visita 497 00:22:54,180 --> 00:22:57,930 facebook.com por primeira vez, carimbam ese número na súa man. 498 00:22:57,930 --> 00:23:01,510 E entón, porque fala HTTP, vostede sendo un navegador, e por mor do Facebook 499 00:23:01,510 --> 00:23:06,440 obviamente fala o mesmo que un web servidor, di o HTTP protocolo que 500 00:23:06,440 --> 00:23:09,930 a calquera hora, posteriormente, visitar facebook.com, tanto se se trata dun segundo 501 00:23:09,930 --> 00:23:13,560 máis tarde, unha hora máis tarde, mesmo o día seguinte, con tal de que non ten explicitamente 502 00:23:13,560 --> 00:23:17,050 desconectado, o que efectivamente é como lavar as mans. 503 00:23:17,050 --> 00:23:20,280 HTTP di que ten que presentar o seu selo man cada vez que 504 00:23:20,280 --> 00:23:22,020 volver ao web. 505 00:23:22,020 --> 00:23:24,390 >> Facebook, así que non é que mira aquel selo de man e 506 00:23:24,390 --> 00:23:26,850 din, ah, 123456789. 507 00:23:26,850 --> 00:23:30,260 Non sei, a primeira vista que esta é David Malan, en Cambridge, 508 00:23:30,260 --> 00:23:34,690 Massachusetts, pero poden comprobar o seu base de datos e dicir, oh, a persoa 509 00:23:34,690 --> 00:23:39,930 en cuxo equipo plantas 123456789 é David Malan de Cambridge, 510 00:23:39,930 --> 00:23:40,440 Massachusetts. 511 00:23:40,440 --> 00:23:46,000 Imos amosar que o usuario, a continuación, o seu perfil páxina ou do seu Feed de noticias. 512 00:23:46,000 --> 00:23:49,660 >> Pero hai un problema aquí se É así que a web de feito funciona. 513 00:23:49,660 --> 00:23:51,390 Imos dar un ollo a un exemplo rápido. 514 00:23:51,390 --> 00:23:55,190 Imos realmente ir dicir facebook.com. 515 00:23:55,190 --> 00:23:58,130 Pero antes de que puidésemos ir máis alá, imos me ir adiante e abrir Chrome 516 00:23:58,130 --> 00:23:59,790 Inspector aquí. 517 00:23:59,790 --> 00:24:01,140 Déixeme mirar a pestana de rede. 518 00:24:01,140 --> 00:24:06,020 E agora imos adiante e escribe en https://facebook.com. 519 00:24:06,020 --> 00:24:09,410 E eu estou facendo isto para que nós non vemos todas estas redireccións e desperdicios 520 00:24:09,410 --> 00:24:10,660 tempo mirando a través delas. 521 00:24:10,660 --> 00:24:12,690 Déixeme presione Intro. 522 00:24:12,690 --> 00:24:13,130 >> Todo ben. 523 00:24:13,130 --> 00:24:14,580 Vemos unha morea de peticións. 524 00:24:14,580 --> 00:24:15,640 Chega Facebook. 525 00:24:15,640 --> 00:24:16,930 Hai unha morea de arquivos. 526 00:24:16,930 --> 00:24:19,290 E aquí, pola miña mención de latencia a última vez, que é 527 00:24:19,290 --> 00:24:21,240 unha gran cantidade de solicitudes HTTP. 528 00:24:21,240 --> 00:24:23,700 Pero o primeiro é, probablemente, o máis interesante. 529 00:24:23,700 --> 00:24:26,420 >> Entón, imos rodar aquí, e Vou aumentar o zoom en un segundo. 530 00:24:26,420 --> 00:24:29,090 Esta vai ser unha especie de unha desorde, pero imos ver. 531 00:24:29,090 --> 00:24:31,660 Facebook está nos enviando un todo morea de cousas. 532 00:24:31,660 --> 00:24:33,490 >> Pero ei, interesante. 533 00:24:33,490 --> 00:24:37,880 Están plantando non un, senón catro selos man en man aquí. 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 E hai algunhas características aquí. 536 00:24:44,030 --> 00:24:46,170 Todos eles mencionar algúns tipo de validez. 537 00:24:46,170 --> 00:24:50,090 E parece que Facebook está esperando Recordarme ata 2015. 538 00:24:50,090 --> 00:24:53,670 Entón, iso é, presuntamente, o tempo en que Debo saír ou simplemente 539 00:24:53,670 --> 00:24:55,710 asumen automaticamente que eu son non volver. 540 00:24:55,710 --> 00:24:57,840 Entón, iso é realmente un decente cantidade de tempo. 541 00:24:57,840 --> 00:24:59,170 >> E hai algunha outra cousas a ocorrer aquí. 542 00:24:59,170 --> 00:25:03,036 A cookie semella forzosamente excluídos, dicindo que expirou en 1970 543 00:25:03,036 --> 00:25:04,460 antes de galletas existiu. 544 00:25:04,460 --> 00:25:06,510 Así, o navegador é só ir asumir OK, iso é como 545 00:25:06,510 --> 00:25:07,910 lavado das mans selo. 546 00:25:07,910 --> 00:25:11,240 >> Pero agora, cando o meu navegador fai unha solicitude posterior - 547 00:25:11,240 --> 00:25:14,340 déixeme ir adiante e facelo de novo e volver cargar. 548 00:25:14,340 --> 00:25:18,170 Agora, deixe-me ir ao seu top solicitude e baixar 549 00:25:18,170 --> 00:25:20,760 aquí, as cabeceiras da petición. 550 00:25:20,760 --> 00:25:21,390 Teña en conta isto. 551 00:25:21,390 --> 00:25:25,280 Entón agora eu non estou so cabeceiras de resposta, de notar que di cabeceiras de solicitude. 552 00:25:25,280 --> 00:25:29,220 E entender que o meu navegador, como parte a súa solicitude tras recarga bater ten 553 00:25:29,220 --> 00:25:32,780 enviado polo menos o seguinte información. 554 00:25:32,780 --> 00:25:34,670 Non set-cookie, pero cookie. 555 00:25:34,670 --> 00:25:38,750 Polo tanto, esta é a liña, a cabeceira HTTP para dicir, onde o meu navegador é unha especie 556 00:25:38,750 --> 00:25:43,340 de sen que eu soubese presentando miña man para inspección de Facebook. 557 00:25:43,340 --> 00:25:46,020 >> Entón, eses cookies poden ser usar entón para que? 558 00:25:46,020 --> 00:25:49,420 Para lembrar de quen é vostede, ou lembrar de como cantas veces xa estivo alí, ou 559 00:25:49,420 --> 00:25:50,280 realmente nada. 560 00:25:50,280 --> 00:25:52,742 >> Entón aquí está counter.php. 561 00:25:52,742 --> 00:25:53,780 E déixeme ampliar a fonte. 562 00:25:53,780 --> 00:25:58,380 E cada vez que eu volva a esta páxina, teña en conta é recordar as veces 563 00:25:58,380 --> 00:25:59,250 Eu estiven alí. 564 00:25:59,250 --> 00:26:00,570 Ben, iso non é tan impresionante. 565 00:26:00,570 --> 00:26:03,140 Nós só pechar esta guía, e agora imos voltar 566 00:26:03,140 --> 00:26:07,860 http://localhost/counter.php. 567 00:26:07,860 --> 00:26:08,970 >> Oh, iso é interesante. 568 00:26:08,970 --> 00:26:10,960 El aínda se lembraba, aínda aínda que eu pechei a guía. 569 00:26:10,960 --> 00:26:14,010 E, francamente, se eu pechar o navegador, se implantado no camiño correcto, eu 570 00:26:14,010 --> 00:26:18,950 podería aínda lembrar que este usuario é que el ou ela era a primeira vez, e 571 00:26:18,950 --> 00:26:22,840 só unha vez eu vou ao menú de Chrome, que aquí está aquí, e ir a 572 00:26:22,840 --> 00:26:25,990 Histórico e prema en Borrar datos de navegación, Como algúns de vostedes poden ter no 573 00:26:25,990 --> 00:26:33,050 pasado, só entón os cookies realmente a súa eliminación na web 574 00:26:33,050 --> 00:26:33,970 desenvolvemento. 575 00:26:33,970 --> 00:26:35,340 >> Entón, se nós imos - 576 00:26:35,340 --> 00:26:37,080 Imos pechar-se gedit aquí. 577 00:26:37,080 --> 00:26:38,910 E se somos agora a este ficheiro. 578 00:26:38,910 --> 00:26:44,210 Déixeme ir ao noso vhosts / localhost / public, e deixe-me facer 579 00:26:44,210 --> 00:26:46,340 counter.php. 580 00:26:46,340 --> 00:26:48,350 Nótese que esta é unha fermosa programa sinxelo. 581 00:26:48,350 --> 00:26:50,250 É un sitio ben simple. 582 00:26:50,250 --> 00:26:51,770 >> Así, a parte superior do arquivo é só a comentarios. 583 00:26:51,770 --> 00:26:54,930 Pero aquí está unha nova liña que pode xa visto en p-set sete, 584 00:26:54,930 --> 00:26:56,000 session_start (). 585 00:26:56,000 --> 00:27:00,380 Esta é unha liña de código PHP que esencialmente informa ao servidor web, facer 586 00:27:00,380 --> 00:27:03,400 Asegúrese de carimbam as mans e facer Asegúrese de comprobar selos manuais. 587 00:27:03,400 --> 00:27:06,810 Isto é todo o que a liña fai, e fai todo este proceso para nós. 588 00:27:06,810 --> 00:27:09,510 Logo entender que eu só teño dúas filiais aquí. 589 00:27:09,510 --> 00:27:14,150 O contador de clave neste variable global especial chamada 590 00:27:14,150 --> 00:27:18,010 $ _SESSION Está axustado - noutras palabras, se hai algún valor alí - 591 00:27:18,010 --> 00:27:22,440 imos obtelo e almacena-lo nun lugar de variable chamada $ contador. 592 00:27:22,440 --> 00:27:27,000 Senón, imos asignar $ contador o valor por defecto de 0. 593 00:27:27,000 --> 00:27:30,320 >> Aquí está un aspecto de PHP que se tanto unha bendición e unha maldición. 594 00:27:30,320 --> 00:27:32,080 PHP é un pouco desleixado. 595 00:27:32,080 --> 00:27:35,160 Así, mentres en C, o que o marco do contador foron 596 00:27:35,160 --> 00:27:36,725 aquí ou aquí? 597 00:27:36,725 --> 00:27:39,270 598 00:27:39,270 --> 00:27:41,690 >> Sería confinado a esas claves. 599 00:27:41,690 --> 00:27:42,090 Difícil de adiviñar o que? 600 00:27:42,090 --> 00:27:46,920 En PHP, hai mesmo fóra dos claves, aquí, e aquí, 601 00:27:46,920 --> 00:27:49,120 e aquí, e aquí, e mesmo a continuación. 602 00:27:49,120 --> 00:27:52,400 Entón eu digo que é unha bendición, no sentido de que non ten que pensar como 603 00:27:52,400 --> 00:27:54,070 duro como fixemos semanas. 604 00:27:54,070 --> 00:27:56,880 Pero é tamén un pouco de unha maldición en que non importa onde usar unha variable en 605 00:27:56,880 --> 00:28:00,020 PHP, polo menos nun programa como este, é globalmente accesible para 606 00:28:00,020 --> 00:28:01,170 mellor ou para peor. 607 00:28:01,170 --> 00:28:06,130 Así que ten que ter presente agora que súas variables non pode ser indefinido. 608 00:28:06,130 --> 00:28:07,640 Pode ter definido los noutro lugar. 609 00:28:07,640 --> 00:28:09,460 >> Pero que é o que eu vou facer en última instancia? 610 00:28:09,460 --> 00:28:13,160 Eu estou indo para almacenar dentro dese mundial variable como un valor de 611 00:28:13,160 --> 00:28:17,060 contador clave resultado facendo contra máis 1. 612 00:28:17,060 --> 00:28:18,910 Polo tanto, esta é só a aritmética que fai o 613 00:28:18,910 --> 00:28:20,590 incrementação do devandito contador. 614 00:28:20,590 --> 00:28:24,850 E o feito de que eu estou almacenando que valor de volta aquí é o medio para 615 00:28:24,850 --> 00:28:29,970 esencialmente, actualizar a base de datos para 123456789 usuario lembrar que houbo 616 00:28:29,970 --> 00:28:31,010 aquí dúas veces. 617 00:28:31,010 --> 00:28:33,780 E cando eu facelo de novo a próxima vez que actualizar a páxina, que vai comprobar 618 00:28:33,780 --> 00:28:36,710 miña man selo e dicir: ah, 123456789 usuario ten agora 619 00:28:36,710 --> 00:28:38,410 Estiven aquí tres veces. 620 00:28:38,410 --> 00:28:43,390 >> E así o PHP e linguaxes semellantes están a facer para nós é que están imaxinando 621 00:28:43,390 --> 00:28:47,720 como e onde e por canto tempo para gardar os valores neste especial 622 00:28:47,720 --> 00:28:48,830 superglobal. 623 00:28:48,830 --> 00:28:52,750 E este superglobal a próxima vez que eu visite a páxina é unha especie de pase de maxia 624 00:28:52,750 --> 00:28:57,440 condición poboada, chea de valores que estaban alí a última vez que visitou, 625 00:28:57,440 --> 00:29:02,310 se iso era un segundo atrás, unha semana atrás, ou en 2013 e agora estamos a falar 626 00:29:02,310 --> 00:29:03,790 sobre 2015. 627 00:29:03,790 --> 00:29:07,600 PHP e coidar do servidor web de todo isto para ti. 628 00:29:07,600 --> 00:29:08,850 >> Audiencia: [inaudível]. 629 00:29:08,850 --> 00:29:11,900 630 00:29:11,900 --> 00:29:15,760 >> DAVID Malan: Variables en PHP son esencialmente sempre mundial a menos que 631 00:29:15,760 --> 00:29:18,400 declaralo las dentro dunha función, e logo, son lugares para 632 00:29:18,400 --> 00:29:19,420 só a función. 633 00:29:19,420 --> 00:29:22,300 Pero por que eu non teño escrito calquera funcións, eles agora están efectivamente 634 00:29:22,300 --> 00:29:25,090 mundial ao longo de todo o meu arquivo aquí. 635 00:29:25,090 --> 00:29:26,040 >> Audiencia: Existe un xeito para tornalos local? 636 00:29:26,040 --> 00:29:28,470 >> DAVID Malan: Hai algunha forma a tornalos local? 637 00:29:28,470 --> 00:29:30,680 Só por envolve-los en funcións. 638 00:29:30,680 --> 00:29:32,790 Que na última versión do PHP, pode facelo con 639 00:29:32,790 --> 00:29:34,130 unha función anónima. 640 00:29:34,130 --> 00:29:35,930 Pero máis sobre iso no contexto JavaScript. 641 00:29:35,930 --> 00:29:37,260 Pero a resposta é non. 642 00:29:37,260 --> 00:29:40,888 A resposta máis longa é si. 643 00:29:40,888 --> 00:29:42,380 Niza. 644 00:29:42,380 --> 00:29:43,380 Boa pregunta quiz. 645 00:29:43,380 --> 00:29:43,930 Todo ben. 646 00:29:43,930 --> 00:29:47,760 >> Entón, por fin, a páxina en si é realmente moi simple. 647 00:29:47,760 --> 00:29:51,470 Teña en conta que unha vez que saír do modo PHP, recordo que todo este material para abaixo 648 00:29:51,470 --> 00:29:53,700 abaixo está indo só para cuspir fóra prima para o web. 649 00:29:53,700 --> 00:29:57,050 O que é bo, porque quero enviar o usuario un pouco de HTML, pero quero 650 00:29:57,050 --> 00:29:59,140 para actualizar dinamicamente que HTML. 651 00:29:59,140 --> 00:30:03,930 E un xeito que podo facer isto é para clasificar de caer moi rapidamente de volta para PHP 652 00:30:03,930 --> 00:30:07,730 xeito, o uso do soporte aberto punto de interrogación signo igual, e, a continuación, presentar o valor 653 00:30:07,730 --> 00:30:08,650 do contador. 654 00:30:08,650 --> 00:30:12,360 >> Ou se isto parece un pouco enigmático, este signo igual é en realidade só algúns 655 00:30:12,360 --> 00:30:16,190 azucre sintático para este printf ($ contador). 656 00:30:16,190 --> 00:30:19,160 Pero, francamente, iso é só un pouco feo e un pouco aburrido de escribir. 657 00:30:19,160 --> 00:30:23,660 Entón PHP moi ben ofrece este recurso onde pode só dicir que máis 658 00:30:23,660 --> 00:30:25,450 brevemente, do mesmo xeito. 659 00:30:25,450 --> 00:30:26,940 >> Entón, o que está pasando por baixo o capó? 660 00:30:26,940 --> 00:30:31,210 Imos axiña ollar para a rede guía aquí para counter.php. 661 00:30:31,210 --> 00:30:35,090 E deixe-me ir adiante e primeiro imos limpar as cookies. 662 00:30:35,090 --> 00:30:38,670 Borrar datos de navegación do Permitir sempre o inicio do tempo. 663 00:30:38,670 --> 00:30:39,680 Agora imos voltar para aquí. 664 00:30:39,680 --> 00:30:41,340 Agora imos volver cargar a páxina. 665 00:30:41,340 --> 00:30:42,170 E eu estou de volta a cero. 666 00:30:42,170 --> 00:30:44,810 Porque o meu selo man foi lavado, Agora comeza un novo cookie. 667 00:30:44,810 --> 00:30:48,780 >> En realidade, se eu ollar para a guía de rede e ollar para cabeceiras de resposta, previo 668 00:30:48,780 --> 00:30:51,960 que o dispositivo está a enviar-me unha cookie cuxo nome é un pouco 669 00:30:51,960 --> 00:30:55,820 arbitrariamente, pero o tipo de razoablemente, PHPSESSID. 670 00:30:55,820 --> 00:30:58,440 E iso está me mandando que realmente número aleatorio grande. 671 00:30:58,440 --> 00:30:59,440 Non é un bo número. 672 00:30:59,440 --> 00:31:00,390 Non é así hexadecimal. 673 00:31:00,390 --> 00:31:03,600 É unha especie de secuencia alfanumérica, pero probablemente é aleatoria. 674 00:31:03,600 --> 00:31:06,830 E ese é o selo man para a falar que eu estou me referindo. 675 00:31:06,830 --> 00:31:11,960 >> Mentres tanto, se eu premer recarga e, a continuación, mirar para esta segunda liña para a miña segunda 676 00:31:11,960 --> 00:31:17,600 solicitude, aviso agora que a miña petición cabeceiras inclúen PHPSESSID iguala esta, 677 00:31:17,600 --> 00:31:19,390 non set-biscoito, pero só cookie. 678 00:31:19,390 --> 00:31:22,950 E iso é a presentación do meu navegador do meu selo man. 679 00:31:22,950 --> 00:31:28,820 >> Entón, agora como un teaser, e nós imos falar máis sobre iso nunha semana ou así, pero 680 00:31:28,820 --> 00:31:31,590 de que xeito iso fai vostede vulnerable, a súa conta de Facebook 681 00:31:31,590 --> 00:31:34,137 vulnerables, e outros, tales contas vulnerable? 682 00:31:34,137 --> 00:31:35,510 >> Audiencia: Se alguén ten o seu cookie. 683 00:31:35,510 --> 00:31:36,750 >> DAVID Malan: Si, se alguén ten o seu cookie. 684 00:31:36,750 --> 00:31:39,920 Quero dicir, en realidade, moi parecido con algúns de vós podería tentar a como un club ou un 685 00:31:39,920 --> 00:31:44,030 parque de atraccións, se tentar algo como este para copiar o selo, aínda que 686 00:31:44,030 --> 00:31:47,560 atrás na man doutra persoa, e, a continuación, el ou ela presenta como 687 00:31:47,560 --> 00:31:53,250 conta propia, se realmente se parece idéntico, 123456789, entón a tea 688 00:31:53,250 --> 00:31:57,980 servidor aparentemente está indo só para Confiamos que ese usuario é vostede. 689 00:31:57,980 --> 00:32:01,450 >> E iso é realmente un dereito fundamental ameaza a calquera momento usa cookies 690 00:32:01,450 --> 00:32:05,420 porque se alguén só satiriza así falar o seu cookie, descobre o que el 691 00:32:05,420 --> 00:32:08,660 é, sexa por realmente copialo ao ollar para o seu ordenador 692 00:32:08,660 --> 00:32:09,890 e sendo así, Aceptar. 693 00:32:09,890 --> 00:32:14,520 Bolinha de David é JJ3JIK e así por diante, e logo, son intelixentes abondo para saber 694 00:32:14,520 --> 00:32:18,080 como especie de enviar manualmente que biscoito desde unha ou dun navegador 695 00:32:18,080 --> 00:32:22,350 programa eles escriben, eles poderían totalmente entrar nun sitio web que. 696 00:32:22,350 --> 00:32:28,560 Non é tan difícil de finxir ser outra persoa, a menos que revisitar p-set 697 00:32:28,560 --> 00:32:30,790 dous, que introduciu o que? 698 00:32:30,790 --> 00:32:32,065 >> Audiencia: Criptografía. 699 00:32:32,065 --> 00:32:33,860 >> DAVID Malan: Un pouco bits de cifrado. 700 00:32:33,860 --> 00:32:36,550 Criptografía simple, polo menos en edición estándar, pero Crypto 701 00:32:36,550 --> 00:32:36,870 con todo. 702 00:32:36,870 --> 00:32:37,410 menos. 703 00:32:37,410 --> 00:32:41,440 Entón non é que se cifrar todo eses cabeceiras usando algo que 704 00:32:41,440 --> 00:32:48,770 pode agora obter máis familiarmente como SSL, Secure Socket Layer, ou https:// URLs, 705 00:32:48,770 --> 00:32:51,890 logo, todas esas cousas que fomos mirando realmente están cifrados, 706 00:32:51,890 --> 00:32:54,800 o que significa que é como se non pode ler o selo man. 707 00:32:54,800 --> 00:32:59,350 Só facebook.com pode, ou google.com, ou, neste caso, o aparello pode 708 00:32:59,350 --> 00:33:00,550 ler ese selo man. 709 00:33:00,550 --> 00:33:04,020 >> Traxicamente, con todo, e unha vez máis, este é moi apropiado co material NSA 710 00:33:04,020 --> 00:33:06,410 de tarde, aínda SSL é quebrável. 711 00:33:06,410 --> 00:33:09,850 E iso realmente non é tan difícil incluso romper o cifrado. 712 00:33:09,850 --> 00:33:12,040 Non tanto por romper o cifrado, pero enganando o 713 00:33:12,040 --> 00:33:15,720 navegador en descifrar os datos prematuramente. 714 00:33:15,720 --> 00:33:17,880 Pero, de novo, nós imos xogar contigo que en pouco tempo. 715 00:33:17,880 --> 00:33:21,242 Polo de agora, só ter medo. 716 00:33:21,242 --> 00:33:23,070 É traxicamente tipo de verdade. 717 00:33:23,070 --> 00:33:23,760 >> Todo ben. 718 00:33:23,760 --> 00:33:27,910 Entón, onde é que isto agora nos deixa? 719 00:33:27,910 --> 00:33:29,010 Ben, imos facelo. 720 00:33:29,010 --> 00:33:31,790 Imos adiante e dar unha rápida provocación antes de facer unha pausa. 721 00:33:31,790 --> 00:33:33,790 E eu creo que vai levar un pouco máis hoxe, pero imos mergullar 722 00:33:33,790 --> 00:33:37,850 algo novo e sexy, que será abrir o apetito a máis. 723 00:33:37,850 --> 00:33:38,950 Entón ese é o teaser. 724 00:33:38,950 --> 00:33:41,520 >> Entón, SQL, comezamos a falar de sempre tan brevemente última vez. 725 00:33:41,520 --> 00:33:44,670 Realmente vai ensuciar as mans con algúns deles en p-conxunto de sete. 726 00:33:44,670 --> 00:33:46,480 E, en termos leigos, o que fai SQL - 727 00:33:46,480 --> 00:33:47,110 S-Q-L - 728 00:33:47,110 --> 00:33:49,850 facer por ti? 729 00:33:49,850 --> 00:33:50,310 ¿Que é iso? 730 00:33:50,310 --> 00:33:51,546 Si 731 00:33:51,546 --> 00:33:53,240 >> Audiencia: Imos acceder os datos. 732 00:33:53,240 --> 00:33:53,360 >> DAVID Malan: Yeah. 733 00:33:53,360 --> 00:33:55,120 El deixa acceder a datos nunha base de datos. 734 00:33:55,120 --> 00:33:56,710 Structured Query Language. 735 00:33:56,710 --> 00:33:59,890 E isto é, esencialmente, un linguaxe de programación. 736 00:33:59,890 --> 00:34:03,400 Existen recursos de que Non imos mesmo utilizar en clase. 737 00:34:03,400 --> 00:34:04,710 Pero pode efectivamente definir funcións. 738 00:34:04,710 --> 00:34:06,870 Son chamados almacenados procedementos en SQL. 739 00:34:06,870 --> 00:34:09,860 Pero nós imos mantelo moi sinxelo e só usalo para algunhas operacións básicas 740 00:34:09,860 --> 00:34:14,320 como a selección de datos, entrada de datos, actualización de datos e exclusión de datos. 741 00:34:14,320 --> 00:34:17,400 >> E realmente pode pensar nunha base de datos, como unha base de datos SQL, como só 742 00:34:17,400 --> 00:34:18,800 sendo Microsoft Excel. 743 00:34:18,800 --> 00:34:21,989 Como o SQL se refire a un relacional base de datos, onde 744 00:34:21,989 --> 00:34:23,480 relación significa só mesas. 745 00:34:23,480 --> 00:34:24,739 As liñas e columnas. 746 00:34:24,739 --> 00:34:27,929 Entón, calquera cousa que pode pór nunha folla así ou Google Docs, 747 00:34:27,929 --> 00:34:32,460 pode pór nunha base de datos SQL declarando unha táboa. 748 00:34:32,460 --> 00:34:34,800 >> Agora, como o que realmente acceder esa información? 749 00:34:34,800 --> 00:34:38,239 Ben, con comandos ou consultas como esta. 750 00:34:38,239 --> 00:34:40,199 SELECT, INSERT, Update e Delete. 751 00:34:40,199 --> 00:34:44,489 E, na maior parte, estes son os só catro ingredientes que precisa para 752 00:34:44,489 --> 00:34:47,370 facer algo moi potente problema en establecer sete. 753 00:34:47,370 --> 00:34:49,940 >> Agora, de volta ao día, o que realmente interactuar con unha base de datos nunha 754 00:34:49,940 --> 00:34:52,730 fiestra de terminal branco e negro en unha ventá piscando así. 755 00:34:52,730 --> 00:34:56,370 E a base de datos que estamos executando o MySQL aparello chámase, que é 756 00:34:56,370 --> 00:34:58,560 motor de base de datos libre e de código aberto. 757 00:34:58,560 --> 00:35:02,240 Se Google e ler a Wikipedia artigo, vai saber que o nome é 758 00:35:02,240 --> 00:35:05,060 un pouco de transición para algúns versións de Linux. 759 00:35:05,060 --> 00:35:10,460 María base de datos é en realidade un garfo para falar de MySQL 760 00:35:10,460 --> 00:35:12,740 >> Para reducir a historia, a Oracle comprou a MySQL 761 00:35:12,740 --> 00:35:13,870 A Oracle é unha gran empresa. 762 00:35:13,870 --> 00:35:17,010 A xente ten medo de que sería non permanecer tan open source, 763 00:35:17,010 --> 00:35:20,930 entón que é só unha copia de MySQL que se aínda fonte libre, aínda en aberto, e 764 00:35:20,930 --> 00:35:23,550 instalado en Fedora Linux por defecto. 765 00:35:23,550 --> 00:35:26,130 >> Pero este é un tipo de dor no pescozo para familiarizarse coa 766 00:35:26,130 --> 00:35:27,310 base de datos dese xeito. 767 00:35:27,310 --> 00:35:30,560 Así, incluír no aparello CS50 unha ferramenta de código aberto gratuíto chamado 768 00:35:30,560 --> 00:35:31,700 phpMyAdmin. 769 00:35:31,700 --> 00:35:33,940 Só unha coincidencia que está escrito en PHP. 770 00:35:33,940 --> 00:35:36,450 Non hai ningunha base necesidade de PHP aquí. 771 00:35:36,450 --> 00:35:40,090 Pero esta é só unha ferramenta baseada na web que nós descargar de balde, instalado 772 00:35:40,090 --> 00:35:43,850 o aparello, o que nos permite ter unha interface gráfica de usuario co que 773 00:35:43,850 --> 00:35:48,610 para explorar sete base de datos do p-set con que a creación de novas bases de datos, 774 00:35:48,610 --> 00:35:51,980 dicir para o seu propio proxecto final se tivese gusta, e, finalmente, crear 775 00:35:51,980 --> 00:35:55,900 sitios dinámicos como CS50 Finanzas que lle permiten consultar datos e 776 00:35:55,900 --> 00:35:58,140 actualizar os datos dinamicamente. 777 00:35:58,140 --> 00:36:01,420 >> Non vai ter que usar só un ficheiro de texto simple ou CSV. 778 00:36:01,420 --> 00:36:05,950 Pode realmente usar unha base de datos intelixente programa para que poida executar máis 779 00:36:05,950 --> 00:36:10,240 consultas sofisticadas que ler por todo de forma lineal. 780 00:36:10,240 --> 00:36:14,150 >> Así, por exemplo, é o que nós damos sae do cadro de p-set sete. 781 00:36:14,150 --> 00:36:18,280 Esta é unha táboa con polo menos aparentemente tres columnas, unha das cales é 782 00:36:18,280 --> 00:36:21,450 nome de usuario, un dos cales é de hash e outro dos cales é ID. 783 00:36:21,450 --> 00:36:26,200 >> Pero o interesante, e só para destrinchar un pensamento aquí, nome de usuario 784 00:36:26,200 --> 00:36:29,270 é, presumiblemente, xa único, non? 785 00:36:29,270 --> 00:36:31,190 É dicir, máis calquera sitio, se ten un nome de usuario, non 786 00:36:31,190 --> 00:36:32,370 non pode haber dous Césares. 787 00:36:32,370 --> 00:36:33,440 Non pode haber dous Malans. 788 00:36:33,440 --> 00:36:34,950 Non pode haber dous jharvards. 789 00:36:34,950 --> 00:36:35,600 A súa única. 790 00:36:35,600 --> 00:36:38,610 Se non, eles non saben o que jharvard que realmente é. 791 00:36:38,610 --> 00:36:42,710 Entón, o que pode ser a motivación para tamén Tendo unha terceira columna da esquerda 792 00:36:42,710 --> 00:36:46,970 alí chamada ID, o que parece un número que é semellante única? 793 00:36:46,970 --> 00:36:51,300 Parece un pouco redundante me a primeira vista. 794 00:36:51,300 --> 00:36:54,910 Por que pode ser atractivo para ter non só nomes de usuarios únicos, 795 00:36:54,910 --> 00:36:56,837 pero tamén números exclusivos? 796 00:36:56,837 --> 00:36:59,460 >> Audiencia: Eles poderían o mesmo código. 797 00:36:59,460 --> 00:37:01,720 >> DAVID Malan: As persoas poden ter o mesmo contrasinal, con certeza. 798 00:37:01,720 --> 00:37:03,900 Isto pode absolutamente nada. 799 00:37:03,900 --> 00:37:08,270 Pero se eles teñen ese nome de usuario único, I diría que iso non fai moito 800 00:37:08,270 --> 00:37:11,630 importa, porque se escribir o seu nome de usuario, eu só teño comprobar a súa 801 00:37:11,630 --> 00:37:15,060 contrasinal, os mesmos hash. 802 00:37:15,060 --> 00:37:15,970 Por que outra razón? 803 00:37:15,970 --> 00:37:17,950 >> Audiencia: procura máis rápida. 804 00:37:17,950 --> 00:37:18,680 >> DAVID Malan: procura máis rápida. 805 00:37:18,680 --> 00:37:19,548 Por que? 806 00:37:19,548 --> 00:37:21,460 >> Audiencia: ID é só un. 807 00:37:21,460 --> 00:37:24,040 >> DAVID Malan: ID é só un personaxe, ou para ser máis exacto, é un número, 808 00:37:24,040 --> 00:37:26,910 polo que pode ser 32 bits ou algo así. 809 00:37:26,910 --> 00:37:30,270 Tendo en conta que o nome de usuario, ao parecer Jason Hirschhorn está alí enriba é unha especie de 810 00:37:30,270 --> 00:37:33,900 ridiculamente longo, e que vai me levar moito máis tempo para cadea 811 00:37:33,900 --> 00:37:40,910 comparar H-I-R-S-C-H-H-O-R-N, e quizais a / 0 ou algo así, a fin 812 00:37:40,910 --> 00:37:45,100 a mirar para arriba Jason, no canto de só dicindo que me dar o seu número de usuario dous. 813 00:37:45,100 --> 00:37:46,510 Isto é 32 bits. 814 00:37:46,510 --> 00:37:48,550 É a única que INT ten que comparar. 815 00:37:48,550 --> 00:37:52,150 E, de feito, é exactamente por iso que as bases de datos tenden a asignar IDs únicos para 816 00:37:52,150 --> 00:37:53,710 liñas neles. 817 00:37:53,710 --> 00:37:56,280 >> Agora o que os outros tipos de datos están aí ademais INT e, ao parecer, 818 00:37:56,280 --> 00:37:57,160 cordas como este? 819 00:37:57,160 --> 00:37:59,700 Pois ben, para ser máis axeitada, Bancos de datos SQL, como 820 00:37:59,700 --> 00:38:02,060 MySQL, teñen campos CHAR. 821 00:38:02,060 --> 00:38:05,320 E CHAR algo enganosa non é unha única CHAR. 822 00:38:05,320 --> 00:38:10,290 Un campo CHAR nunha base de datos MySQL é un ou máis caracteres, pero é un 823 00:38:10,290 --> 00:38:11,780 número fixo de caracteres. 824 00:38:11,780 --> 00:38:15,710 >> Así, por exemplo, se eu pasar por riba de phpMyAdmin como xa debería ter ou 825 00:38:15,710 --> 00:38:21,340 en breve unha serie de problemas de sete, e eu vou para o meu banco de datos, e só por diversión, 826 00:38:21,340 --> 00:38:25,700 imos crear unha nova táboa chamada probar con só dúas columnas. 827 00:38:25,700 --> 00:38:27,160 Vou prema en Ir 828 00:38:27,160 --> 00:38:30,070 E iso vai facer moi familiar, especialmente cando xogar 829 00:38:30,070 --> 00:38:31,130 ao redor do seu propio país. 830 00:38:31,130 --> 00:38:34,140 Aquí podo escribir ID para crear unha nova táboa do tipo INT. 831 00:38:34,140 --> 00:38:37,770 Pero aquí eu pode escribir o nome de usuario para recrear a táboa anterior. 832 00:38:37,770 --> 00:38:40,700 E noten que eu teño un grupo enteiro de tipos para escoller. 833 00:38:40,700 --> 00:38:43,610 >> E iso tamén é por iso que phpMyAdmin é unha especie de bo. 834 00:38:43,610 --> 00:38:46,770 É unha especie de auto-aprendizaxe, no que pode só unha especie de punto e prema, e 835 00:38:46,770 --> 00:38:50,730 mirar para menús suspendidos, e deducir que o que lle dá poderes SQL. 836 00:38:50,730 --> 00:38:54,090 >> E, de feito, se eu escoller CHAR, entón eu ten que especificar a lonxitude, ou como 837 00:38:54,090 --> 00:38:55,940 diversos valores, cantos chars. 838 00:38:55,940 --> 00:39:00,090 Valores moi comúns son cousas como 255, pero iso é un pouco longo. 839 00:39:00,090 --> 00:39:02,250 Comunmente é de oito a un nome de usuario. 840 00:39:02,250 --> 00:39:03,590 Pero iso é un pouco pequeno estes días. 841 00:39:03,590 --> 00:39:05,430 Polo tanto, esta é unha decisión de proxecto. 842 00:39:05,430 --> 00:39:08,630 É 8 caracteres como máximo, 32, 255, 1000? 843 00:39:08,630 --> 00:39:09,830 É realmente ata. 844 00:39:09,830 --> 00:39:12,350 Pero un campo CHAR é un número fixo. 845 00:39:12,350 --> 00:39:16,420 Polo tanto, escolla moi poucos e vostede é do tipo parafuso, se quere un nome de usuario máis grande. 846 00:39:16,420 --> 00:39:19,132 Escolla de máis e que se a desvantaxe? 847 00:39:19,132 --> 00:39:20,820 >> Audiencia: [inaudível]. 848 00:39:20,820 --> 00:39:21,620 >> DAVID Malan: É un desperdicio. 849 00:39:21,620 --> 00:39:24,835 Así como en C, se ten unha maior anaco de memoria que precisa, está 850 00:39:24,835 --> 00:39:27,190 só perdendo tempo e perdendo espazo. 851 00:39:27,190 --> 00:39:31,430 Así, como unha alternativa, existe Varchar, que resolve este problema 852 00:39:31,430 --> 00:39:36,390 Duración do tratamento e non como unha lonxitude fixa, pero como o lonxitude máxima, e usando un 853 00:39:36,390 --> 00:39:40,990 número variable de carácteres, que, a continuación, tende a usar só o número de chars como 854 00:39:40,990 --> 00:39:42,710 realmente precisa. 855 00:39:42,710 --> 00:39:43,670 Isto soa perfecto. 856 00:39:43,670 --> 00:39:45,640 >> Por que non se librar do Tipo de datos char, entón? 857 00:39:45,640 --> 00:39:48,500 O que podería ser a desvantaxe de usar VARCHARs, que soa 858 00:39:48,500 --> 00:39:51,644 como se fose unha fermosa vitoria? 859 00:39:51,644 --> 00:39:52,596 Si? 860 00:39:52,596 --> 00:39:53,846 >> Audiencia: [inaudível]. 861 00:39:53,846 --> 00:39:57,360 862 00:39:57,360 --> 00:39:57,790 >> DAVID Malan: OK, moi bo. 863 00:39:57,790 --> 00:40:01,101 Entón, se todos os seus datos é a mesma lonxitude, cal é a preocupación? 864 00:40:01,101 --> 00:40:05,250 >> Audiencia: Porque está perdendo datos, dicíndolles todo. 865 00:40:05,250 --> 00:40:09,060 >> DAVID Malan: Entón, se todos os seus datos é a mesma lonxitude, con todo, eu diría 866 00:40:09,060 --> 00:40:12,300 especificando que a lonxitude máxima en varchar non é diferente de 867 00:40:12,300 --> 00:40:16,070 especificando unha lonxitude fixa sobre si CHAR sabe que o número de antelación. 868 00:40:16,070 --> 00:40:19,500 Pero non é certo, e eu vou clasificar de extraer que a resposta á realidade 869 00:40:19,500 --> 00:40:22,610 que aínda hai un máximo, o que podería ser irritante, especialmente se 870 00:40:22,610 --> 00:40:25,920 atopar o nome dunha persoa que está excepcionalmente longo que non fixo 871 00:40:25,920 --> 00:40:26,860 prevista. 872 00:40:26,860 --> 00:40:31,420 E tamén é un pouco menos eficiente para realmente investigar sobre VARCHARs como 873 00:40:31,420 --> 00:40:35,620 oposición á procura chars, sobre para mesas longas que teñen lotes e 874 00:40:35,620 --> 00:40:36,510 grandes cantidades de datos. 875 00:40:36,510 --> 00:40:40,060 Polo tanto, aquí tamén, temática é de novo ningunha opción obvia. 876 00:40:40,060 --> 00:40:42,870 >> Entón, só para lle dar unha sensación de outro tipos de datos que poden ser do seu interese 877 00:40:42,870 --> 00:40:45,400 tanto para p-set sete ou o futuro, hai INT. 878 00:40:45,400 --> 00:40:47,270 Hai BIGINT, que é como long long. 879 00:40:47,270 --> 00:40:48,880 El tende a ser de 64 bits. 880 00:40:48,880 --> 00:40:51,640 Hai decimal, que podes ver na o conxunto de problemas, que é un tanto 881 00:40:51,640 --> 00:40:55,300 limpador resposta aos problemas que atopado con flotador e flotando 882 00:40:55,300 --> 00:40:55,980 imprecisión punto. 883 00:40:55,980 --> 00:40:57,390 E despois hai datetime. 884 00:40:57,390 --> 00:41:01,530 Hai, literalmente, un tipo de datos que ten a aparencia de un ano, un mes, un día, 885 00:41:01,530 --> 00:41:03,730 e unha hora, minuto e segundo. 886 00:41:03,730 --> 00:41:07,470 >> Pero bancos de datos SQL tamén teñen cousas que vou chamar índices. 887 00:41:07,470 --> 00:41:11,630 E un índice é algo que especificar ao crear a táboa de 888 00:41:11,630 --> 00:41:15,720 facer buscas e outras operacións máis eficiente. 889 00:41:15,720 --> 00:41:18,550 En concreto, hai algo chamado o índice primario que podería 890 00:41:18,550 --> 00:41:19,440 declarar como segue. 891 00:41:19,440 --> 00:41:22,330 >> Fixemos isto para vostede coa táboa de usuarios que che dar. 892 00:41:22,330 --> 00:41:26,160 Mais repare se eu fose recrear manualmente a táboa de usuarios aquí dando 893 00:41:26,160 --> 00:41:27,110 un nome de usuario. 894 00:41:27,110 --> 00:41:28,125 Eu xa indicado ID. 895 00:41:28,125 --> 00:41:29,330 Eu especifiquei INT. 896 00:41:29,330 --> 00:41:32,000 Eu especifiquei nome de usuario máximo de 32 caracteres. 897 00:41:32,000 --> 00:41:36,140 Pero se seguimos a desprazamento neste bastante ampla fiestra, teña en conta que hai unha 898 00:41:36,140 --> 00:41:38,260 morea doutras cousas que podo indicar. 899 00:41:38,260 --> 00:41:40,950 >> Un deles, podo especificar atributos como, vostede sabe o que, iso 900 00:41:40,950 --> 00:41:42,190 INT debe ser asinado. 901 00:41:42,190 --> 00:41:45,510 Non quero que os números negativos, entón imos facelo sen sinal. 902 00:41:45,510 --> 00:41:48,660 Nulo non é relevante aquí porque Eu quero que cada usuario 903 00:41:48,660 --> 00:41:49,640 teñen un número impar. 904 00:41:49,640 --> 00:41:50,830 Non quero que sexa nulo. 905 00:41:50,830 --> 00:41:52,330 >> Pero iso é interesante. 906 00:41:52,330 --> 00:41:57,780 Podo especificar que ID sexa o chave primaria desta base de datos, ou se 907 00:41:57,780 --> 00:42:00,620 texto único, ou é indexado, ou completo. 908 00:42:00,620 --> 00:42:05,630 Así, para fins de hoxe, a longa historia , Principal medio curto que este debe 909 00:42:05,630 --> 00:42:10,570 ser tanto conceptualmente e tecnicamente O campo que usan para excepcionalmente 910 00:42:10,570 --> 00:42:12,140 identificar os usuarios. 911 00:42:12,140 --> 00:42:16,140 >> Así, cando miramos para os usuarios, esta é unha especie dunha promesa de procura-los principalmente por 912 00:42:16,140 --> 00:42:17,370 que identificador único. 913 00:42:17,370 --> 00:42:21,930 E a base de datos pode garantir que, se ten un número de usuario 3, non pode 914 00:42:21,930 --> 00:42:25,400 introducir fisicamente outro usuario co mesmo número 3. 915 00:42:25,400 --> 00:42:28,380 A base de datos vai simplemente se negan para gardar os cambios. 916 00:42:28,380 --> 00:42:32,310 Que é unha cousa boa, porque pode protexer-se de si mesmo. eu 917 00:42:32,310 --> 00:42:34,270 >> Alternativamente, o nome de usuario. 918 00:42:34,270 --> 00:42:37,670 Así, a segunda liña, aviso, é o campo de nome de usuario. 919 00:42:37,670 --> 00:42:41,860 Así, a segunda liña aquí é nome de usuario, como fixemos na esquina esquerda alí. 920 00:42:41,860 --> 00:42:43,940 >> Entón, o que máis eu podería querer especificar? 921 00:42:43,940 --> 00:42:47,840 Eu non estou autorizado, de acordo co SQL, para especificar dúas chaves primarias. 922 00:42:47,840 --> 00:42:50,750 pode especificar unha chave de conxunto, onde ollar a ambos os campos, pero non poden 923 00:42:50,750 --> 00:42:52,260 ser individual claves primarias. 924 00:42:52,260 --> 00:42:54,750 Entón, iso é fóra de cuestión. 925 00:42:54,750 --> 00:42:56,040 Entón, o que eu podería querer escoller? 926 00:42:56,040 --> 00:42:59,710 >> Ben, unique é semellante en espírito a un chave primaria, onde se especifica este 927 00:42:59,710 --> 00:43:03,570 campo debe ser único, pero é non vai ser a única 928 00:43:03,570 --> 00:43:04,410 Eu uso o tempo. 929 00:43:04,410 --> 00:43:08,450 E nós non estamos indo a usar este todo o tempo para o que razón de novo? 930 00:43:08,450 --> 00:43:10,490 É máis lento, potencialmente, se é unha longa usuario. 931 00:43:10,490 --> 00:43:11,740 É só un desperdicio de tempo. 932 00:43:11,740 --> 00:43:16,140 >> Index, pola súa vez, especifica que se non vai ser único, pero gustaríame 933 00:43:16,140 --> 00:43:19,470 traballar a súa maxia debaixo do capo para facelo máis rápido para min 934 00:43:19,470 --> 00:43:21,420 buscar neste campo. 935 00:43:21,420 --> 00:43:23,320 Entón, iso probablemente non é relevante aquí. 936 00:43:23,320 --> 00:43:26,500 Para o nome de usuario, eu diría que UNIQUE é unha boa resposta. 937 00:43:26,500 --> 00:43:31,200 Pero supoñamos que fixemos os usuarios máis interesante que os nomes de usuario, 938 00:43:31,200 --> 00:43:32,430 hashes, e números de identificación. 939 00:43:32,430 --> 00:43:33,860 E se deu ás persoas nomes completos? 940 00:43:33,860 --> 00:43:37,700 E se nós lles deu enderezos e outros datos sobre eles? 941 00:43:37,700 --> 00:43:43,360 >> Ben, se especificar que unha columna nunha base de datos está indexado, isto significa que 942 00:43:43,360 --> 00:43:47,730 MySQL ou Oracle, ou calquera base de datos está a usar, debe traballar a súa maxia 943 00:43:47,730 --> 00:43:51,300 e utilizar algún tipo de datos fantasía estrutura como unha árbore, ou unha trie, ou un 944 00:43:51,300 --> 00:43:55,940 táboa hash, ou algo para garantir que cando lle buscar datos mediante 945 00:43:55,940 --> 00:43:58,150 seleccionar nese campo en particular - 946 00:43:58,150 --> 00:44:01,310 como eu amosar a todos que vive en Oxford Street. 947 00:44:01,310 --> 00:44:02,540 Unha consulta así. 948 00:44:02,540 --> 00:44:06,250 Se ten especificado de antemán que quere un índice en que campo, o 949 00:44:06,250 --> 00:44:09,050 investigacións serán moi, moito máis rápido. 950 00:44:09,050 --> 00:44:12,090 >> Se non especifica un índice, o mellor pode facer é unha procura linear se 951 00:44:12,090 --> 00:44:13,030 non está clasificada. 952 00:44:13,030 --> 00:44:16,220 Pero se se especifica Index, o intelixente persoas que fixeron a base de datos - 953 00:44:16,220 --> 00:44:19,340 persoas coma ti que agora coñece árbores e intentos e táboas de hash - 954 00:44:19,340 --> 00:44:23,220 vai construír automaticamente un tal de datos estrutura na memoria RAM para asegurarse de que 955 00:44:23,220 --> 00:44:26,050 estas investigacións son moito máis rápidos. 956 00:44:26,050 --> 00:44:29,660 >> Fulltext, con todo, é similar en espírito, pero permite que faga curinga 957 00:44:29,660 --> 00:44:35,480 investigacións, como eu amosar a todos que vive en rúas que comezan coa 958 00:44:35,480 --> 00:44:36,960 letra O, por calquera motivo. 959 00:44:36,960 --> 00:44:38,850 Pode facer buscas curinga así. 960 00:44:38,850 --> 00:44:45,880 Ou cousas máis fortes, como mostran me as que ten a palabra - 961 00:44:45,880 --> 00:44:49,400 me amosar a todos cuxo nome comeza cunha carta particular. 962 00:44:49,400 --> 00:44:51,880 Pode procurar por palabras clave deste xeito. 963 00:44:51,880 --> 00:44:52,630 Todo ben. 964 00:44:52,630 --> 00:44:55,760 >> Así, oportunidades de deseño hai potencial. 965 00:44:55,760 --> 00:44:57,740 Hai outros que eu vou acenar as mans no. 966 00:44:57,740 --> 00:45:00,530 Acontece que pode ter mecanismos de almacenamento diferentes. 967 00:45:00,530 --> 00:45:04,390 E iso é máis misterioso do que necesitamos seguramente para o problema de definir sete. 968 00:45:04,390 --> 00:45:06,920 Por defecto, o que vostedes están a usar algo chamado InnoDB. 969 00:45:06,920 --> 00:45:10,910 Verá mención a isto en algún lugar A interface do phpMyAdmin máis probable. 970 00:45:10,910 --> 00:45:14,130 Pero sei que hai outro proxecto decisións que son de potencia 971 00:45:14,130 --> 00:45:18,030 intereses veñen proxectos finais fai algo baseado na web. 972 00:45:18,030 --> 00:45:19,330 >> Pero imos facelo. 973 00:45:19,330 --> 00:45:23,130 Imos adiante e poñer isto no pantalla como un teaser para unha historia 974 00:45:23,130 --> 00:45:26,330 que inclúen ti, un compañeiro de cuarto, e un vaso de leite. 975 00:45:26,330 --> 00:45:28,240 Imos dar un dous minutos ou entón romper aquí. 976 00:45:28,240 --> 00:45:31,060 E se pode ir por aquí, imos chegar cara atrás, mirar un pouco máis en SQL, e 977 00:45:31,060 --> 00:45:35,160 logo un pouco de JavaScript con -P establecer oito presente. 978 00:45:35,160 --> 00:45:36,120 >> Todo ben. 979 00:45:36,120 --> 00:45:40,420 Entón, imos comezar a pensar sobre un caso canto que pode moi facilmente xurdir 980 00:45:40,420 --> 00:45:44,240 no contexto do uso de unha base de datos, ou francamente, mesmo a usar as cousas do mundo real 981 00:45:44,240 --> 00:45:46,280 como caixas electrónicos para conseguir diñeiro. 982 00:45:46,280 --> 00:45:47,640 Entón aquí está un frigorífico. 983 00:45:47,640 --> 00:45:50,040 Supoña que vostede ten un tamén en seu dormitorio ou a súa casa. 984 00:45:50,040 --> 00:45:54,990 E ten un compañeiro de cuarto, e ambos realmente lle gusta de leite, por exemplo. 985 00:45:54,990 --> 00:45:57,210 >> Entón chega na casa da clase un día. 986 00:45:57,210 --> 00:45:58,490 El ou ela aínda non volveu. 987 00:45:58,490 --> 00:45:59,180 Se abre a neveira. 988 00:45:59,180 --> 00:46:00,870 Realmente quere un gran vaso de leite. 989 00:46:00,870 --> 00:46:01,820 Non hai leite. 990 00:46:01,820 --> 00:46:02,920 Entón, o que fai? 991 00:46:02,920 --> 00:46:03,840 Vostede pecha da neveira. 992 00:46:03,840 --> 00:46:04,670 Vostede agarra as súas claves. 993 00:46:04,670 --> 00:46:05,930 Sae á praza. 994 00:46:05,930 --> 00:46:09,240 E comeza na cola CVS aqueles cousas auto Checkout, que sempre 995 00:46:09,240 --> 00:46:11,180 levar máis tempo do que realmente ter caixas. 996 00:46:11,180 --> 00:46:11,820 De calquera forma. 997 00:46:11,820 --> 00:46:15,490 >> Entón, mentres tanto, dot dot dot, o seu compañeiro de cuarto chega na casa e el ou ela 998 00:46:15,490 --> 00:46:17,440 do mesmo xeito ten un desexo ardente un pouco de leite. 999 00:46:17,440 --> 00:46:20,380 Así, el ou ela abre a neveira, mira para dentro, e Oh, droga. 1000 00:46:20,380 --> 00:46:21,160 Non hai leite. 1001 00:46:21,160 --> 00:46:24,750 Así, el ou ela vai para fóra, pasa a ir a outro CVS, que era só un 1002 00:46:24,750 --> 00:46:27,900 bloquear afastado por algún motivo, e el ou ela está na cola para mercar un pouco de leite. 1003 00:46:27,900 --> 00:46:30,480 >> Mentres tanto, chega a casa, el ou ela chega na casa, eo que facer 1004 00:46:30,480 --> 00:46:31,980 finalmente ten? 1005 00:46:31,980 --> 00:46:33,080 Dúas veces máis leite. 1006 00:46:33,080 --> 00:46:34,620 Pero o que realmente non me gusta leite moito. 1007 00:46:34,620 --> 00:46:37,300 Entón agora ten tanto leite que agora un deles só vai aceda 1008 00:46:37,300 --> 00:46:37,820 eventualmente. 1009 00:46:37,820 --> 00:46:39,370 Polo tanto, este é un problema moi malo. 1010 00:46:39,370 --> 00:46:39,900 Non? 1011 00:46:39,900 --> 00:46:41,990 >> Entón o que pasou? 1012 00:46:41,990 --> 00:46:44,810 Así, fundamentalmente, este é o tipo dun exemplo ridículo. 1013 00:46:44,810 --> 00:46:48,580 Pero debaixo do capó, o que tivemos pasar aquí é tanto de ti verificados 1014 00:46:48,580 --> 00:46:52,390 o estado dalgún anaco de memoria, a neveira. 1015 00:46:52,390 --> 00:46:54,420 Ambos vostede comprobar o estado dalgunha variable. 1016 00:46:54,420 --> 00:46:57,360 Vostedes dous tiraron unha conclusión que, a continuación, executado. 1017 00:46:57,360 --> 00:47:01,420 Pero, desgraciadamente, mentres que o seu compañeiro de cuarto estaba na tenda, o estado dese 1018 00:47:01,420 --> 00:47:05,670 variable cambiou, el ou ela volveu e agora quere cambiar o estado, pero 1019 00:47:05,670 --> 00:47:07,480 el xa foi cambiado sobre el ou ela. 1020 00:47:07,480 --> 00:47:11,120 E, por suposto, el ou ela non tería ir á tenda se eles sabían 1021 00:47:11,120 --> 00:47:13,010 que xa estaban de camiño. 1022 00:47:13,010 --> 00:47:16,430 >> Así, no mundo real, como pode evitar este problema, supoñendo que ten 1023 00:47:16,430 --> 00:47:18,940 unha neveira, ten un compañeiro de cuarto, e realmente gusta de leite? 1024 00:47:18,940 --> 00:47:19,760 >> Audiencia: Comunicación. 1025 00:47:19,760 --> 00:47:20,580 >> DAVID Malan: Comunicación. 1026 00:47:20,580 --> 00:47:21,160 Aceptar. 1027 00:47:21,160 --> 00:47:22,500 Pero como é que pode comunicarse? 1028 00:47:22,500 --> 00:47:23,990 >> Audiencia: Deixe un recado. 1029 00:47:23,990 --> 00:47:25,480 >> DAVID Malan: Deixe unha nota, non? 1030 00:47:25,480 --> 00:47:28,025 Sempre deixar unha nota, por os fans da serie. 1031 00:47:28,025 --> 00:47:31,580 Todo ben, entón sempre deixar unha nota, ou poñer verdadeiramente como un cadeado ou algo 1032 00:47:31,580 --> 00:47:35,440 na neveira que mantén o seu compañeiro de inspeccionar o estado de 1033 00:47:35,440 --> 00:47:36,540 esa variable. 1034 00:47:36,540 --> 00:47:40,800 >> Agora, por que isto pode ser pertinente para conxunto de problemas de sete, ou ATMs. 1035 00:47:40,800 --> 00:47:46,780 Ben, imaxina un mundo en un cadro electrónico, onde pode ser capaz de ir ata un cadro electrónico 1036 00:47:46,780 --> 00:47:48,920 máquina aquí e outro ATM aquí. 1037 00:47:48,920 --> 00:47:50,680 E isto ocorre con bastante frecuencia. 1038 00:47:50,680 --> 00:47:54,150 E supoñamos que tiña dúas tarxetas ATM, que se pode obter. 1039 00:47:54,150 --> 00:47:57,420 E entra en ambas as máquinas efectivamente á vez, espero que 1040 00:47:57,420 --> 00:47:58,660 mentres ninguén está mirando. 1041 00:47:58,660 --> 00:48:01,260 E entón escribir o seu PIN aproximadamente ao mesmo tempo. 1042 00:48:01,260 --> 00:48:06,280 E entón fai unha consulta equilibrio ver canto diñeiro ten. 1043 00:48:06,280 --> 00:48:08,920 E digamos que ten $ 100 deixou na súa conta. 1044 00:48:08,920 --> 00:48:13,310 Así, esencialmente, á vez, é dicir un, cero, cero, entrar. 1045 00:48:13,310 --> 00:48:16,000 E espero volver algún diñeiro. 1046 00:48:16,000 --> 00:48:18,440 >> Pero canto diñeiro pode recibir de volta? 1047 00:48:18,440 --> 00:48:21,710 Agora, os ordenadores ao final do día, especialmente se eles están falando 1048 00:48:21,710 --> 00:48:27,360 servidores, non necesariamente facer cousas na orde en que se espera. 1049 00:48:27,360 --> 00:48:30,860 >> Así, supoñamos que sucede, por mor da calquera problemas de velocidade de rede non 1050 00:48:30,860 --> 00:48:34,530 son, ou problemas de CPU existen, ou nada diso, supoñamos que o 1051 00:48:34,530 --> 00:48:38,530 primeiro ATM comprobar o seu saldo e ve, oh, esa persoa ten 100 dólares. 1052 00:48:38,530 --> 00:48:41,840 Pero, entón, se distrae, porque se cadra unha copia de seguridade está a suceder e por iso é 1053 00:48:41,840 --> 00:48:42,500 abrandar. 1054 00:48:42,500 --> 00:48:45,080 Ou quizais durante a verificación, a rede conexión quedou un pouco máis lento, porque 1055 00:48:45,080 --> 00:48:45,910 iso simplemente ocorre. 1056 00:48:45,910 --> 00:48:47,100 Son dispositivos físicos. 1057 00:48:47,100 --> 00:48:49,330 Entón, mentres tanto, o segundo cadro electrónico facendo a mesma pregunta. 1058 00:48:49,330 --> 00:48:53,030 Canto diñeiro é que David ten? 100 dólares é a resposta. 1059 00:48:53,030 --> 00:48:58,930 Senón porque o primeiro ATM aínda non enviou a mensaxe restar 100 dólares, ambos 1060 00:48:58,930 --> 00:49:03,000 ATMs ter inspeccionado caixa forte do banco, ver hai 100 dólares alí, e agora 1061 00:49:03,000 --> 00:49:07,160 ambas as máquinas son potencialmente vai cuspir unha resposta. 1062 00:49:07,160 --> 00:49:12,240 >> Agora, iso é óptimo para vostede, nalgún sentido O que o banco fai, finalmente, 1063 00:49:12,240 --> 00:49:17,200 é cambiar o valor a menos de 100 por definindo a variable igual ao teu 1064 00:49:17,200 --> 00:49:21,570 conta bancaria igual a 0, en oposición facendo menos 100. 1065 00:49:21,570 --> 00:49:24,410 Agora, no peor caso para o banco - 1066 00:49:24,410 --> 00:49:27,470 ou, no mellor para o banco, pola súa banda, eles dan-lle 200 dólares, e 1067 00:49:27,470 --> 00:49:31,690 súa conta bancaria agora mostra negativo 100 dólares, o que realmente non fai 1068 00:49:31,690 --> 00:49:32,950 beneficia-lo en todo. 1069 00:49:32,950 --> 00:49:36,500 Pero o punto é que esta carreira condición para dous compañeiros de cuarto se 1070 00:49:36,500 --> 00:49:40,660 leite, ou para dous caixas electrónicos intentando obter diñeiro e cambiar o estado dun cofre 1071 00:49:40,660 --> 00:49:44,510 á vez, existe algunha xa que ten unha base de datos. 1072 00:49:44,510 --> 00:49:48,290 >> Agora, no conxunto de problemas de sete, esta cuestión xorde no sentido de que se mercar un 1073 00:49:48,290 --> 00:49:52,110 acción de Facebook, a continuación, para exemplo, comprar unha segunda parte 1074 00:49:52,110 --> 00:49:55,160 Facebook stock, ten que facer unha decisión como programador. 1075 00:49:55,160 --> 00:49:58,710 Co fin de decidir como actualizar o base de datos, as posibilidades son que vai 1076 00:49:58,710 --> 00:50:02,250 ten unha liña para que o stock, e este é un xeito de implementar lo. 1077 00:50:02,250 --> 00:50:06,640 E vai ter unha acción do FB, que é o seu stock Ticker 1078 00:50:06,640 --> 00:50:10,120 para este nome de usuario, ou este usuario ID, o identificador exclusivo. 1079 00:50:10,120 --> 00:50:12,340 >> Pero a mesma historia pode ocorrer aquí. 1080 00:50:12,340 --> 00:50:15,800 Se unha instrución SELECT en SQL, como vai ver problema en establecer sete, cando ve, 1081 00:50:15,800 --> 00:50:18,460 Oh, David ten unha partes de accións de Facebook. 1082 00:50:18,460 --> 00:50:23,240 Déixeme agora cambiar este sexa dúas partes, porque quere mercar un 1083 00:50:23,240 --> 00:50:24,120 segunda parte. 1084 00:50:24,120 --> 00:50:27,860 Pero supoña que David realmente tiña dous fiestras do navegador abertas, ou supoñer que 1085 00:50:27,860 --> 00:50:32,150 é unha conta conxunta con dous cónxuxes, e ambos están tentando realizar 1086 00:50:32,150 --> 00:50:36,770 a mesma operación, hai, tamén, o existe potencial para unha decisión a ser 1087 00:50:36,770 --> 00:50:39,670 feita con base na anterior estado do mundo - 1088 00:50:39,670 --> 00:50:41,290 a conta ten unha acción - 1089 00:50:41,290 --> 00:50:45,630 e ambas as persoas, ou dous servidores, agora tente dicir incrementar a dúas accións. 1090 00:50:45,630 --> 00:50:49,020 Pero, neste caso, pode ter cobrado me cartos para ambas partes, aínda que 1091 00:50:49,020 --> 00:50:50,830 incrementado só aquela vez. 1092 00:50:50,830 --> 00:50:54,730 >> Así, en breve, o problema fundamental aquí, como coa broma sobre deixando un 1093 00:50:54,730 --> 00:50:58,750 conta, ou poñer un cadeado nel, é se dúas persoas, ou dúas liñas - 1094 00:50:58,750 --> 00:50:59,930 creo que volve a cero - 1095 00:50:59,930 --> 00:51:03,220 pode inspeccionar o estado dalgunha variable e, a continuación, tentar cambiar esa variable, 1096 00:51:03,220 --> 00:51:07,950 pero esas dúas cousas non acontecen no mesmo tempo, pero pode estar detido 1097 00:51:07,950 --> 00:51:11,500 por outras cousas a suceder, os datos poden entrar nun estado moi raro. 1098 00:51:11,500 --> 00:51:15,450 E pode beneficiarse ou pode sufrir no sentido do exemplo de diñeiro. 1099 00:51:15,450 --> 00:51:18,110 >> Así, o conxunto de problemas de sete, dámoslle esta liña de código, que por moito tempo 1100 00:51:18,110 --> 00:51:21,000 En resumo, resolve este problema no MySQL 1101 00:51:21,000 --> 00:51:24,950 Isto moi longo instrución que non fai mesmo caber nunha liña no 1102 00:51:24,950 --> 00:51:30,370 pantalla aquí asegura que o seu funcionamento é o que se chama atómica. 1103 00:51:30,370 --> 00:51:33,720 Todo pasa dunha vez, ou iso non acontece en todos. 1104 00:51:33,720 --> 00:51:37,530 Esta frase moi longa non pode estar detido parcialmente. 1105 00:51:37,530 --> 00:51:39,840 >> E o que fai é literalmente o que di. 1106 00:51:39,840 --> 00:51:44,200 Inserción nalgúns táboa seguinte tres campos eses valores específicos, 1107 00:51:44,200 --> 00:51:47,280 pero en clave duplicada, non facer unha inserción. 1108 00:51:47,280 --> 00:51:48,280 Facer unha actualización. 1109 00:51:48,280 --> 00:51:52,450 Polo tanto, este é como facer un SELECT e un Inserir por así dicir, á vez. 1110 00:51:52,450 --> 00:51:55,150 E o que é a clave que probablemente é sendo referido aquí? 1111 00:51:55,150 --> 00:51:58,300 1112 00:51:58,300 --> 00:52:01,380 >> Acontece, e vai ver isto en conxunto de problemas de sete de spec, porque 1113 00:52:01,380 --> 00:52:06,040 xa declarou que haxa unha clave única nesta táboa particular de tal xeito que 1114 00:52:06,040 --> 00:52:08,480 non pode ter varias liñas para o mesmo usuario, coa 1115 00:52:08,480 --> 00:52:10,150 mesmo símbolo tostón stock - 1116 00:52:10,150 --> 00:52:13,780 neste exemplo, aquí, é DVN.V un stock parvo centavo que nos 1117 00:52:13,780 --> 00:52:14,980 Consulte o spec. 1118 00:52:14,980 --> 00:52:17,860 Porque temos declarado que sexa único, O que isto significa é que se 1119 00:52:17,860 --> 00:52:23,580 tentar inserir unha liña duplicada, está en vez de ir para actualiza-lo sen 1120 00:52:23,580 --> 00:52:27,020 ninguén ter unha oportunidade de cambiar o estado do mundo, quere. 1121 00:52:27,020 --> 00:52:29,400 Así, en breve, o que garante as cousas son atómica. 1122 00:52:29,400 --> 00:52:32,530 >> De xeito máis xeral, con todo, as bases de datos como MySQL - 1123 00:52:32,530 --> 00:52:35,460 e non precisa deste recurso para p-set sete, pero mantelo presente para 1124 00:52:35,460 --> 00:52:36,200 o futuro - 1125 00:52:36,200 --> 00:52:38,870 apoiar o que son chamados de transaccións, onde se pode dicir 1126 00:52:38,870 --> 00:52:40,990 COMECE TRANSACCIÓN literalmente. 1127 00:52:40,990 --> 00:52:43,270 Pode entón realizar dúas instrucións SQL. 1128 00:52:43,270 --> 00:52:45,710 E unha instrución SQL, como vai ver en p-set sete, parece un pouco 1129 00:52:45,710 --> 00:52:46,750 algo así. 1130 00:52:46,750 --> 00:52:48,820 Actualizar unha táboa chamada conta. 1131 00:52:48,820 --> 00:52:52,550 Establecer a columna de equilibrio igual a calquera A columna Saldo actualmente 1132 00:52:52,550 --> 00:52:57,280 é menos 1,000, onde o número, número de conta, como a identificación do usuario, 1133 00:52:57,280 --> 00:53:00,830 é igual a 2, e, a continuación, actualizar conta dot dot dot. 1134 00:53:00,830 --> 00:53:04,350 >> Así, en termos xerais, o que estes dous consultas parecen estar facendo na 1135 00:53:04,350 --> 00:53:05,840 sentido real da banca? 1136 00:53:05,840 --> 00:53:07,440 >> Audiencia: trasladándose para o aforro. 1137 00:53:07,440 --> 00:53:08,020 >> DAVID Malan: Exactamente. 1138 00:53:08,020 --> 00:53:10,470 Transferencia de fondos dunha conta a outra. 1139 00:53:10,470 --> 00:53:14,400 E este é outro exemplo onde realmente quere esas dúas cousas a suceder 1140 00:53:14,400 --> 00:53:15,570 ou non acontecer. 1141 00:53:15,570 --> 00:53:18,880 Non quere algo para entrar no medio, e potencialmente interferir 1142 00:53:18,880 --> 00:53:22,220 as matemáticas, ou desorde o que diñeiro que ten, ou o que 1143 00:53:22,220 --> 00:53:23,170 diñeiro que o banco ten. 1144 00:53:23,170 --> 00:53:26,890 Entón, o que é realmente bo sobre transaccións en MySQL é que, e 1145 00:53:26,890 --> 00:53:30,160 bases de datos de xeito máis xeral, é que e persoas intelixentes que xa aplicaron 1146 00:53:30,160 --> 00:53:33,670 estes recursos descubrir como facer seguro de que as dúas cousas acontecen 1147 00:53:33,670 --> 00:53:35,120 ou non en todos. 1148 00:53:35,120 --> 00:53:38,580 >> E se está realmente aspira a facer un sitio web que é usado por persoas en 1149 00:53:38,580 --> 00:53:41,490 campus, as persoas no mundo real, facendo algo no sentido de arranque, 1150 00:53:41,490 --> 00:53:43,300 estes son os tipos de decisións de deseño que 1151 00:53:43,300 --> 00:53:45,020 facer-se sempre tan importante. 1152 00:53:45,020 --> 00:53:48,240 En caso contrario, comeza a perder datos, perden usuarios, ou, no peor caso, 1153 00:53:48,240 --> 00:53:51,800 vimos aquí, potencialmente perder cartos. 1154 00:53:51,800 --> 00:53:56,180 Entón, de novo, máis sobre isto en conxunto de problemas sete, así como quizais para algúns dos 1155 00:53:56,180 --> 00:53:57,530 ti en proxectos finais. 1156 00:53:57,530 --> 00:54:01,870 >> Entón imos cambiar esa imaxe que tiña hai pouco máis só dunha maneira. 1157 00:54:01,870 --> 00:54:04,070 Entón deixe-me ver realmente se eu puider - 1158 00:54:04,070 --> 00:54:06,030 Non, iso foi. 1159 00:54:06,030 --> 00:54:06,690 Non é iso. 1160 00:54:06,690 --> 00:54:09,020 >> Polo tanto, este é o lugar onde nós deixamos a última vez. 1161 00:54:09,020 --> 00:54:12,390 E resulta que nós estamos indo a tirar unha cousa na mestura por aquí - 1162 00:54:12,390 --> 00:54:14,510 unha linguaxe chamada JavaScript. 1163 00:54:14,510 --> 00:54:18,060 Entón JavaScript realmente encaixa nesta parte - 1164 00:54:18,060 --> 00:54:22,086 e eu non quería moito deixar espazo suficiente, de xeito que este xa non é a escala. 1165 00:54:22,086 --> 00:54:23,900 OK, iso é realmente patético. 1166 00:54:23,900 --> 00:54:27,075 OK, entón iso é JavaScript. 1167 00:54:27,075 --> 00:54:27,340 Todo ben. 1168 00:54:27,340 --> 00:54:28,760 Estou realmente facendo un desserviço. 1169 00:54:28,760 --> 00:54:29,390 Todo ben. 1170 00:54:29,390 --> 00:54:34,790 >> Entón Javascript é outra programación linguaxe, e noso pasado, se iso axuda 1171 00:54:34,790 --> 00:54:37,770 reafirmar que non hai moito máis dos hidrantes aquí. 1172 00:54:37,770 --> 00:54:41,100 Así, é tamén un JavaScript interpretado linguaxe, o que significa que non 1173 00:54:41,100 --> 00:54:42,670 compilalo en ceros e uns. 1174 00:54:42,670 --> 00:54:43,690 Só executalo. 1175 00:54:43,690 --> 00:54:47,680 Pero o que é fundamentalmente diferente con JavaScript é que normalmente lle 1176 00:54:47,680 --> 00:54:49,815 non executa-lo no seu servidor web. 1177 00:54:49,815 --> 00:54:52,570 Non se executa en segundo aparello de per si. 1178 00:54:52,570 --> 00:54:57,490 Pola contra, é descargado por un usuario vía HTTP no seu navegador - 1179 00:54:57,490 --> 00:55:00,260 Chrome, Safari, Internet Explorer, Firefox, o que sexa - 1180 00:55:00,260 --> 00:55:03,860 e é o navegador que executa este particular, linguaxe de programación. 1181 00:55:03,860 --> 00:55:08,000 >> Entón, para ser claro, PHP, ata agora, foi executado ou na liña de ordes en 1182 00:55:08,000 --> 00:55:11,290 nosa ventá en branco e negro, nun servidor como o dispositivo, un ordenador 1183 00:55:11,290 --> 00:55:14,490 como o aparello, ou foi executado por un servidor web 1184 00:55:14,490 --> 00:55:15,860 executado nun ordenador. 1185 00:55:15,860 --> 00:55:20,490 Pero o tema aquí é que o PHP, ata agora, foi executado no lado do servidor, polo tanto, 1186 00:55:20,490 --> 00:55:24,820 o usuario eo navegador do usuario nunca ve unha liña de código PHP. 1187 00:55:24,820 --> 00:55:28,530 >> En realidade, se nunca abrir un navegador para seu sitio web ou doutro e 1188 00:55:28,530 --> 00:55:32,400 realmente ver o código PHP na súa fiestra, alguén ten asneira. 1189 00:55:32,400 --> 00:55:34,950 Porque non está destinado a ser enviado por un navegador directamente. 1190 00:55:34,950 --> 00:55:38,150 É suposto ser executado e virou en algo parecido a HTML. 1191 00:55:38,150 --> 00:55:40,120 >> Pero Javascript é esencialmente todo o contrario. 1192 00:55:40,120 --> 00:55:44,350 É concibida para ser executado normalmente dentro da xanela do navegador do usuario. 1193 00:55:44,350 --> 00:55:46,840 E que tipo de sitios empregan JavaScript continuación, os días de hoxe? 1194 00:55:46,840 --> 00:55:49,640 1195 00:55:49,640 --> 00:55:52,180 >> Como literalmente cada sitio popular. 1196 00:55:52,180 --> 00:55:55,430 Cada sitio que vostedes probablemente uso cotián usar JavaScript para o 1197 00:55:55,430 --> 00:55:57,330 máis simple e mesmo o características máis sexy. 1198 00:55:57,330 --> 00:55:59,800 >> Polo tanto, algo así como Facebook Falar, se usa isto. 1199 00:55:59,800 --> 00:56:01,040 Como é que isto realmente funciona? 1200 00:56:01,040 --> 00:56:05,090 Ben, ata agora, todas as cousas que teño feito con HTML e PHP asume que 1201 00:56:05,090 --> 00:56:08,750 lle tire unha URL, e premer Intro, e ve algún contido HTML. 1202 00:56:08,750 --> 00:56:11,970 E fai clic na ligazón, que cambia a URL, cambia a páxina, e recarga 1203 00:56:11,970 --> 00:56:12,740 algún contido novo. 1204 00:56:12,740 --> 00:56:16,340 Prema noutra dirección ou enviar un formulario, vostede se levou a outra páxina e 1205 00:56:16,340 --> 00:56:17,420 ves algún contido novo. 1206 00:56:17,420 --> 00:56:22,710 >> Pero usar algo como Facebook Chat, ou Gchat, ou Google Maps, raramente 1207 00:56:22,710 --> 00:56:27,350 non a páxina actualizar tal que verá unha pantalla en branco momentáneamente e 1208 00:56:27,350 --> 00:56:28,470 logo, un novo contido. 1209 00:56:28,470 --> 00:56:32,610 Pola contra, as páxinas web hoxe son dinámicamente ser actualizado de novo e 1210 00:56:32,610 --> 00:56:35,570 novo e de novo todo tipo de bastidores. 1211 00:56:35,570 --> 00:56:38,560 E verifícase que cando vai facer a algo como Facebook, ou Gchat, 1212 00:56:38,560 --> 00:56:43,050 ou Gmail, e as actualizacións da páxina automaticamente sen recarregar as 1213 00:56:43,050 --> 00:56:47,630 pantalla, o que pasou é que o explorador fixo unha especie de segredo 1214 00:56:47,630 --> 00:56:49,410 solicitudes HTTP adicionais - 1215 00:56:49,410 --> 00:56:52,740 non para páxinas web enteiras, pero só para pequenos bloques de datos, como o 1216 00:56:52,740 --> 00:56:55,740 mensaxe instantánea que o seu amigo só enviou-lle, ou a actualización de estado que 1217 00:56:55,740 --> 00:56:58,210 alguén só lle enviou, ou o tweet que alguén acaba de enviar. 1218 00:56:58,210 --> 00:57:02,120 É só facer pequenos solicitudes de de datos, e logo usando JavaScript, este 1219 00:57:02,120 --> 00:57:06,370 linguaxe de programación, para cambiar o que a páxina web parece sen a 1220 00:57:06,370 --> 00:57:09,860 servidor de axuda, sen o servidor xeración que HTML. 1221 00:57:09,860 --> 00:57:13,820 >> Así, en breve, Javascript se pode usar, a continuación, non só para buscar novos datos 1222 00:57:13,820 --> 00:57:16,750 o servidor sen recarregar un todo páxina ou enviar un formulario. 1223 00:57:16,750 --> 00:57:20,060 Tamén se pode usar para o cambio o chamado MOD - 1224 00:57:20,060 --> 00:57:21,520 Document Object Model - 1225 00:57:21,520 --> 00:57:24,620 que é só a forma elegante para dicindo que a árbore de HTML 1226 00:57:24,620 --> 00:57:26,220 que vimos a última vez. 1227 00:57:26,220 --> 00:57:31,640 >> Entón, para tranquilizar, JavaScript sintaticamente tan semellante a C tamén. 1228 00:57:31,640 --> 00:57:32,820 Non hai ningunha función principal. 1229 00:57:32,820 --> 00:57:35,430 Acaba de comezar a escribir o código e serán executados, ou 1230 00:57:35,430 --> 00:57:36,900 interpretadas de xeito máis adecuada. 1231 00:57:36,900 --> 00:57:38,660 Condicións será coma este. 1232 00:57:38,660 --> 00:57:41,230 Non é diferente a partir de C ou PHP a esta materia. 1233 00:57:41,230 --> 00:57:43,890 Expresións booleanas ou-ed xuntos será coma este. 1234 00:57:43,890 --> 00:57:45,590 Anded xuntos semellante a esta. 1235 00:57:45,590 --> 00:57:47,750 >> Switches será coma este. 1236 00:57:47,750 --> 00:57:49,440 Por voltas será coma este. 1237 00:57:49,440 --> 00:57:51,060 While loops será coma este. 1238 00:57:51,060 --> 00:57:53,316 Do while será coma este. 1239 00:57:53,316 --> 00:57:54,780 >> Isto é novo. 1240 00:57:54,780 --> 00:57:58,753 Entón Javascript non ten un foreach construír, por si só, pero este constructo 1241 00:57:58,753 --> 00:58:03,870 á variable i na matriz, e eu neste caso pasa a ser un valor de índice. 1242 00:58:03,870 --> 00:58:06,880 Polo tanto, é un pouco diferente do que foreach, aínda que as novas versións do 1243 00:58:06,880 --> 00:58:10,280 JavaScript están saíndo todo o tempo, así mesmo estes recursos de linguaxe 1244 00:58:10,280 --> 00:58:10,880 evolucionan. 1245 00:58:10,880 --> 00:58:16,920 >> E como un aparte, JavaScript nestes días tamén se pode usar nun servidor como 1246 00:58:16,920 --> 00:58:19,920 PHP utilizando unha estrutura chamada Node.js. 1247 00:58:19,920 --> 00:58:24,670 Un de CS50 TFS, Kevin, levou un seminario sobre Node.js que está dispoñible en 1248 00:58:24,670 --> 00:58:26,440 cs50.net/seminars. 1249 00:58:26,440 --> 00:58:28,830 Entón, se está curioso, sabe que pode usar esta no lado do servidor como 1250 00:58:28,830 --> 00:58:33,870 ben, pero iso é unha tendencia relativamente recente, pero un poderoso niso. 1251 00:58:33,870 --> 00:58:35,270 >> Este é un pouco diferente. 1252 00:58:35,270 --> 00:58:37,910 Esta é unha matriz en JavaScript. 1253 00:58:37,910 --> 00:58:40,115 E o que lle parece diferente contra C ou PHP? 1254 00:58:40,115 --> 00:58:43,890 1255 00:58:43,890 --> 00:58:47,420 Existen algunhas historias rápidas podemos dicir aquí. 1256 00:58:47,420 --> 00:58:49,367 O que falta en relación PHP? 1257 00:58:49,367 --> 00:58:51,652 >> Audiencia: [inaudível]. 1258 00:58:51,652 --> 00:58:52,110 >> DAVID Malan: Si? 1259 00:58:52,110 --> 00:58:53,322 Sentímolo, dicir de novo? 1260 00:58:53,322 --> 00:58:54,740 >> Audiencia: Non declarando o tipo de variable. 1261 00:58:54,740 --> 00:58:56,390 >> DAVID Malan: Non estamos declarando o tipo de variable. 1262 00:58:56,390 --> 00:58:59,630 Entón, en realidade, moi como PHP, non estamos especificando tipo de esta variable. 1263 00:58:59,630 --> 00:59:02,670 Pola contra, estamos máis xenericamente dicindo var á variable. 1264 00:59:02,670 --> 00:59:06,690 Non debemos problema PHP sinal de dólar, mentres que tedioso 1265 00:59:06,690 --> 00:59:09,160 tipo, fai máis claro que algo é unha variable. 1266 00:59:09,160 --> 00:59:11,830 Mentres aquí, somos unha especie de volta ao O enfoque de C por só chamar a un 1267 00:59:11,830 --> 00:59:14,500 variable co nome que queiramos para darlle, como números. 1268 00:59:14,500 --> 00:59:17,170 E tamén como PHP, temos corchetes a 1269 00:59:17,170 --> 00:59:19,170 valores dentro desa matriz. 1270 00:59:19,170 --> 00:59:22,490 >> Así, as variables en JavaScript tamén pode ser así. 1271 00:59:22,490 --> 00:59:26,900 Teña en conta aquí esta é unha cadea chamada s, pero do mesmo xeito que nós non especificada 1272 00:59:26,900 --> 00:59:28,750 que é unha cadea. 1273 00:59:28,750 --> 00:59:33,160 Aquí, con todo, é unha característica que non fai hai exactamente da mesma maneira en PHP, 1274 00:59:33,160 --> 00:59:34,460 pero un pouco semellante. 1275 00:59:34,460 --> 00:59:36,530 Este é un obxecto en JavaScript. 1276 00:59:36,530 --> 00:59:42,110 E os obxectos son unha especie de exército suízo Coitelo dunha estrutura de datos en que 1277 00:59:42,110 --> 00:59:43,900 pode usalos para calquera número de cousas. 1278 00:59:43,900 --> 00:59:46,860 >> Aquí, por exemplo, estamos declarando unha variable chamada cotización. 1279 00:59:46,860 --> 00:59:49,110 O tipo de variable que é un obxecto. 1280 00:59:49,110 --> 00:59:53,550 Podes pensar niso como un struct C que ten as claves e valores. 1281 00:59:53,550 --> 00:59:55,250 Symbol é unha clave. 1282 00:59:55,250 --> 00:59:57,350 FB é un valor, ao parecer un símbolo de acción. 1283 00:59:57,350 --> 00:59:57,930 Coma. 1284 00:59:57,930 --> 01:00:02,180 O prezo é outra clave, eo seu valor é aparentemente un punto flutuante, ou un 1285 01:00:02,180 --> 01:00:06,510 número máis xeral en JavaScript, de 49,26 dólares. 1286 01:00:06,510 --> 01:00:09,030 >> Entón PHP non ten - 1287 01:00:09,030 --> 01:00:12,980 non vimos en obxectos PHP moi así, pero fixemos ver un analóxico, 1288 01:00:12,980 --> 01:00:14,093 que era o que? 1289 01:00:14,093 --> 01:00:14,980 >> Audiencia: [inaudível]. 1290 01:00:14,980 --> 01:00:16,110 >> DAVID Malan: Matrices asociativas. 1291 01:00:16,110 --> 01:00:19,990 Así, mentres que o PHP ten arrays asociativos cuxa sintaxe é sempre un pouco para 1292 01:00:19,990 --> 01:00:20,370 diferente - 1293 01:00:20,370 --> 01:00:21,780 vimos os corchetes. 1294 01:00:21,780 --> 01:00:23,860 Vimos os símbolos frechas estrañas. 1295 01:00:23,860 --> 01:00:27,330 JavaScript ten obxectos, pero esta é sobre todo unha diferenza semántica e unha 1296 01:00:27,330 --> 01:00:29,260 sinónimo diferente de momento. 1297 01:00:29,260 --> 01:00:35,060 Con todo, como un aparte, PHP tamén ten obxectos dun xeito que Java e outros 1298 01:00:35,060 --> 01:00:37,810 linguas teñen obxectos en programación orientada a obxectos. 1299 01:00:37,810 --> 01:00:40,440 Pero imos usar estes só para os tipos de datos para agora. 1300 01:00:40,440 --> 01:00:42,170 Os obxectos e arrays asociativos. 1301 01:00:42,170 --> 01:00:44,140 >> Este pode facelo un pouco máis clara. 1302 01:00:44,140 --> 01:00:45,890 Aquí está o porqué dun obxecto é útil. 1303 01:00:45,890 --> 01:00:48,760 Cando quere declarar un estudante, como Zamyla, podemos realmente 1304 01:00:48,760 --> 01:00:52,630 encapsulado así dicir no interior do referido obxecto usando claves como 1305 01:00:52,630 --> 01:00:55,060 antes de unha chea de claves e os valores aquí. 1306 01:00:55,060 --> 01:00:59,150 Temos unha identificación, unha casa, e un nome para Zamyla, seguido por un punto e coma como 1307 01:00:59,150 --> 01:01:00,690 habitual ao final. 1308 01:01:00,690 --> 01:01:04,840 >> Por aquí tamén, iso é un pouco diferentes, pero tamén moi potente 1309 01:01:04,840 --> 01:01:05,690 nos días de hoxe. 1310 01:01:05,690 --> 01:01:08,780 Aquí está unha matriz, e eu sei diso porque hai un corchete up 1311 01:01:08,780 --> 01:01:11,090 superior e un corchete na parte inferior. 1312 01:01:11,090 --> 01:01:16,050 E isto é unha matriz de datos que escriba aparentemente en JavaScript? 1313 01:01:16,050 --> 01:01:21,260 Esta é unha matriz de parece como tres obxectos. 1314 01:01:21,260 --> 01:01:24,580 E sei que non é máis que un obxecto por mor das chaves. 1315 01:01:24,580 --> 01:01:28,760 E teña en conta que hai bosquexo aberta, algunhas cousas, preto bosquexo, coma, 1316 01:01:28,760 --> 01:01:31,180 a continuación, un pouco máis, coma, e, a continuación, un pouco máis. 1317 01:01:31,180 --> 01:01:33,800 Entón, iso é tres argumentos separadas por dúas comas. 1318 01:01:33,800 --> 01:01:36,810 >> Polo tanto, esta é unha matriz de tres obxectos. 1319 01:01:36,810 --> 01:01:39,940 E cada un dos obxectos a ser exhibida un estudante ou funcionario dalgún 1320 01:01:39,940 --> 01:01:42,370 tipo, cada un cun ID, casa, e nome. 1321 01:01:42,370 --> 01:01:45,060 Pero eu chamei ese algo chamado JSON - 1322 01:01:45,060 --> 01:01:47,450 JavaScript Object Notation. 1323 01:01:47,450 --> 01:01:52,060 E isto é un formato de datos que realmente é tan popular e en 1324 01:01:52,060 --> 01:01:55,100 voga nestes días que se escribir un aplicación que emprega Facebook 1325 01:01:55,100 --> 01:01:59,150 API, a API de Twitter, realmente case calquera API aí nos días de hoxe, 1326 01:01:59,150 --> 01:02:02,820 incluíndo algúns dos CS50 propia, o datos que recibe de volta non está na 1327 01:02:02,820 --> 01:02:04,720 formato CSV da vella escola. 1328 01:02:04,720 --> 01:02:06,780 >> Porque recorda que CSV é super sinxelo. 1329 01:02:06,780 --> 01:02:10,230 Queda só a columnas separadas por dous puntos. 1330 01:02:10,230 --> 01:02:13,190 Datos JSON dálle máis de metadatos. 1331 01:02:13,190 --> 01:02:17,800 El asocia unha clave con todos os valores así non ten que simplemente asumir que 1332 01:02:17,800 --> 01:02:22,460 a columna de orde cero é un valor, columna outra, de dúas columnas é outro. 1333 01:02:22,460 --> 01:02:26,790 Todo nun obxecto JSON aquí é unha especie de auto-descritivo, porque cada 1334 01:02:26,790 --> 01:02:30,940 un dos nomes neste ficheiro ten literalmente nome diante del como un 1335 01:02:30,940 --> 01:02:32,510 cadea. 1336 01:02:32,510 --> 01:02:34,950 >> Entón, imos dar un ollo a un algúns exemplos aquí. 1337 01:02:34,950 --> 01:02:36,800 Déixeme ir a dentro do aparello. 1338 01:02:36,800 --> 01:02:41,000 E deixe-me ir ao noso vhost directorio en público. 1339 01:02:41,000 --> 01:02:45,590 E deixe-me ir ao JavaScript directorio. 1340 01:02:45,590 --> 01:02:49,610 E imos adiante e abrir don-0.html, onde DON significa só 1341 01:02:49,610 --> 01:02:51,010 Document Object Model. 1342 01:02:51,010 --> 01:02:53,490 É o material árbore para que Me referín anteriormente. 1343 01:02:53,490 --> 01:02:54,950 >> E deixe-me propor o seguinte. 1344 01:02:54,950 --> 01:02:57,720 Velaquí unha páxina web cuxo corpo é moi sinxelo. 1345 01:02:57,720 --> 01:03:00,170 Entón, aquí en baixo, na parte inferior, entender Eu teño un formulario. 1346 01:03:00,170 --> 01:03:01,500 Vimos os antes. 1347 01:03:01,500 --> 01:03:07,600 Ten dúas entradas, unha das cales ten un ID de nome, un dos cales ten un tipo de 1348 01:03:07,600 --> 01:03:09,830 presentar, eo primeiro un do tipo é texto. 1349 01:03:09,830 --> 01:03:11,900 Entón, iso realmente soa moi sinxelo. 1350 01:03:11,900 --> 01:03:13,090 >> Imos aquí. 1351 01:03:13,090 --> 01:03:15,390 Imos volver a esta páxina aquí. 1352 01:03:15,390 --> 01:03:21,030 Imos entrar en localhost, e entra noso directorio JavaScript, e ir a 1353 01:03:21,030 --> 01:03:24,640 don-0, e aquí temos esa forma. 1354 01:03:24,640 --> 01:03:26,550 Entón, iso é, ao parecer, todo isto páxina fai. 1355 01:03:26,550 --> 01:03:28,740 Ten un campo de nome con un botón Enviar. 1356 01:03:28,740 --> 01:03:30,340 Pero eu non vou usar PHP aquí. 1357 01:03:30,340 --> 01:03:34,310 Vou facer todo do lado do cliente por así dicir, en JavaScript do seguinte xeito. 1358 01:03:34,310 --> 01:03:39,100 >> Teña en conta que realmente deu o nome campo de entrada esta unha única 1359 01:03:39,100 --> 01:03:42,350 identificador, que será, de feito, salva-me algún tempo en un momento. 1360 01:03:42,350 --> 01:03:45,480 E teña en conta que eu teño presentado outra etiqueta na cabeza da miña páxina web, o 1361 01:03:45,480 --> 01:03:46,565  tag. 1362 01:03:46,565 --> 01:03:50,120 >> Polo tanto, é neste sentido que se JavaScript unha linguaxe de programación do lado do cliente. 1363 01:03:50,120 --> 01:03:55,020 Neste caso, como CSS, engada en liña recta dentro do meu HTML. 1364 01:03:55,020 --> 01:03:58,810 Pero teña en conta que eu declarada unha función que parece un pouco con PHP 1365 01:03:58,810 --> 01:04:01,530 sintaticamente, pero esta é realmente JavaScript, porque unha vez máis, é 1366 01:04:01,530 --> 01:04:03,920 do lado do cliente no navegador. 1367 01:04:03,920 --> 01:04:07,590 E dar un palpite que isto vai facer, aínda que algúns da sintaxe 1368 01:04:07,590 --> 01:04:09,338 aquí é novo. 1369 01:04:09,338 --> 01:04:11,760 >> Audiencia: Diga Ola para o que quere. 1370 01:04:11,760 --> 01:04:14,020 >> DAVID Malan: Vai dicir Hola para quen visita esta páxina. 1371 01:04:14,020 --> 01:04:15,120 Entón, como? 1372 01:04:15,120 --> 01:04:18,070 >> Entón, teña en conta, verifícase en JavaScript hai unha función de alerta (). 1373 01:04:18,070 --> 01:04:22,840 Esta é unha función moi triste que tipo de realmente só tende a molestar aos usuarios. 1374 01:04:22,840 --> 01:04:25,440 Non é que o que realmente debe utilizar normalmente, pero é un rápido e sucio 1375 01:04:25,440 --> 01:04:27,710 forma dunha especie de impresión de algo a un usuario gráfica 1376 01:04:27,710 --> 01:04:29,180 de interface, como un navegador. 1377 01:04:29,180 --> 01:04:31,400 Teña en conta aquí que eu teño un cadea entre comiñas simples. 1378 01:04:31,400 --> 01:04:36,010 Acontece que a diferenza de C, JavaScript realmente ten uso único 1379 01:04:36,010 --> 01:04:38,730 cita, e, a verdade, é só tipo do convenio estilística entre 1380 01:04:38,730 --> 01:04:41,180 JavaScript desenvolvedores usar comiñas simples. 1381 01:04:41,180 --> 01:04:43,750 PHP, realmente teñen algo significado diferente. 1382 01:04:43,750 --> 01:04:45,810 Pero, polo de agora, só sei que esa é a única razón. 1383 01:04:45,810 --> 01:04:49,270 A convención en JavaScript é moitas veces a usar comiñas simples, pero poderiamos usar 1384 01:04:49,270 --> 01:04:50,950 comiñas dobres en ambos os lugares tamén. 1385 01:04:50,950 --> 01:04:52,610 >> Entón, iso é interesante. 1386 01:04:52,610 --> 01:04:56,430 Teña en conta que a última vez que tivemos que imaxe na pantalla que deseñou unha árbore 1387 01:04:56,430 --> 01:04:59,720 onde tiña o no HTML, eo nodo principal eo no corpo, 1388 01:04:59,720 --> 01:05:00,800 e logo, algún texto. 1389 01:05:00,800 --> 01:05:04,700 Pero non houbo un nó especial no moi superior que chamei ao documento. 1390 01:05:04,700 --> 01:05:08,260 Ben, acontece que en JavaScript, calquera vez que escribir un programa en JavaScript 1391 01:05:08,260 --> 01:05:11,040 nun navegador, ten acceso a unha variable global especial. 1392 01:05:11,040 --> 01:05:14,130 Similares en espírito á superglobais PHP, este é chamado en 1393 01:05:14,130 --> 01:05:16,050 todo documento minúsculas. 1394 01:05:16,050 --> 01:05:21,480 >> É como unha estrutura, pero esta estrutura tamén ten funcións dentro dela. 1395 01:05:21,480 --> 01:05:23,790 Así, un struct C só ten datos normalmente. 1396 01:05:23,790 --> 01:05:29,060 Pero un obxecto JavaScript coma este tecnicamente é tamén ten funcións, 1397 01:05:29,060 --> 01:05:31,830 tamén coñecido como métodos, no interior do mesmo. 1398 01:05:31,830 --> 01:05:35,750 E pode chamar a unha función dentro este obxecto literalmente facendo a súa 1399 01:05:35,750 --> 01:05:39,610 nome, punto, e despois o nome a función, ou aínda método. 1400 01:05:39,610 --> 01:05:41,160 É só un sinónimo, realmente. 1401 01:05:41,160 --> 01:05:42,450 >> E o que esta función fai? 1402 01:05:42,450 --> 01:05:43,840 Pode tipo de adiviñar o seu nome. 1403 01:05:43,840 --> 01:05:45,590 Obter elemento por ID. 1404 01:05:45,590 --> 01:05:50,040 Entón, que vai buscar a páxina web, buscar a árbore, mirando para 1405 01:05:50,040 --> 01:05:55,210 todo o que no, elemento aka, ten unha ID única da cita nome unquote. 1406 01:05:55,210 --> 01:05:56,560 E entón o que é o que eu vou facer? 1407 01:05:56,560 --> 01:06:00,350 Eu estou indo a obter o valor dentro ese nó na árbore, e eu vou 1408 01:06:00,350 --> 01:06:02,580 dalgún xeito, dicir Hola a ese nome. 1409 01:06:02,580 --> 01:06:05,360 >> Entón dea un palpite, aínda que nós non temos vin iso aínda, o que facer a máis 1410 01:06:05,360 --> 01:06:07,396 símbolos significan aquí e aquí, probablemente? 1411 01:06:07,396 --> 01:06:08,230 >> Audiencia: concatenar. 1412 01:06:08,230 --> 01:06:09,220 >> DAVID Malan: concatenar. 1413 01:06:09,220 --> 01:06:11,290 Correcto, e estes son só tipo de proxecto decisións 1414 01:06:11,290 --> 01:06:12,280 persoas fixeron anos atrás. 1415 01:06:12,280 --> 01:06:15,190 O PHP, concatenar cousas con puntos. 1416 01:06:15,190 --> 01:06:18,800 En C, ir a través de marcos e varias funcións como strcopy () ou chame 1417 01:06:18,800 --> 01:06:20,600 strcat () ou outras funcións. 1418 01:06:20,600 --> 01:06:22,060 Pero en JavaScript, usa triunfos. 1419 01:06:22,060 --> 01:06:24,770 Polo tanto, esta é só a concatenación tres cordas - 1420 01:06:24,770 --> 01:06:27,850 Hola, un nome, e, a continuación, un signo de admiración. 1421 01:06:27,850 --> 01:06:30,390 >> Entón, cando e por que esta función chamado aínda? 1422 01:06:30,390 --> 01:06:33,150 Ben, dar un palpite do HTML na parte inferior. 1423 01:06:33,150 --> 01:06:35,810 Por que cumprimentar () chamado, ou cando? 1424 01:06:35,810 --> 01:06:39,730 1425 01:06:39,730 --> 01:06:44,030 >> Ao parecer, o mellor que podo dicir, en presentar, cando este formulario é enviado, 1426 01:06:44,030 --> 01:06:47,200 Vou facer o que sexa dentro destas citas. 1427 01:06:47,200 --> 01:06:50,900 E, especialmente, eu vou chamar a cumprimento () e, a continuación, voltar false. 1428 01:06:50,900 --> 01:06:53,090 >> Ben, imos ver o que a rede efecto aquí é o primeiro. 1429 01:06:53,090 --> 01:06:58,290 Entón deixe-me ir adiante e escribir en, digamos, Loren, en Enviar. 1430 01:06:58,290 --> 01:06:59,440 Ola Loren. 1431 01:06:59,440 --> 01:07:02,990 Imos ver se quizais este foi só unha implementación de sorte. 1432 01:07:02,990 --> 01:07:03,200 Non. 1433 01:07:03,200 --> 01:07:05,990 Entón está escribindo o que quere que nome realmente poñer alí. 1434 01:07:05,990 --> 01:07:07,970 >> Pero teña en conta que non está cambiando. 1435 01:07:07,970 --> 01:07:10,360 O URL que é don-0.html. 1436 01:07:10,360 --> 01:07:11,820 Non hai register.php. 1437 01:07:11,820 --> 01:07:13,110 Non hai segundo ficheiro. 1438 01:07:13,110 --> 01:07:14,930 Non hai ningún atributo action. 1439 01:07:14,930 --> 01:07:19,720 Entón, cal é esa falsa retorno presumiblemente facendo? 1440 01:07:19,720 --> 01:07:23,660 Por que eu estou chamando cumprimento () e, a continuación, retornando teito probablemente? 1441 01:07:23,660 --> 01:07:26,420 O que normalmente acontece cando fai clic Enviar nun formulario que aínda temos 1442 01:07:26,420 --> 01:07:27,854 visto a semana pasada? 1443 01:07:27,854 --> 01:07:29,900 >> Audiencia: [inaudível]. 1444 01:07:29,900 --> 01:07:30,860 >> DAVID Malan: Vai nalgún lugar, non? 1445 01:07:30,860 --> 01:07:32,720 El vai para un URL de destino. 1446 01:07:32,720 --> 01:07:34,120 Pero eu non quero que isto ocorre aquí. 1447 01:07:34,120 --> 01:07:37,620 Eu quero a miña páxina web para ser completamente dinámico como Gmail, onde unha vez que é 1448 01:07:37,620 --> 01:07:38,650 alí, queda alí. 1449 01:07:38,650 --> 01:07:42,900 A URL non cambia dun xeito que indica a páxina enteira está recargando. 1450 01:07:42,900 --> 01:07:46,680 Pola contra, eu só quero cambiar algo como imprimir algo 1451 01:07:46,680 --> 01:07:48,320 aquí na pantalla. 1452 01:07:48,320 --> 01:07:49,630 >> Ben, deixe-me limpar iso -Se un pouco. 1453 01:07:49,630 --> 01:07:55,370 Déixeme abrir non don-0, pero déixeme abrir don-2. 1454 01:07:55,370 --> 01:07:57,350 Só para que teña visto algunha sintaxe aquí. 1455 01:07:57,350 --> 01:08:02,080 >> Sucede que o que acabamos de se está a usar JavaScript cru. 1456 01:08:02,080 --> 01:08:04,420 Polo tanto, esta é verdadeiramente a linguaxe JavaScript. 1457 01:08:04,420 --> 01:08:07,340 Algúns de vostedes poden saber de unha biblioteca chamada jQuery. 1458 01:08:07,340 --> 01:08:09,980 >> Así jQuery non é o mesmo cousa como JavaScript. 1459 01:08:09,980 --> 01:08:14,110 É só unha biblioteca que realmente intelixente cara escribiu e popularizado como 1460 01:08:14,110 --> 01:08:18,100 que case todos no mundo agora usa jQuery ao usar JavaScript. 1461 01:08:18,100 --> 01:08:20,890 E a primeira vista, honestamente, parece un pouco máis enigmática. 1462 01:08:20,890 --> 01:08:24,990 Pero vai atopar, especialmente se é alí para o seu proxecto final con web 1463 01:08:24,990 --> 01:08:29,029 desenvolvemento, verás que este limpa as cousas e vostede aforrar bastante 1464 01:08:29,029 --> 01:08:30,229 algunhas liñas de código. 1465 01:08:30,229 --> 01:08:33,189 >> Só ollar Entón imos como este formulario funciona. 1466 01:08:33,189 --> 01:08:35,664 Teña en conta o que eu eliminar aparentemente do meu HTML? 1467 01:08:35,664 --> 01:08:38,240 1468 01:08:38,240 --> 01:08:40,630 Non hai en enviar manipulador por así dicir. 1469 01:08:40,630 --> 01:08:41,470 Non hai ningún atributo. 1470 01:08:41,470 --> 01:08:43,359 Porque vostede sabe, o que Realmente non me gusta? 1471 01:08:43,359 --> 01:08:45,640 Eu me sentín como se está caendo en vellos hábitos alí. 1472 01:08:45,640 --> 01:08:49,340 Así como estaba comezando a sentir-se desleixado mesturarse tanto con CSS 1473 01:08:49,340 --> 01:08:52,149 HTML, porque está medio que xogando idiomas diferentes en todo o 1474 01:08:52,149 --> 01:08:56,180 lugar, do mesmo xeito que iso comezar a sentir como un mal camiño para ir ata onde 1475 01:08:56,180 --> 01:09:01,069 Estou poñendo o código JavaScript dentro da miña HTML no canto de factoring-lo. 1476 01:09:01,069 --> 01:09:02,279 >> Así que esta é a lección aquí. 1477 01:09:02,279 --> 01:09:05,080 En don-2.html, estou factoring-lo. 1478 01:09:05,080 --> 01:09:07,399 E eu estou facendo as cousas un pouco de forma diferente. 1479 01:09:07,399 --> 01:09:09,630 Por agora, eu vou acenar as mans o que iso realmente 1480 01:09:09,630 --> 01:09:10,590 debaixo do capó. 1481 01:09:10,590 --> 01:09:14,210 Pero por agora asumir que ese primeiro liña de código nesta biblioteca 1482 01:09:14,210 --> 01:09:18,170 chamado jQuery significa só cando o documento está preparado, faga o seguinte. 1483 01:09:18,170 --> 01:09:20,080 >> Como as páxinas web poden ter algún tempo para cargar. 1484 01:09:20,080 --> 01:09:23,029 Podes estar nunha internet lenta conexión, e pode estar xirando 1485 01:09:23,029 --> 01:09:25,290 e xirando, e, finalmente, el é cargado. 1486 01:09:25,290 --> 01:09:29,060 Esta liña de código só di esperar ata a páxina enteira estea listo, o documento 1487 01:09:29,060 --> 01:09:31,189 está preparado, antes de realizar este código. 1488 01:09:31,189 --> 01:09:34,390 >> E agora entende, este é, probablemente, o máis útil primeiro 1489 01:09:34,390 --> 01:09:36,189 sacar de jQuery. 1490 01:09:36,189 --> 01:09:42,140 Esta liña aquí é moi semellante en espírito para esta liña por moito máis tempo aquí. 1491 01:09:42,140 --> 01:09:46,920 Considerando que o código JavaScript cru, non existe un obxecto global documento que 1492 01:09:46,920 --> 01:09:50,460 ten unha función chamada getElementById () as persoas que escribiron 1493 01:09:50,460 --> 01:09:55,720 jQuery simplificado que dicir sinal de dólar, e logo, dentro 1494 01:09:55,720 --> 01:10:00,250 parénteses poñer dúas citas, e, a continuación, poñer un símbolo de hash seguido polo 1495 01:10:00,250 --> 01:10:02,250 ID único que quere pegar. 1496 01:10:02,250 --> 01:10:06,170 Entón, iso é equivalente a document.getElementById. 1497 01:10:06,170 --> 01:10:11,090 >> Mentres tanto,. Mostrar só significa en presentación de calquera forma está 1498 01:10:11,090 --> 01:10:14,240 referíndose á esquerda, ir adiante e realizar iso. 1499 01:10:14,240 --> 01:10:16,600 Pero isto é agora a curiosidade tamén. 1500 01:10:16,600 --> 01:10:19,560 Que é estraño sobre o que Teño destacado aquí? 1501 01:10:19,560 --> 01:10:23,840 1502 01:10:23,840 --> 01:10:28,594 Non só é unha especie de sintaticamente novo, tamén hai algo falta. 1503 01:10:28,594 --> 01:10:29,558 >> Audiencia: É só unha chamada de función? 1504 01:10:29,558 --> 01:10:31,970 Non se chama alerta? 1505 01:10:31,970 --> 01:10:32,440 >> DAVID Malan: Yeah. 1506 01:10:32,440 --> 01:10:35,450 Ben, entón alert () é baixo aquí, para ser xusto. 1507 01:10:35,450 --> 01:10:39,520 Pero non hai ningunha mención dun nome, como vostede sabe, foo ou 1508 01:10:39,520 --> 01:10:40,980 algo aquí enriba. 1509 01:10:40,980 --> 01:10:43,830 E, de feito, esta é unha das características JavaScript que é moi 1510 01:10:43,830 --> 01:10:45,370 poderoso, pero tamén moi novo. 1511 01:10:45,370 --> 01:10:47,460 E PHP realmente ten iso tamén. 1512 01:10:47,460 --> 01:10:49,500 >> Déixeme ir adiante e facer algo ben rápido. 1513 01:10:49,500 --> 01:10:52,030 Déixeme ir adiante e poñer isto aquí. 1514 01:10:52,030 --> 01:10:52,600 Déixeme facer. 1515 01:10:52,600 --> 01:10:53,690 Función. 1516 01:10:53,690 --> 01:10:56,455 Imos chamar ese manipulador (). 1517 01:10:56,455 --> 01:10:58,290 A función de manipulador por así dicir. 1518 01:10:58,290 --> 01:11:00,110 Algo que trata sobre algunha operación. 1519 01:11:00,110 --> 01:11:02,700 Déixeme limpar o meu retroceso. 1520 01:11:02,700 --> 01:11:04,380 E poñer isto aquí. 1521 01:11:04,380 --> 01:11:06,090 E poñer isto aquí. 1522 01:11:06,090 --> 01:11:06,470 Yep. 1523 01:11:06,470 --> 01:11:07,060 Aceptar. 1524 01:11:07,060 --> 01:11:10,300 >> Entón agora eu teño unha función chamada Handler () que realmente non sei 1525 01:11:10,300 --> 01:11:10,890 o que fai aínda. 1526 01:11:10,890 --> 01:11:12,710 El só aínda ten estas cousas. 1527 01:11:12,710 --> 01:11:13,900 Berros. 1528 01:11:13,900 --> 01:11:15,820 Levou moito. 1529 01:11:15,820 --> 01:11:18,490 Imos facelo. 1530 01:11:18,490 --> 01:11:18,990 Todo ben. 1531 01:11:18,990 --> 01:11:20,240 Sentímolo. 1532 01:11:20,240 --> 01:11:23,140 1533 01:11:23,140 --> 01:11:23,690 Todo ben. 1534 01:11:23,690 --> 01:11:24,720 Déixeme facelo. 1535 01:11:24,720 --> 01:11:25,020 Aceptar. 1536 01:11:25,020 --> 01:11:27,040 Isto parece bo e en liña recta para adiante agora. 1537 01:11:27,040 --> 01:11:29,090 Déixeme facelo. 1538 01:11:29,090 --> 01:11:29,860 Faga iso. 1539 01:11:29,860 --> 01:11:30,950 E Aceptar. 1540 01:11:30,950 --> 01:11:33,080 Entón, agora, imos poñer isto aquí. 1541 01:11:33,080 --> 01:11:35,840 1542 01:11:35,840 --> 01:11:37,270 Non hai máis a programación en tempo real. 1543 01:11:37,270 --> 01:11:37,900 Aceptar. 1544 01:11:37,900 --> 01:11:40,000 >> Entón, agora, imos voltar a onde a historia comezou. 1545 01:11:40,000 --> 01:11:43,530 Anteriormente, eu dixen que esta liña aquí significa que cando o documento estea listo, vai 1546 01:11:43,530 --> 01:11:44,380 adiante e facelo. 1547 01:11:44,380 --> 01:11:45,660 O que quero facer? 1548 01:11:45,660 --> 01:11:49,070 Ben, en concreto, quero ir adiante e faga o seguinte. 1549 01:11:49,070 --> 01:11:53,700 Executar esta liña de código, e logo o que quero facer é chamar este 1550 01:11:53,700 --> 01:11:56,370 funcionar cando o formulario é enviado. 1551 01:11:56,370 --> 01:11:57,730 >> Agora iso é que é interesante. 1552 01:11:57,730 --> 01:11:59,170 Isto non é en si mesmo unha función. 1553 01:11:59,170 --> 01:12:02,540 Repare que eu non estou poñendo parénteses aquí dunha forma normal. 1554 01:12:02,540 --> 01:12:06,800 Estou literalmente pasando por unha función chamada Handler () para outra función 1555 01:12:06,800 --> 01:12:10,800 chamado submit () como argumento que é como unha variable. 1556 01:12:10,800 --> 01:12:14,290 E esta é unha das características de JavaScript, estase a funcións 1557 01:12:14,290 --> 01:12:15,710 son realmente só obxectos. 1558 01:12:15,710 --> 01:12:18,350 En realidade, son realmente só variables de calquera tipo. 1559 01:12:18,350 --> 01:12:21,340 E se o nome da función Handler (), non hai ningunha razón pola que eu non podo 1560 01:12:21,340 --> 01:12:23,390 pasalo como un argumento aquí. 1561 01:12:23,390 --> 01:12:27,530 E isto significa que cando o formulario co ID de demostración é 1562 01:12:27,530 --> 01:12:29,320 presentados, chamar esta función. 1563 01:12:29,320 --> 01:12:32,770 >> Pero agora, se eu desfacer de todo isto, por que entón eu quizais facer 1564 01:12:32,770 --> 01:12:34,850 este un momento atrás? 1565 01:12:34,850 --> 01:12:36,840 Ben, esta é unha función anónima. 1566 01:12:36,840 --> 01:12:41,080 Porque, a verdade, podo entender por que eu son preocuparse en perder tempo declarando unha 1567 01:12:41,080 --> 01:12:45,540 función chamada Handler () só para chamar nun e só un lugar? 1568 01:12:45,540 --> 01:12:48,640 Se eu non ter nome, e eu non que chamalo máis dun lugar, 1569 01:12:48,640 --> 01:12:51,200 imos aplicar a función exactamente onde eu teño. 1570 01:12:51,200 --> 01:12:55,190 Que e así soporte JavaScript e PHP chámanse funcións anónimas que 1571 01:12:55,190 --> 01:12:57,900 me permite facer exactamente isto aquí. 1572 01:12:57,900 --> 01:12:59,570 >> Pero estamos só raiar a superficie. 1573 01:12:59,570 --> 01:13:02,430 Imos xogar con só un par exemplos finais aquí. 1574 01:13:02,430 --> 01:13:04,600 >> Se eu entrar quote.php. 1575 01:13:04,600 --> 01:13:07,160 1576 01:13:07,160 --> 01:13:11,870 Teña en conta que este é realmente un PHP función, un programa PHP, que escribín 1577 01:13:11,870 --> 01:13:15,270 espera que un parámetro HTTP chamada símbolo, e podo pasar en 1578 01:13:15,270 --> 01:13:16,730 un valor como FB. 1579 01:13:16,730 --> 01:13:20,010 E se nós realmente ollar para a fonte código, este é consultar un sitio de balde 1580 01:13:20,010 --> 01:13:23,680 chamado Yahoo Finance, como p-set sete, e está volvendo para me 1581 01:13:23,680 --> 01:13:26,580 algo aparentemente o formato coñecido é JSON - 1582 01:13:26,580 --> 01:13:28,010 JavaScript Object Notation. 1583 01:13:28,010 --> 01:13:28,810 É só un obxecto. 1584 01:13:28,810 --> 01:13:32,500 Respecte as chaves, as citas, do colonos e as comas. 1585 01:13:32,500 --> 01:13:34,720 >> Agora, con todo, iso é moi legal. 1586 01:13:34,720 --> 01:13:38,520 Porque eu probablemente pode utilizar unha programación linguaxe para xerar URLs 1587 01:13:38,520 --> 01:13:40,370 que se parecen con esta dinámica, non? 1588 01:13:40,370 --> 01:13:43,340 Podo cambiar isto para Google e volver de Google 1589 01:13:43,340 --> 01:13:47,930 prezo das accións de US $ 1,017.55. 1590 01:13:47,930 --> 01:13:49,640 Entón, imos ver se non podemos usar isto agora. 1591 01:13:49,640 --> 01:13:56,590 >> Déixeme ir ajax-0 aquí, que parecido co seguinte. 1592 01:13:56,590 --> 01:13:59,750 É só un sitio web que ten un formulario con un botón. 1593 01:13:59,750 --> 01:14:05,860 Deixe-me aquí, vai adiante e escribe YHOO ao símbolo das accións de Yahoo, prema Obter 1594 01:14:05,860 --> 01:14:10,530 Cita, e agora entende que comece unha alerta con 32,86. 1595 01:14:10,530 --> 01:14:14,050 >> Déixeme realmente ir a unha versión máis extravagante desta páxina, a versión dous, e 1596 01:14:14,050 --> 01:14:17,530 escriba digamos Microsoft, MSFT. 1597 01:14:17,530 --> 01:14:18,410 Obter cotización. 1598 01:14:18,410 --> 01:14:19,850 E agora entender, ningún aviso. 1599 01:14:19,850 --> 01:14:22,770 Teña en conta onde di prezo ser determinado? 1600 01:14:22,770 --> 01:14:27,060 Non é o máis simple de que os exemplos apunta para o que Gchat e Facebook 1601 01:14:27,060 --> 01:14:30,070 Chat, e Gmail, e outros tales sitios están a facer, en realidade, 1602 01:14:30,070 --> 01:14:31,290 cambiar a páxina web. 1603 01:14:31,290 --> 01:14:31,800 >> Teña en conta isto. 1604 01:14:31,800 --> 01:14:33,120 Déixeme volver cargar a páxina. 1605 01:14:33,120 --> 01:14:35,080 Déixeme abrir Inspector de Chrome. 1606 01:14:35,080 --> 01:14:36,890 Déixeme ir os elementos guía aquí. 1607 01:14:36,890 --> 01:14:42,310 Agora, teña en conta se eu zoom ata aquí e abrir tanto, entender que esta é a miña 1608 01:14:42,310 --> 01:14:44,500 HTML DOM - o meu modelo de obxecto de documento. 1609 01:14:44,500 --> 01:14:45,920 Este é o meu HTML. 1610 01:14:45,920 --> 01:14:48,750 Pero, agora, entender, a pesar de que ser un pouco difícil de velo en ambos 1611 01:14:48,750 --> 01:14:52,080 lugares á vez, se eu escribir no FB aquí enriba, teña en conta a parte inferior 1612 01:14:52,080 --> 01:14:54,110 da pantalla só. 1613 01:14:54,110 --> 01:14:57,720 >> É realmente cambiando meu HTML na Moscova. 1614 01:14:57,720 --> 01:15:01,670 E está facendo iso, pura e simplemente facendo algo así. 1615 01:15:01,670 --> 01:15:06,800 Se eu abrir ajax-2, teña en conta a posta en marcha algo tan sexy como 1616 01:15:06,800 --> 01:15:09,560 que, a pesar de ser moi feo, pero tan sofisticado como o que 1617 01:15:09,560 --> 01:15:11,910 funcionalmente, ten algúns HTML na parte inferior. 1618 01:15:11,910 --> 01:15:13,810 Pero teña en conta que eu usei para marcar. 1619 01:15:13,810 --> 01:15:16,640 Non usei iso antes, pero esta é como un, pero non forza 1620 01:15:16,640 --> 01:15:17,840 todo nunha nova liña. 1621 01:15:17,840 --> 01:15:20,830 E só fai unha rexión rectangular na mesma liña esencialmente. 1622 01:15:20,830 --> 01:15:22,870 >> Repare que eu dei-lle un número de identificación de prezo. 1623 01:15:22,870 --> 01:15:26,800 E ocorre que, usando o mesmo Biblioteca JavaScript, eu teño unha función 1624 01:15:26,800 --> 01:15:30,440 chamado quote () que se chama sempre que o formulario é enviado. 1625 01:15:30,440 --> 01:15:31,800 E o que eu estou facendo é iso. 1626 01:15:31,800 --> 01:15:35,730 Estou declarando unha variable en JavaScript chamado url, aforrar o valor 1627 01:15:35,730 --> 01:15:38,650 quote.php? símbolo =. 1628 01:15:38,650 --> 01:15:44,220 Noutras palabras, eu mesmo estou comezando para preparar unha solicitude HTTP, e despois 1629 01:15:44,220 --> 01:15:49,250 Estou concatenando para que con un plus calquera que sexa o elemento co ID 1630 01:15:49,250 --> 01:15:54,190 de símbolo, que é que campo ben aquí texto. 1631 01:15:54,190 --> 01:15:56,630 Así como tivemos formas no pasado. 1632 01:15:56,630 --> 01:16:01,450 >> E entón el se transforma en jQuery, se chamar. val (), que chama dun val 1633 01:16:01,450 --> 01:16:05,900 función, unha función de valor, que recibe o que o usuario inseriu dentro 1634 01:16:05,900 --> 01:16:08,920 E, a continuación, todo o tráfico de rede o que pasa é iso. 1635 01:16:08,920 --> 01:16:11,230 $. GetJSON. 1636 01:16:11,230 --> 01:16:13,720 >> E, como un aparte, sinal de dólar é só unha notación abreviada. 1637 01:16:13,720 --> 01:16:16,860 Realmente jQuery.getJSON. 1638 01:16:16,860 --> 01:16:21,520 Tiren-me para JSON desde esta URL, e cando a petición vén de volta, chamar este 1639 01:16:21,520 --> 01:16:26,550 función e pasar como argumento o que veu de volta dende o servidor. 1640 01:16:26,550 --> 01:16:31,205 >> Polo tanto, noutras palabras, se eu volver á navegador, e eu voltar quote.php, 1641 01:16:31,205 --> 01:16:35,590 o meu explorador está facendo é estar este bloque de datos. 1642 01:16:35,590 --> 01:16:38,930 E cando eu ir a esta páxina web aquí, entender se en vez de ir para a rede 1643 01:16:38,930 --> 01:16:43,820 pestana e limpa-la, e logo introduza algo así como GOOG a Google e gañe 1644 01:16:43,820 --> 01:16:46,340 Cita, teña en conta a páxina non se alterou. 1645 01:16:46,340 --> 01:16:50,990 Pero unha solicitude HTTP se fixo, eo que volvín aquí, se miramos cara ao 1646 01:16:50,990 --> 01:16:56,130 resposta é unha morea de JSON que ás finalmente con 1647 01:16:56,130 --> 01:16:58,070 esta liña simple aquí. 1648 01:16:58,070 --> 01:17:00,150 >> Datos é o que se obtén desde o servidor. 1649 01:17:00,150 --> 01:17:02,120 O prezo é o nome do clave que me interesa. 1650 01:17:02,120 --> 01:17:05,230 Entón data.price dáme iso. 1651 01:17:05,230 --> 01:17:07,540 >> Agora, con todo, e este é o último exemplo. 1652 01:17:07,540 --> 01:17:09,280 Podes facer aínda máis coa páxina. 1653 01:17:09,280 --> 01:17:12,440 Unha verdade, así dous. 1654 01:17:12,440 --> 01:17:14,780 Podemos traer de volta a tag, se lembrar diso. 1655 01:17:14,780 --> 01:17:15,850 Isto é JavaScript. 1656 01:17:15,850 --> 01:17:17,110 Podemos facelo. 1657 01:17:17,110 --> 01:17:17,690 Moi emocionante. 1658 01:17:17,690 --> 01:17:18,800 Imos deixar isto como un cliffhanger. 1659 01:17:18,800 --> 01:17:21,590 >> Pero o máis emocionante, pode facer cousas como esta. 1660 01:17:21,590 --> 01:17:25,940 Se eu fose para xeolocalización-1, verifica-se que Chrome sabe que estamos en 1661 01:17:25,940 --> 01:17:30,672 lonxitude latitude 42,37. -71,10. 1662 01:17:30,672 --> 01:17:32,940 Así, hai aínda máis alá á súa disposición. 1663 01:17:32,940 --> 01:17:34,290 Pero máis sobre iso a próxima semana. 1664 01:17:34,290 --> 01:17:35,540 Vexo vostede luns. 1665 01:17:35,540 --> 01:17:37,558