2009-09-11 5 views
1

이것은 다소 일반적인 이슈처럼 보입니다. 그리고 일반적인 함정, 베스트 프랙티스, 최선의 접근법, 보안 문제 등이 나중에 클라이언트 측에로드 될 서버에서 자바 스크립트를 작성할 때 무엇인지 궁금합니다.서버에서 클라이언트 측 JavaScript를 생성 할 때 주된 관심사는 무엇입니까?

FWIW, Ruby에서이 작업을 수행하고 있으며 JQuery도 사용하고 있습니다. 기본적으로 폼 빌더입니다. 여기에 내가하고있는 일이있다 :

정적 양식 입력 (예 : 라디오, 체크 박스 및 몇 가지 복잡한 입력뿐만 아니라)을 동적으로 만드는 관리자 양식 작성 도구가있다. 해당 자바 스크립트 이벤트 처리기를 생성해야한다. (jquery 사용). 기본적으로 html 빌더 lambdas와 이벤트 핸들러 lambdas가 각 미리 정의 된 입력 유형에 매핑됩니다. 즉, select는 {'select'=>[select_builder_lamb, select_js_handler_lamb]}과 유사하므로 html 유형을 조회하고 관리자가 양식을 만드는 데 필요한 코드를 생성 할 수 있습니다. "좋아하는대로 ". 이것은 훌륭하게 작동합니다.

이제 이것을 직렬화하고 등록 페이지가 요청 될 때 다시로드할지, "눈에 거슬리지 않는"파일에 자바 스크립트를 쓰는지, 원시 HTML 및 자바 스크립트를 데이터베이스에 저장할지 등을 알아야합니다. 아니요 세대 자체 문제 - 그래서 높은 수준의 경우 : 1) HTML & 자바 스크립트 2) 나중에 사용하기 위해 3) HTTP 요청에 대한 사용 - 내 질문은 2 단계와 3 단계입니다.

경험이있는 경우 이런 종류의 일을하는 것은 약간의 forwarning과 지혜를 제공 할 수있었습니다. 마음에 봄

+0

나는이 질문에 대해 더 많은 답변을 얻지 못했다고 자랑스럽게 생각합니다. 나는 다른 의견을 읽는 데 관심이 있었을 것입니다. –

답변

2

몇 가지 :

코드 분리

HTML 페이지 내에서 임베디드 자바 스크립트가 널리 퍼져 있지만, 많은 좋은 것으로 코드 분리의 관행을 고려하십시오. 이 점에서 저는 자바 스크립트를 별도의 파일에 배치하는 것에 대해 언급하고 있습니다. 이것은보다 광범위한 개념의 일부입니다. Unobtrusive JavaScript

웹 개발자로서 우리는 다양한 기술을 알아야합니다.

  • 서버 스크립트 (PHP, ASP, 루비 등)
  • 자바 스크립트 (및 프레임 워크)
  • XML
  • HTML
  • XSLT, XPATH
  • CSS
  • SQL : 일부

이미징에 포함 된 코드 파일 이 모든 것들! 그것은 혼란 스러울 것입니다!

JavaScript를 서버에서 출력하면 JavaScript가 별도의 파일로 분리되지 않습니다. 우리는이를 분리하는 경우, 우리의 코드는하지만 날 리드, 재사용 읽고 검증 가능한 많은 모듈, ...

단위 테스트

당신은 개인적으로 단위 테스트 프레임 워크를 사용 할 수 없습니다,이된다 독립적 인 테스트 및 재사용 가능한 테스트 모듈을 작성하려면 JavaScript를 모듈화해야합니다.

서버에서 출력되는 스크립트는 모듈화되지 않지만 더 중요한 것은 정적이 아니므로 모든 단위 테스트 프레임 워크에 적합하지 않습니다. 클라이언트와 서버 스크립트의 혼합 Tag Soup

는이에 대해 코딩 할 수 있지만

tag soup을 생산하는 경향이, 열심히 읽고 유지하고있다.

디버깅

난 당신이 사용하고있는 IDE 모르겠지만, 광산은 제가 쓴 자바 스크립트를 단계별로 할 수 있습니다. 서버에서 출력한다는 것은 내가 할 수 없다는 것을 의미합니다.

+0

안녕하세요. 나는 그 질문이 더 많은 응답을 불법화하지 않았다는 것에 놀랐다. 나는 귀하의 고려에 감사 드리며 일반적으로 동의합니다. 그러나, 일부 서버 생성 된 자바 스크립트 않고 내 최종 목표를 달성하는 방법을 볼 수 없습니다. 아직 구현하지 못했지만 js 파일을 동적으로 처리 할 수 ​​있도록 노력할 것입니다. 알 수없는 유형의 양식 필드 (다시 말하면 기본적으로 "양식 작성기")입니다. 우리는 내가 어떻게 "눈에 거슬리는"내가 그것을 만들 수 있는지 보자.) – Rob