상사 (및 다른 개발자)에게 눈에 잘 띄지 않는 JavaScript를 사용 / 고려하도록 설득하는 방법


21

나는 우리 develepors 팀에서 아주 새롭습니다.

몇 가지 강력한 논증 및 / 또는 "함정"예제가 필요하므로, 상사는 눈에 거슬리지 않는 JavaScript의 장점을 마침내 이해하여 그와 팀의 다른 사람들이 다음과 같은 일을 중단하도록합니다.

<input type="button" class="bow-chicka-wow-wow" 
       onclick="send_some_ajax(); return false;" value="click me..." />

<script type="text/javascript">

function send_some_ajax()
{
  // bunch of code ... BUT using jQuery !!!
}
</script>

나는 매우 일반적인 패턴을 사용하도록 제안했다.

<button id="ajaxer" type="button">click me...</button>

<script type="text/javascript">

// since #ajaxer is also delivered via ajax, I bind events to document 
//  -> not the best practice but it's not the point....

$(document).on('click', '#ajaxer', function(ev) {
var $elem = $(this);
ev.preventDefault();

});

상사와 다른 사람들이이 접근법을 사용하고 싶지 않은 이유는 FireBug (또는 Chrome 개발자 도구)의 이벤트 검사가 더 이상 단순하지 않기 때문입니다.

<input type="text" name="somename" id="someid" onchange="performChange()">

그는 변경 이벤트에서 어떤 기능이 실행되는지 즉시 확인할 수 있으며 spaghetti-code로 가득 찬 거대한 JS 파일 에서 바로 그 기능으로 바로 이동할 수 있습니다 .

눈에 잘 띄지 않는 JavaScript의 경우 그가 볼 수있는 유일한 것은 :

<input type="text" name="somename" id="someid" />

그리고 어떤 이벤트가이 요소에 바인딩되어 있고 어떤 함수가 트리거되는지 알 수 없습니다.

나는 해결책을 찾고 있었고 그것을 발견했다.

$(document).data('events') // or .. $(document).data('events').click

그러나이 "접근법"으로 인해 어떤 함수가 어떤 이벤트를 발생시키는 지 알아내는 데 "너무 오래 걸렸습니다 ..."라는 메시지가 나타 났으므로 바인딩 이벤트를 중지하라는 메시지가 나타납니다.

"UJS를 사용해야하는 이유"에 대한 몇 가지 예나 강력한 장점 또는 다른 제안을 요청합니다.

업데이트 : "작업 변경"에 대한 제안은 이상적인 솔루션이 아닙니다.

업데이트 2 : 좋아, jQuery 이벤트 바인딩을 사용하도록 제안했을뿐만 아니라 그렇게했다 . 모든 이벤트 위임을 작성한 후, 보스가 내게 와서 물어 보았습니다. 왜 다른 접근 방식과 접근 방식으로 이벤트 위임을하고 있는지 모르겠습니다.

나는 15 개의 입력 필드가 있고 모든 onchange이벤트가 있습니다 (일부 는 물론 이벤트도 있습니다 onkeyup) 모든 입력 필드에 대해 이러한 종류의 이벤트 위임을 작성하는 것이 더 실용적입니다. 특히 모든 HTML이 PHP의 에코로 렌더링되는 경우 15 번 수행하는 대신->echo '... <input type="text" id="someid" ... />...'


첫 번째 코드 박스의 "클래스"에는 =가 필요할 것입니다.
Joe Z.

6
1) 상사에게 자신이 모르는 기술을 사용하도록 설득하십시오. 2) 상사에게 새로운 기술을 가르치십시오. 3) 상사가 모르는 기술 사용을 중지하십시오. 또는 4) 직업을 바꾸십시오. 옵션을 잊었습니까? 4를 원하지 않고 1과 2에서 성공할 수 없다면 남은 유일한 옵션은 3입니다. 시장 가치는 당신이 아는 것에 달려 있다는 것을 명심하십시오. 따라서 상사가 승인하는 모든 것을 배우면 남은 옵션은 다음과 같습니다. 3A) 학습을 중단하고 시장 가치가 하락하는 것을 지켜보십시오. 3B) 자유 시간에 새로운 기술을 배우고 사용하십시오. 옵션 3A는 비용이 들고, 옵션 3B는 시간이 걸립니다.
Viliam Búr 2013

1
github처럼 접근 방식을 사용합니다 .JS에 이벤트가 바인딩 된 모든 요소에는 js-this-class-do-something클래스가 있으므로 코드에서 CTRL + F를 쉽게 수행 할 수 있습니다.
caarlos0

FireQuery 는 "너무 오래 걸립니다"부분을 도울 수 있습니다. 이벤트와 얼마나 잘 작동하는지 확실하지 않지만 적어도 요소 이벤트 있음을 알려 주어야 합니다.
이즈 카타

