рд╕рд░реНрд╡рд░ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди: NodeJS + D3.js + PhantomJS

рдиреЛрдб + рдлреИрдВрдЯрдо
рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдЬрд╝реЛрд░ рдерд╛ - рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдЪрд╛рд░реНрдЯ рдкрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рд╕рд░рд▓ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рдореМрдЬреВрджрд╛ рдЪрд╛рд░реНрдЯ рдХреЗ рд╕рдорд╛рди рд╕рдВрднрд╡ рд╣реИред
рд╣рд╛рдВ, рдпрд╣ рд╕рд╣реА рд╣реИ, рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА d3.js. рдкрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдкреВрд░реНрд╡рдзрд╛рд░рдгрд╛ рд▓рд╛рдЧреВ рдереА ред
рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЬрдЯрд┐рд▓ Google-рдЪрд╛рд▓рд┐рдд рдЬрд╛рдВрдЪ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрджреНрдзрддрд┐ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рдереА рдФрд░ рдкрд╣рд▓реА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ рд╡рд┐рдХрд▓реНрдк рдиреЛрдб + рдкреНрд░реЗрдд рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛ рдерд╛ред

рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдкреЛрд╕реНрдЯ рдХреА рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдкреВрдЫрддрд╛ рд╣реВрдВред


рдмреЛрд░рд┐рдВрдЧ рдкрд░рд┐рдЪрдп


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

рддреНрдпрд╛рдЧ
рд╣рдорд╛рд░реА рдЯреАрдо рдореЗрдВ рджреЛ рдЕрдиреБрднрд╡реА рдЬрд╛рд╡рд┐рд╕реНрдЯ рдФрд░ рджреЛ "рдкреЙрд▓реАрдЧреНрд▓реЙрдЯреНрд╕" (рдЬрд╛рд╡рд╛ / рд╕реНрдХреЗрд▓рд╛ + рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ) рд╣реИрдВред рд╣рдо рдЦреБрдж рдХреЛ рдЕрдЪреНрдЫрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░ рдорд╛рдирддреЗ рд╣реИрдВ рдФрд░ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдФрдЬрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рдЬрд╛рд╡рд╛ рдкрд░ рдЬреЛрд░ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╕рд╛рдордЧреНрд░реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ рдкреНрд░рдерд╛рдУрдВ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ "рдЧреИрд░-рд░реВрдврд╝рд┐рд╡рд╛рджреА" рд▓рдЧрддреА рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдФрд░ рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рдореЗрдВ рд╕рдбрд╝реЗ рд╣реБрдП рдЕрдВрдбреЗ рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВ - рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдкреНрддрд╛рд╣ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕рд╛рдкреНрддрд╛рд╣рд┐рдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдБ рдФрд░ рдкреВрд░реНрд╡рд╡реНрдпрд╛рдкреА + рдбреЗрдореЛ рд╣реИрдВред рдпрд╣ рдЕрдиреБрд╕рдВрдзрд╛рди рдФрд░ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХреА рдЦреЛрдЬ рдкрд░ рдХрдИ рд╕реАрдорд╛рдПрдВ рд▓рдЧрд╛рддрд╛ рд╣реИред
рд╕рдорд╛рдзрд╛рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рдордп, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░реЙрдХ рдкрд░ "рдбрд┐рдЬрд┐рдЯрд▓ рдЪрдмрд╛рдиреЗ рд╡рд╛рд▓реА рдорд╢реАрдиреЗрдВ" рдереАрдВ рдФрд░ рдиреЛрдб рдкрд░ рдмрд╛рдХреА рд╕реЗрд╡рд╛рдПрдВ рдереАрдВред

рджрд┐рд▓


рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ




рдХреНрдпреЛрдВ рдПрдХ рдиреЛрдб рдФрд░ рдПрдХ рдкреНрд░реЗрдд?


рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд░рд╕рд░реА рдЕрдзреНрдпрдпрди рдХреЗ рджреМрд░рд╛рди, рддреАрди рд╡рд┐рдХрд▓реНрдк рдЦреЛрдЬреЗ рдЧрдП:
  1. рдПрд╕рд╡реАрдЬреА рдХреЛ рдкреАрдПрдирдЬреА рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдШрд░-рдкреЗрдбрд╝ рдФрд░ рдЫрд╡рд┐ рдЬрд╛рджреВ рдХреЗ рдЬреЗрдПрд╕-рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ )ред
  2. рд░реЙрдХ (рдпрд╛ рд░реЙрдХ рд╕рдордХрдХреНрд╖реЛрдВ ) рдореЗрдВ рдЪрд╛рд░реНрдЯ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдбреА 3 рдХреЗ рддрд╣рдд рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░реЗрдВ
  3. рдПрдХ рдЪрдЯреНрдЯрд╛рди / рдиреЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдкреНрд░реЗрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рд╡рд┐рдХрд▓реНрдк рд╕рдВрдЦреНрдпрд╛ 1 рдмрд╛рдИрдВ рдУрд░ рд╕реАрдПрд╕рдПрд╕-рд╢реИрд▓рд┐рдпреЛрдВ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЕрднрд┐рдпрд╛рди рдХрд╛ рд╕рд╡рд╛рд▓ рдЦреБрд▓рд╛ рд╣реИ (рдпрд╣ рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЛрдб рдХрд╛ рд╡реЛрдХреЗрд╢рди рдирд╣реАрдВ рд╣реИ)ред
рд╡рд┐рдХрд▓реНрдк рд╕рдВрдЦреНрдпрд╛ 2 рдЙрдЪрд┐рдд рд▓рдЧ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди sciatic рддрдВрддреНрд░рд┐рдХрд╛ рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рджрд░реНрдж рдХреА рдЧрд╛рд░рдВрдЯреАред
рд╡рд┐рдХрд▓реНрдк рдирдВрдмрд░ 3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред

рдмрд╛рдж рдХреЗ рдЕрдзреНрдпрдпрди рдФрд░ рдкреНрд░рдпреЛрдЧреЛрдВ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐:

рдРрд╕рд╛ рдкреБрд▓ рдХреНрдпрд╛ рд╣реИ?
рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рдирд┐рдХрд▓рд╛ред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдмрд╛рд╕реА рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╢реБрд░реВ рдореЗрдВ рдкреНрд░реЗрдд рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рдореБрдЭреЗ рдореЙрдбреНрдпреВрд▓ рдбрд┐рдмрдЧ рдореЗрдВ рд╕рд┐рд░ рдШреБрдорд╛рдирд╛ рдкрдбрд╝рд╛ рдФрд░ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдЧрд┐рдердм рдкрд░ рд╕рдореБрджрд╛рдп рдХреЛ рдЯреНрд░реЛрд▓ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдкреНрд░реЗрдд рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдмрд╛рд╣рд░реА рдПрдкреА рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдиреЛрдб рдХреЗ рд▓рд┐рдПред рд▓реЗрдХрд┐рди рдЖрдВрддрд░рд┐рдХ рдПрдкреАрдЖрдИ рдХреЛ рд╕реЙрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреБрдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлреИрдВрдЯрдо рдореЗрдВ рдЦреЛрд▓реЗ рдЧрдП рдкреГрд╖реНрда рдкрд░ рдЕрд▓рд░реНрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ред

