рдкреНрдпрд╛рд░рд╛ рдФрд░ рд╕реНрдорд╛рд░реНрдЯ рд╣реЛрдирд╛ рдмрдВрдж рдХрд░реЛ

рдпрд╣ рдкрд╛рда рдХреБрдЦреНрдпрд╛рдд (рдХрдо рд╕реЗ рдХрдо рдкрд╛рдпрдерди рд╕рдореБрджрд╛рдп рдореЗрдВ) рдЕрд░реНрдорд┐рди рд░реЛрдирдХрд░ рдХреЗ рд▓реЗрдЦ 'рд╕реНрдЯреЙрдк рдмреАрдЗрдВрдЧ рдХреНрдпреВрдЯ рдПрдВрдб рдХреНрд▓реАрд╡рд░' рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИред

рдЕрдкрдиреЗ рдЦрд╛рд▓реА рд╕рдордп рдореЗрдВ рдЕрдВрддрд┐рдо рджрд┐рди рдореИрдВ рдПрдХ рдЕрдиреБрд╕реВрдЪрдХ рдмрдирд╛ рд░рд╣рд╛ рдерд╛ред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╕рд░рд▓ рдерд╛: AngularJS рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд╢реНрд╡-рдорд┐рддреНрд░ рдХрд╛ рдПрдХ рдХреНрд▓реЛрди рдмрдирд╛рдПрдВред

рдФрд░ рдЖрдкрдХреЛ рдкрддрд╛ рд╣реИ рдХреНрдпрд╛? рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдордЬреЗрджрд╛рд░ рдирд╣реАрдВ рдерд╛ред рдореИрдВ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдирд╛рд░рд╛рдЬрд╝ рдирд╣реАрдВ рд░рд╣рд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рдХреБрдЫ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдорддреМрд░ рдкрд░ рдореИрдВ рдЬрд▓реНрджреА рд╕реЗ рдЕрд╕рдВрддреЛрд╖ рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рд╣реВрдВ (рдореИрдВ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдЕрдкрдиреЗ рдЕрдиреБрдпрд╛рдпрд┐рдпреЛрдВ рд╕реЗ рдорд╛рдлреА рдорд╛рдВрдЧрддрд╛ рд╣реВрдВ)ред

рдореИрдВ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рдХреЛрдб рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рд╛ред рдЖрдорддреМрд░ рдкрд░ рдореИрдВ рдХреЗрд╡рд▓ jQuery, рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдФрд░ рдХрднреА-рдХрднреА AngularJS рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдмрд╛рд░ рдореИрдВ рд╕рднреА рдореЗрдВ рдЧрдпрд╛ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рддреГрддреАрдп-рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ jQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдЖрдк (рдФрд░ рдХреНрдпреЛрдВ?) рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдФрд░ AngularJS рдХреБрдЫ UI рдШрдЯрдХреЛрдВ (рдХреЛрдгреАрдп-рдпреВрдЖрдИ рдФрд░ jQuery UI рдмрд╛рдЗрдВрдбрд┐рдВрдЧ) рдХреЗ рд╕рд╛рдеред рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдореИрдВ рддреБрд░рдВрдд рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдХрд┐рд╕реА рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рдХреА рдЖрд▓реЛрдЪрдирд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдХреЛрдИ рдореЗрд░реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ, рддреЛ рдЙрдирдХрд╛ рдХреЛрдб рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рдФрд░ рдХрднреА-рдХрднреА рдЗрд╕рд╕реЗ рднреА рдмрджрддрд░ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдЬреНрдпрд╛рджрд╛ рд╕рдордп рдирд╣реАрдВ рджрд┐рдпрд╛, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рдЗрд╕ рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЬреНрдпрд╛рджрд╛ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВрдиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ (рдХрдо рд╕реЗ рдХрдо рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ) рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рднрдпрд╛рдирдХ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрддрд░рдирд╛рдХ рдкреНрд░рд╡реГрддреНрддрд┐ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛, рдФрд░ рд╕реЛрдЪрд╛ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдореБрдЭреЗ js рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рд╕рднреА рдЗрд╕ рддрдереНрдп рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдереЗ рдХрд┐ рд╣рд░ рдХреЛрдИ рднрд╛рд╖рд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓рд╛рдирдд рдирд╣реАрдВ рджреЗрддрд╛ рдерд╛ред

рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХрд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЯрд╛рдЗрдкрдмреАрд╣реЗрдб.рдЬреЗрдПрд╕ рдСрдЯреЛрдХрдВрдкреНрд▓реАрд╢рди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ 3mb рд╢рд╣рд░ рдХреЗ рдирд╛рдо рднреЗрдЬрдиреЗ рдХреА рдореЗрд░реА рднреЛрд▓реА рдХреЛрд╢рд┐рд╢ рдиреЗ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдзреАрдореА рдпреВрдЖрдИ рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛ред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЕрдм рдХреЛрдИ рднреА рд╕реНрдорд╛рд░реНрдЯ рд╡реНрдпрдХреНрддрд┐ рдПрдХ рд╕рд╛рде рдСрдЯреЛ-рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЗрддрдирд╛ рдбреЗрдЯрд╛ рдирд╣реАрдВ рднреЗрдЬреЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдзреАрдореЗ рдбреЗрдЯрд╛ рд▓реЛрдбрд┐рдВрдЧ рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рдЬреЛ рдореИрдВ рд╕рдордЭ рдирд╣реАрдВ рд╕рдХрд╛, рдХреНрдпреЛрдВрдХрд┐ рднрд▓реЗ рд╣реА 26,000 рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд░реЗрдЦреАрдп рдЦреЛрдЬ рд╣реЛ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрддрдирд╛ рдзреАрдорд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкреНрд░рд╛рдЧрд┐рддрд┐рд╣рд╛рд╕


рдЗрд╕рд▓рд┐рдП, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдзреАрдорд╛ рдерд╛ - рдЬрд╛рд╣рд┐рд░ рд╣реИ, рддреНрд░реБрдЯрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдореЗрд░реЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ рдереАред рд▓реЗрдХрд┐рди рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрдПрдбрд╣реЗрдб рд╡рд┐рдЬреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдкреНрд░рджрд░реНрд╢рди рдХрдо рд╣реЛ рдЧрдпрд╛ред рдФрд░ рдХрднреА-рдХрднреА рдмрд╣реБрдд рдЕрдЬреАрдмреЛрдЧрд░реАрдм рддрд░реАрдХреЗ рд╕реЗред рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡рд╣ рдХрд┐рддрдирд╛ рдкрд╛рдЧрд▓ рдерд╛, рдореИрдВ рдЖрдкрдХреЛ рдХреБрдЫ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд░реАрдХреНрд╖рдг рджреЗ рджреВрдБрдЧрд╛:

  1. рд╣рдо "рд╕реИрди" рдЯрд╛рдЗрдк рдХрд░рдХреЗ рд╕реИрди рдлреНрд░рд╛рдВрд╕рд┐рд╕реНрдХреЛ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред ~ 200 рдореАред
  2. рд╣рдо "рдлреНрд░реИрдВрдХ" рд▓рд┐рдЦрдХрд░ рд╕реИрди рдлреНрд░рд╛рдВрд╕рд┐рд╕реНрдХреЛ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред ~ 200 рдореАред
  3. рд╣рдо рд╕реИрди рдлреНрд░рд╛рдВрд╕рд┐рд╕реНрдХреЛ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ "san fran" рдЯрд╛рдЗрдк рдХрд░рдХреЗред рджреВрд╕рд░рд╛ред
  4. рд╣рдо рд╕реИрди рдлреНрд░рд╛рдВрд╕рд┐рд╕реНрдХреЛ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдлрд┐рд░ рд╕реЗ "рд╕рд╛рди" рдЯрд╛рдЗрдк рдХрд░ рд░рд╣реЗ рд╣реИрдВред рджреВрд╕рд░рд╛ред

рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ? рдпрджрд┐ рд╣рдо рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдХреБрдЫ рдЦреЛрдЬрддреЗ рд╣реИрдВ рддреЛ рдЦреЛрдЬ рдХреИрд╕реЗ рдЯреВрдЯ рдЬрд╛рддреА рд╣реИ?

рдореИрдВрдиреЗ рдЬреЛ рдкрд╣рд▓реА рдЪреАрдЬрд╝ рдХреА, рдирдП рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рдФрд░ рдмрд╣реБрдд рдЬрд▓реНрджреА рдЙрд╕рдиреЗ рдЯрд╛рдЗрдкрд┐рдпрд╛рд╣реЗрдб рдореЗрдВ рдЪреАрдЬреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдкрд╛рдпрд╛ рдЬреЛ рдмрд╣реБрдд рдЕрдЬреАрдм рдерд╛ред