1
이벤트 작업을 할 때 사용 하는 멋진 유틸리티다음과 같습니다.
karka91

답변:


49
  1. 유행어 사용을 중단 하고 강력한 논증을 시도 하십시오 . Unobtrusive JavaScript 의 Wikipedia 페이지에서도 용어가 공식적으로 정의되어 있지 않다고 말합니다. 여러 가지 좋은 아이디어에 대한 포괄적 인 용어 일 수 있지만 단순한 유행이나 유행처럼 들리면 상사와 동료들은 많은 관심을 기울이지 않을 것입니다. 더 나쁜 것은, 그들이 쓸모없는 것으로 생각하는 것에 대해 계속 진행한다면, 당신이 옹호하는 전혀 관련이없는 아이디어를 할인하기 시작할 수 있습니다.

  2. 눈에 잘 띄지 않는 JavaScript 아이디어가 중요하다고 생각하는 이유를 찾으십시오 . 그들이 모범 사례로 간주된다고 읽었 기 때문입니까? 이러한 아이디어를 따르지 않기 때문에 문제가 발생할 수 있습니까? 이러한 아이디어를 채택하면 회사의 수익에 어느 정도 영향을 미칩니 까?

  3. 상사 머리 속으로 들어가 왜 그는 자신의 방식대로 일을하고 왜 당신의 변화를 거부 했습니까? 그는 아마 어리석지 않으며 아마도 당신보다 더 경험이 많을 것이므로 아마도 자신의 길을 행해야 할 몇 가지 이유가있을 것입니다. 당신은 이미 그들 중 일부를 암시했습니다-그 실을 끝까지 따르십시오. 그런 다음 귀하의 제안이 가장 관심있는 사항을 어떻게 개선 할 수 있는지 알아보십시오.

  4. 힌트 1 : 관리자는 돈을 좋아합니다. 수입을 늘리거나 지출을 줄이면서 제안을 더 직접 묶을수록 논쟁에 더 큰 영향을 미칩니다. 힌트 2 : 시간은 돈이다. 힌트 3 : 그 자체로 코드의 미학적 매력은 돈을 벌지 못합니다. 실제로는 반대입니다. 코드를 멋지게 보이려면 시간이 걸립니다. 잘 작동하는 추악한 코드는 대부분의 관리자에게 적합합니다.

  5. 그것에 대해 이야기하지 말고 행동하십시오 . 작고 독립적 인 프로젝트가 나올만큼 운이 좋으면 "UJS"스타일을 데모로 사용하여 관리자에게 문의하십시오. 준비가되면 코드 검토를 통해 모든 것이 어떻게 작동하는지 그리고 왜 현재 스타일보다 나은지 생각할 수 있습니다.

  6. 이상주의는 훌륭하지만 방해가되지 않습니다. 언 쿠트 코딩 스타일에 대해 불평하는 사람들보다 일을하는 사람으로 여겨지는 것이 더 중요합니다. 당신이 새로운 사람이라면 특히 그렇습니다. 지금 UJS에 대한 견인력을 얻을 수 없다면, 대신 좋은 일을하면서 신뢰를 얻으면서 변화를 원하는 사례를 천천히 만드십시오.

  7. 읽기 스위치 : 변경이 어려운 경우 변경하는 방법 . 효과적으로 사례를 구축하는 방법에 대한 더 좋은 아이디어를 제공합니다.


대답의 요점은 ujs가 사실적으로 작동한다는 것을 증명합니다. 작동하는지 보여주세요.
OnesimusUnbound

2
@AvinashR 요점은 관리자에게 동기를 부여하는 것은 종종 개발자에게 동기를 부여하는 것과는 다릅니다. 우리는 개발자들이 코드를 훌륭하고 정돈되고 우아하게 디자인하는 것을 좋아합니다. 관리자들은 수익을 극대화하기를 원합니다. 변경 사항이 더 많은 판매로 이어질 경우 좋습니다. 개발 시간이 단축되거나 버그를 재 작업하거나 수정하는 데 소요되는 시간이 줄어들면 좋습니다. GUI와 같은 클라이언트를 들어서 기쁘지만 보스가 UJS 또는 GUI의 모양에 기인한다고 생각합니까? 고객이 귀하의 코드를보고 "코드가 다음과 같이 표시되기를 원합니다"라고 말합니다. 사건을 쉽게 제기 할 수 있어야합니다.
Caleb

3
"Switch"외에도 Terrance Ryan : terrenceryan.com/book의 "Driving Technical Change"를 추천 합니다. 또한 "Hello HTML5 및 CSS3"에서 Rob Crowther는 간단히 "콘텐츠 용 HTML, 프리젠 테이션 용 CSS 및 동 작용 JavaScript"라고 간단히 설명합니다. JavaScript를 HTML 외부에 유지함으로써 비헤이비어 라이브러리를 구축하고 별도의 코딩없이 HTML을 재사용 할 수 있습니다. 그것은 Caleb의 4 번 지점으로 시간과 돈을 절약 해줍니다.
Adrian J. Moreno