рд▓реЗрдЦрдХ рдХреЛ рдЙрд╕рдХреА рдЖрд╡рд┐рд╖реНрдХрд╛рд░рд╢реАрд▓рддрд╛ рдХрд╛ рд╕рдореНрдорд╛рди!

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реИ:
  1. рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдИ рдЧрдИ рд╣реИ рдЬреЛ рдкреНрд░реЗрдд рдХреЗ рдЕрдВрджрд░ рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧреА
  2. рд╕рдВрд▓рдЧреНрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯрдм рдкреЗрдЬ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  3. рдЪреЗрддрд╛рд╡рдиреА рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╢реНрд░реЛрддрд╛ рдЬрд┐рдирдореЗрдВ рд╕реЙрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда рдХреА "рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛" рд╣реЛрдЧреАред рд╕рдВрджреЗрд╢ рдХреЛ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  4. рдПрдХ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рд╕рд░реНрд╡рд░ рдиреЛрдб рдкрд░ рдЙрдард╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреЗрдЬ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ рдЕрдиреБрд░реЛрдз рджреЗрддрд╛ рд╣реИред
  5. рдкреНрд░реЗрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдФрд░ рдПрдХ рдбрдореА рдкреЗрдЬ рдЙрд╕реЗ рдЦрд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  6. рдореЙрдбреНрдпреВрд▓ "рдорд┐рд░рд░" рдПрдкрд┐ рдлреИрдВрдЯрдо рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдмрди рдЬрд╛рддреА рд╣реИрдВ; рдкреНрд░реЗрдд рдореЗрдВ рд╡реЗ рд▓рдЧрднрдЧ рд╕рднреА рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИрдВ)



"рдлреИрдВрдЯрдо + рдиреЛрдб" рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рд╡рд┐рд▓рдореНрдмрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЖрдк рд╕рд░реНрд╡рд░ рдХреА рддрд░рдл рдЧреНрд░рд╛рдлрд╝ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдореМрдЬреВрджрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдлреИрдВрдЯрдо рдПрдХ рд╡реЗрдмрдХрд┐рдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдШрд░ рдХреЗ рдкреЗрдбрд╝, рд╢реИрд▓рд┐рдпреЛрдВ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкреВрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдЖрдкрдХреЛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдкреГрд╖реНрда рдХреА рддрд╕реНрд╡реАрд░реЗрдВ рд▓реЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдирд┐рд░реНрдорд╛рдг рдХреЛрдб рдХреЗ рджреЛрд╣рд░рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ!

рдиреБрдХрд╕рд╛рди
рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрдд, рдЗрд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП :)
sudo apt-get install phantomjs
рдпрд╛
brew install phantomjs
рдЗрди рдЬрд╛рджреВрдИ рд╢рдмреНрджреЛрдВ рдХреЗ рдмрд╛рдж, рдкреБрд▓ рд╡реЗрдмрдкреЗрдЬ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рджреМрд░рд╛рди, рдореБрдЭреЗ рдиреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдкрд╣рд▓рд╛ рдореЙрдбреНрдпреВрд▓ рдирд┐рдХрд▓рд╛ рдмрд▓реНрдХрд┐ рдЦрд░рд╛рдм рдФрд░ рдЯреЗрдврд╝рд╛ (рдкрд┐рдЫрд▓рд╛ рд╕реНрдкреЙрдЗрд▓рд░ рджреЗрдЦреЗрдВ), рдЗрд╕рд▓рд┐рдП рдЪреБрдирд╛рд╡ рдиреЛрдб-рдлреИрдВрдЯрдо рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛ред
рджреБрдирд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдереА - рдПрдкреАрдЖрдИ рдкреНрд░рд▓реЗрдЦрди рдХреА рдХрдореАред

рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдкреНрд░рд╣рд╛рд░ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╕рдВрднрд╡ рдерд╛:
  • рдкреЗрдЬ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдлреИрдВрдЯрдо рдЗрдВрдЬреЗрдХреНрд╢рди ( page.indectJs ) рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЗрд╡рд▓ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдкреВрд░реНрдг рдкрде рдХреЗ рд╕рд╛рдеред
  • page.includeJs рдореЗрдВ рдкреВрд░реНрдг URL рдореЗрдВ рдкреГрд╖реНрда рдореЗрдВ ( page.includeJs ) рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ , рд▓реЗрдХрд┐рди рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ API рдкреЗрдЬ.includeJs рдХрд╛ рдЕрдиреБрдмрдВрдз рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдВрдмрдВрдзреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рджреВрд╖рд┐рдд рд╣реИ ред
  • рдЖрдХрд╛рд╢ рдореЗрдВ рддрд╛рд░реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд╛рд░рдг, рдлреИрдВрдЯрдо .
    рдЬреЛрдбрд╝рдХрд░ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ .
    .

    рдкреНрд░реЗрдд рдкреГрд╖реНрда рдХреЗ рдЕрдВрджрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП



рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдирд┐рд░реНрдгрдп


рдореИрдВ рдХреЛрдб рдХреЗ "рдкрд╛рд╕реНрддрд╛" рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд░ рд╕реНрд╡рд░ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЕрдЪреНрдЫрд╛ рдпрд╛ рдмреБрд░рд╛ рдЙрдкрдпреЛрдЧ - рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВ!

 //       (    package.json) var phantom = require("node-phantom") //  , vow = require("vow") //   - , cfg = require("../config") //       , fs = require('fs') //      , pi; //          exports.init = function () { if (pi) { pi.exit(); } phantom.create(function (err, instance) { pi = instance; }); } //        -   exports.render = function (dataset, opts) { var promise = vow.promise(); //       pi.createPage(function (err, page) { //       ,   page.set("viewportSize", opts.viewport); //    d3    (.  " ") var d3Path = __dirname + "/../client/scripts/vendor/d3.v3.js"; //     ,    d3 // type -    (line, bar, pie) //   chart.xxx.js      var chartJs = __dirname + "/../client/scripts/chart." + opts.type + ".js"; //        var chartCss = __dirname + "/../client/styles/charts.css"; var innerStyle = ""; //   //    ? ?    injectLib_(page, d3Path)() .then(injectLib_(page, chartJs)) .then(readCssStyles_(chartCss)) .then(drawChart_(page, {dataset: dataset, innerCss: innerStyle}, opts)) .then(function (res) { //   ,       promise.fulfill({filename: res.filename}); }) .fail(function (err) { promise.reject(err) } ) }); return promise; } //       () //   -    " " function readCssStyles_(chartCss) { return function(){ var prom = vow.promise(); fs.readFile(chartCss, 'utf8', function (err,innerCss) { if (err) { console.log(chartCss + ": read failed, err: " + err); prom.reject(chartCss + ": read failed, err: " + err); } else { console.log(chartCss + " read"); prom.fulfill(innerCss); } }); return prom; } } function injectLib_(page, path) { return function () { var prom = vow.promise(); //      ,       page.evaluate page.injectJs(path, function (err) { if (err) { console.log(path + " injection failed") prom.reject(path + " injection failed"); } else { console.log(path + " injected") prom.fulfill(); } }); return prom; } } function drawChart_(page, data, opts) { return function (innerCss) { data.innerCss = innerCss; var prom = vow.promise(); //          //   -  "".        //  ,      ,    page.evaluate(function (data) { //        //    data = JSON.parse(data); //       //     charts.xxx.js charts.line("body",data.dataset); //    ,          var style = document.createElement("style"); style.innerHTML = data.innerCss; document.getElementsByTagName("head")[0].appendChild(style); } , function (err, result) { if (err) { prom.reject("phantomjs evaluation failed : " + err) } //             //   png, pdf, gif  jpeg var filename = cfg.server.chartsPath + '/' + opts.type + "_" + Date.now() + ".png"; var savingPath = "client" + filename; //        page.render(savingPath, function (err, res) { console.log("Saving image: " + filename); page.close(); prom.fulfill({filename: filename}); }); }, JSON.stringify(data)); return prom; } } 


рдкреБрдирд╢реНрдЪ
рдкреНрд░рд╢реНрди, рдЗрдЪреНрдЫрд╛рдПрдВ, рд░рдЪрдирд╛рддреНрдордХ рдФрд░ рдЯреНрд░реЛрд▓рд┐рдВрдЧ - рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВред
"рдорд╣рд╛рди рдФрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдореЗрдВ рдЧрд▓рддрд┐рдпрд╛рдБ?" - рдкреАрдПрдо рдореЗрдВред
рдореБрдЭреЗ рд╕рднреА рдкрд╣рд▓реБрдУрдВ рдкрд░ рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реБрдирдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА - рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛, рд▓реЗрдЦ рдХреА рдЧреБрдгрд╡рддреНрддрд╛, рдкреНрд░рд╕реНрддреБрддрд┐ рд╢реИрд▓реАред

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


All Articles