рдЕрдбрд╝рдЪрди рдмрд╣реБрдд рдЬрд▓реНрджреА рдорд┐рд▓ рдЧрдИ рдереАред рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдПрдХ рдЕрдЬреАрдм рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЪреБрдирддреЗ рд╕рдордп рд╕рдорд╕реНрдпрд╛ рдПрдХ рдорд╣рд╛рдХрд╛рд╡реНрдп рдорд┐рд╕ рдереАред рдореИрдЪреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдлреИрдВрд╕реА рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдРрд╕реА рдЕрджреНрднреБрдд рдЪреАрдЬреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рдЧреБрдЬрд░рдирд╛ рдФрд░ рдлрд┐рд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдореВрд▓ рд╕реВрдЪреА рд╕рд╣рд┐рдд рдЕрдиреНрдп рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрдирд╛ред рдЬрдм рдкрд╣рд▓реА рд╕реВрдЪреА рдореЗрдВ 6,000 рдЖрдЗрдЯрдо рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реИрдЦрд┐рдХ рдЦреЛрдЬ рд╢реБрд░реВ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЖрдЗрдЯрдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реВрдЪреА рдореЗрдВ рд╣реИ, рдпрд╣ рд╕рдм рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред

рд╣рд╛рдВ, рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЖрдк рдереЛрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдиреЛрдЯрд┐рд╕ рднреА рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдЧрдП рд╣рдЬрд╛рд░реЛрдВ рд╢рд╣рд░ рдФрд░ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдереЗред рд╕рд╛рде рд╣реА, рд╣рд░ рдХреЛрдИ рд╣рд░ рджрд┐рди рдЦреЛрдЬ рдХрд╛рд░реНрдп рдирд╣реАрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХрд┐рд╕реА рдХреЛ рджреЛрд╖ рдирд╣реАрдВ рджреЗрддрд╛ред

рд▓реЗрдХрд┐рди рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдбрд┐рдмрдЧ рдХрд░рдирд╛ рдерд╛, рдореИрдВ рдЙрди рд╕рднреА рдХреЗ рд╕рдмрд╕реЗ рдЕрдЬреАрдм рдХреЛрдб рдореЗрдВ рдЖрдпрд╛ рдерд╛ рдЬреЛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рджреЗрдЦрд╛ рдерд╛ред рдЖрдЧреЗ рдХреЗ рд╢реЛрдз рдХреЗ рдмрд╛рдж, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕рдорд╛рди рд╕рдирдХреА рдХреЗрд╡рд▓ рдЯрд╛рдЗрдкрд┐рдпрд╛рд╣реЗрдб рдореЗрдВ рдирд╣реАрдВ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореБрдЭреЗ рдЕрдм рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЬреЗрдПрд╕ рдПрдХ рддрд░рд╣ рдХрд╛ рд╡рд╛рдЗрд▓реНрдб рд╡реЗрд╕реНрдЯ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд░реНрд╖ 2003 рдХреЗ PHP рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдпрд╣ рдХрдо рд▓реЛрдЧреЛрдВ рдХреЛ рдЪрд┐рдВрддрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рддрд░рдл рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдирд╣реАрдВред рдЖрдкрдХреЛ рд╕реНрд▓реЛ-рд░рдирд┐рдВрдЧ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рд╕реНрдорд╛рд░реНрдЯ рдХреЛрдб


рдкрд╣рд▓рд╛ рджрд░реНрдж рдмрд┐рдВрджреБ рд╡реЗ рд▓реЛрдЧ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЬреЗрдПрд╕ рдПрдХ рдкреНрдпрд╛рд░рд╛ рдФрд░ 'рд╕реНрдорд╛рд░реНрдЯ' рднрд╛рд╖рд╛ рд▓рдЧрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдореБрдЭреЗ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд▓рдЧрддрд╛ рд╣реИ рдЬрдм рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реБрдП рдФрд░ рдмрдЧ рдвреВрдВрдврддреЗ рд╣реБрдПред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рдореБрд╣рд╛рд╡рд░реЛрдВ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╣реИрдВ рдпрд╛ рдЕрдЧрд░ рдХрд┐рд╕реА рдиреЗ рд╕рд┐рд░реНрдл рдЧрд▓рддреА рдХреА рд╣реИред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореИрдВ typeahead.js рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рджреВрдВрдЧрд╛:
_transformDatum: function(datum) {
    var value = utils.isString(datum) ? datum : datum[this.valueKey],
        tokens = datum.tokens || utils.tokenizeText(value), 
        item = {
            value: value,
            tokens: tokens
        };
    if (utils.isString(datum)) {
        item.datum = {};
        item.datum[this.valueKey] = datum;
    } else {
        item.datum = datum;
    }
    item.tokens = utils.filter(item.tokens, function(token) {
        return !utils.isBlankString(token);
    });
    item.tokens = utils.map(item.tokens, function(token) {
        return token.toLowerCase();
    });
    return item;
}