2
포인트 3 : 경험을 과대 평가하지 마십시오. 차라리 32 세의 과잉 경험이있는 게으른 캐주얼 프리미어 리그 선수가 아닌, 뛰어난 재능을 가진 22 살 레오 메시를 우리 팀에 원합니다. 젊고 신선하며 재능있는 피는 종종 매우 가치가 있습니다.
Robert Niestroj 2013

1
"관리자는 이익을 극대화하기를 원합니다." -관리자는 또한 위험을 줄이고 싶어합니다. 다른 길일 수도 있습니다.
Roger Lipscombe

8

FireQueryChrome Query 도구를 사용하여 USJ HTML을 디버깅하는 데모를 제공 할 수 있습니다 .

FireQuery는 방화범 확장 프로그램이며 잘 작동합니다. Chrome 쿼리의 경우 얼마나 좋은지 보증 할 수는 없지만 일부 개발자 ( stackoverflow의 게시물)에서 확실히 사용합니다 .

또한 jQuery 1.8.0.data 이후 내부 이벤트 데이터를 반환하기 위해 함수가 제거되었으며 공식 변경 로그에 따라 불안정 할 수있는 것으로 대체되었습니다.$._data(element, "events")

이제 1.8에서 제거되었지만 $ ._ data (element, "events")를 통해 디버깅 목적으로 이벤트 데이터를 얻을 수 있습니다. 이 인터페이스는 지원되는 공용 인터페이스가 아닙니다. 실제 데이터 구조는 버전마다 호환되지 않을 수 있습니다.

업데이트 :
일을 시작할 때 같은 딜레마가있었습니다. 그러나 동적으로 열리는 탭 (닫을 수 있음), 아코디언 메뉴 (db에서 동적으로 생성됨)가 포함 된 모든 기능을 갖춘 GUI (단일 페이지 응용 프로그램)를 사용하여 데모를 만들면 마침내 USJ를 사용하는 것이 더 낫다는 것을 알았습니다.

또한 USJ 사용의 장점은 전체 응용 프로그램을 작은 (판독 할 수없는) 스크립트로 축소 할 수 있다는 것입니다. 또한 google.com / github.com에 대한 스크립트를 보여주고 (예를 들어) 코드를 압축 한 경우에도 사이트 뷰어가 보안 결함을 해독하는 데 어려움을 겪을 수 있으므로 코드가 압축되어 있음을 지적 가능하지는 않지만이 도구를 사용하여 사이트에 대한 본격적인 공격을 시작하십시오.

업데이트 2 :
Btw, 나는이 질문을 볼 때까지 내가 USJ를하고 있다는 것을 몰랐으므로 한 가지 방법으로 감사드립니다.


2

다음과 같은 이유로 인라인 이벤트 핸들러가 작동하지 않습니다.

  • 이벤트 위임 없음-리 바인드하지 않고 페이지 안팎으로 요소를 동적으로 리핑 할 수있는 경우에 좋습니다.

  • HTML 태그의 클래스 / ID 속성이 아닌 HTML 태그에 동작을 바인딩했습니다. 앱 전체에 "combo_box"클래스가 있다고 가정 해 봅시다. 갑자기 이전 페이지의 절반에서 콤보 상자가 다른 컨테이너에있을 때 약간의 변형이 필요합니다. 클래스에 연결되면 컨테이너 컨텍스트를 기반으로 해당 동작을 변경할 수 있습니다 (예 :) "#special_container .combo_box". 저주받은 HTML 안에 묶여 있으면 여러 페이지에서 .combo_box 클래스로 모든 작은 선택 상자를 추적하여 단일 파일 위치에서 필터링 할 두 줄의 코드를 수정하거나 작성하는 대신 처리기 참조를 하나씩 변경하도록 할 수 있습니다. .

  • 여러 핸들러를 원하는 경우 함수로 랩핑 한 다음 불필요하게 특정 HTML 파일에 바인딩하십시오. 얼마나 유지 관리가 가능합니까?

  • 미묘한 요점은 더 많은 제어판 사고 방식으로 행동을 처리하는 것이 훨씬 쉽고 유지 관리가 쉽고 유연하며 강력하다는 것입니다. 중앙 위치에서 바인딩하면 페이지에서 발생하는 모든 동작에 대한 개요를 동시에 얻을 수있는 장소가 있습니다. 예를 들어 특정 페이지가 때때로 실행되는 이유를 파악해야 할 때 편리합니다. 이해하기 어렵지만 다른 버그는 아닙니다.

  • 이것은 클라이언트 측입니다. 우리는 각자 복잡한 방식으로 해석하는 여러 브라우저를 가지고 있습니다. 슬로프-올-모두와 IDE가 당신을 위해 그것을 분류하게한다면 여기서는 잘 작동하지 않습니다. 코드를 타이트하고, 최소화하고, 느슨하게 결합하고 깨끗하게 유지하는 것은 유행이 아니며, 수정하고 업데이트하기 쉬운 유지 관리 가능한 프론트 엔드를 설정하는 것이 절대적으로 중요합니다. 그렇습니다. .

  • 더 이상 2002 년에 @@ $ ing되지 않습니다. 이 인수는 레이아웃만큼 테이블만큼 오래되었습니다. 그것을 극복하고 당신이 그들의 전문 지식이 없기 때문에 당신이 직접 고용 한 경험이 풍부한 클라이언트 측 전문 개발자를 신뢰하기 시작하십시오 (개인 경험이나 다른 것들로부터 분노를 전하고 있지는 않습니다).