, . , тАУ c . ? - . , - . value- ( ) . тАУ ( ) . , .

, :
{
    "value": "San Francisco",
    "tokens": ["san", "francisco"],
    "extra": {}
}

:
{
    "value": "San Francisco",
    "tokens": ["san", "francisco"],
    "datum": {
        "value": "San Francisco",
        "tokens": ["san", "francisco"],
        "extra": {}
    }
}

, , , , datum- , . : , . , , 10MB.

JavaScript, . , , . ''.

. : datum, ? . , тАУ , - . , JS , - .

, , . , JS-, , map. map , ["1", "2", "3"].map(parseInt) [1, NaN, NaN].

. :
_processData: function(data) {
    var that = this, itemHash = {}, adjacencyList = {};
    utils.each(data, function(i, datum) {
        var item = that._transformDatum(datum), id = utils.getUniqueId(item.value);
        itemHash[id] = item;
        utils.each(item.tokens, function(i, token) {
            var character = token.charAt(0), adjacency =
                adjacencyList[character] || (adjacencyList[character] = [ id ]);
            !~utils.indexOf(adjacency, id) && adjacency.push(id);
        });
    });
    return {
        itemHash: itemHash,
        adjacencyList: adjacencyList
    };
}

: utils.indexOf тАУ , utils.getUniqueId .

, - O(1), hashmap. . 100 000 , , .

:
utils.each(item.tokens, function(i, token) {
    var character = token.charAt(0), adjacency =
        adjacencyList[character] || (adjacencyList[character] = [ id ]);
    !~utils.indexOf(adjacency, id) && adjacency.push(id);
});

, . , ? !~utils.indexOf(...) && if (utils.indexOf(...) >= 0)? , hashmap adjacencyListтАж , ID , . - тАШтАЩ .

тАУ + ( , noop) . +value тАУ , parseInt(value, 10).

, Ruby. Ruby , '': false nil. тАУ ''. . JS . тАУ .

, "" false. , . . jQuery each this. , this , , .

:
> !'';
true

> !new String('');
false

> '' == new String('');
true


Ruby, JavaScript. . , , . - , , .

~ indexOf , -1 , . , , ┬л ┬╗.

┬л┬╗


, , JS . , Python тАУ , runtime . JavaScript . AngularJS.

, JS , . . . , , .

, Angular , , , , . , тАУ , . , , , ' ' тАУ .

, , . - . , , .

, Angular DOM . , , firingтАЩ . .


, . JavaScript. API stateful-. , , . moment-. , , foo.add('minutes', 1) . , , API . , , , .

, JS API, тАШтАЩ . , Python. Python , immutable- . , , first-, -.

┬л ┬╗


Angular, . UI JavaScript, . . , . fooBar, DOM foo-bar. ? , style DOM API, . , , . . Angular-, .

Angular JS- . AnguarJS, , . , JS: . . . Angular, .

?


Python JavaScript . , Angular URL . , . ? , - , .

Angular. JS HTML. DOM, , . - HTML :
function escapeHTML(string) {
    var el = document.createElement('span');
    el.appendChild(document.createTextNode(string));
    return el.innerHTML;
}

URL:
function getQueryString(url) {
    var el = document.createElement('a');
    el.href = url;
    return el.search;
}

, .

- , , , , . JS-.

┬л ┬╗


PHP , , . . , . : , , . , , PHP- mod-. - , . , register_globals, SQL, .

JS . , , . , , .

: , . PHP , JS ┬л ┬╗ , .

?


, JavaScript. , , , PHP: , , , , . , , , , .

Python-. , , , . Django , , .

, JavaScript- , .

Armin Ronacher,
09/12/2013

Source: https://habr.com/ru/post/In205616/


All Articles