그리고 보스의 주장을 반박하기 위해 CTRL + F를 사용하여 이벤트 위임 또는 핸들러 바인딩에 사용되는 클래스 또는 ID와 내 개인의 당혹스럽게 jquery처럼 페이지의 모든 JS를 볼 수있는 도구를 추적하는 것은 그리 어렵지 않습니다. / prototype-only bookmarklet version 웹 개발자 툴바가 나에게 엉망이되기 시작했을 때 급히 함께 뭉쳤다. js 바이올린 페이지의 링크에서 북마크하거나 JS를 복사하여 직접 만드십시오.

아마도 결국 만료 될 JS 바이올린 링크


+1 Finaly 누군가 인라인 JS의 주요 단점을 지적했습니다. 다음 주장에서 내 상사와 토론 할 때이 주장을 사용할 것입니다.
V-Light

@ V-Light 작동 했습니까?
Erik Reppen

2
아니! 'ChangeYourOrganization'옵션이 해결책이었습니다
V-Light

0

제안 된 기술의 한 가지 주요 이점은 이벤트 핸들러를 "문서"와 같은 상위에 한 번만 바인딩하면되고이 핸들러는 "button.anyclass와 같이 지정된 선택기를 만족하는 모든 하위에서 오는 이벤트를 포착 할 수 있다는 것입니다. ". 하나의 편집 인스턴스 만 필요하고 모든 요소에 영향을 미치도록 메모리를 절약하고 유지 관리 할 수 ​​있습니다.

바운드 기능을 한 번에 인식 할 수없는 것과 관련하여 팀은 페이지의 맨 아래 부분에 이러한 기능을 선언하는 방법을 표준화 할 수 있습니다. 따라서 이름 지정 규칙도 매우 중요합니다. 주석은 매우 유용하지만 브라우저에 대한 응답으로 서버에 제공하기 전에 서버에 의해 제거되는지 확인하십시오.

또한 보안 목적으로 자바 스크립트의 난독 화 및 축소를 제공하려는 경우 팀에서 여전히 사용하는 이전 스타일과 달리 기술을 통해 가능할 수 있습니다.


-2

명백한 대답은 onclick 속성을 사용하여 하나의 기능 만 버튼에 바인딩 할 수 있지만 JQuery 이벤트는 여러 기능을 바인딩 할 수 있다는 것입니다. onload 이벤트의 일반적인 문제 : 문서가 둘 이상의 파일로 구성된 경우 충돌이 자주 발생합니다.

당신과 당신의 상사 모두를 만족시킬 수있는 또 다른 해결책은 Knockout 또는 Angular와 같은 라이브러리와 함께 데이터 바인딩을 사용하는 것입니다.


1
cool-kids를위한 Knockout, Angular 및 기타 JS 프레임 워크와 관련하여 ... 불행히도 옵션이 아닙니다. 그 이유는 위와 동일합니다. "너무 많음"또는 "너무 새롭다"또는 "너무 멋지다"또는 "우리는 새로운 것을 배우고 싶지 않습니다. 낡은 (멍청한 / 멍청한) 방식으로 봅시다 .. . "
V-Light

@Niphra : 또한 하나의 컴포넌트에만 함수를 바인딩 할 수 있습니다.
Bruno Schäpper 2013

3
@ V-Light : "조직을 변경하거나 조직을 변경할 수 있습니다." 어쩌면 이것은 당신을위한 재미있다 : jamesshore.com/Change-Diary
브루노 Schäpper

우리 회사는 ASP.NET이 "너무 새롭기 때문에"클래식 ASP를 고수하고 있지만 여전히 코드에서 Knockout을 푸시했습니다. 그들의 관심사가 실제로 무엇인지 확인하고 변경이 가능한지 확인하십시오.
DistantEcho

1
@Niphra "우리 회사는 Classic ASP를 고수하고 있습니다."
Michael Paulukonis 2013
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.