최적화를 원하지 않는 세상에서 코드 최적화하기
게시 됨: 2019-11-22성급한 최적화는 모든 악의 근원입니다.
개발자들 사이에서 흔히 하는 말이다. 말이 되는군요. 조기에 최적화한다는 것은 작업을 다시 수행하는 것을 의미할 수 있으며 시간은 개발자의 가장 유한한 자원입니다. 제품 사용자에게는 아직 존재하지 않는 시나리오를 최적화하는 데 소중한 시간을 할애해야 한다는 의미일 수 있습니다. 이는 명확하지 않은 성능 향상으로 이해하기 어려운 코드를 작성하는 것을 의미할 수 있습니다.
약 1년 전 워드프레스 테마 리뷰 팀에 참여하면서 그 조언을 다시 한 번 접했습니다. 성급한 최적화는 모든 악의 근원입니다. 답장은 테마를 로드하는 데 필요한 스크립트의 수와 무게를 줄이려는 테마 작성자에게 있었습니다. 한편으로 테마 작성자는 작업을 완료하기 위해 종속성이 없는 1.29kb 스크립트를 로드할 수 있습니다. 다른 옵션은 "대부분의" WordPress 사이트가 어쨌든 jQuery를 로드하기 때문에 코어 WordPress에 포함된 jQuery 종속 스크립트를 총 105kb에 사용하는 것이었습니다.
나에게 답은 간단했다. 핵심 스크립트가 프런트 엔드에 이미 로드되어 있지 않다면 더 작은 스크립트를 사용하십시오. 나는 조기 최적화 의 관점에서 그것을 생각하지 않았습니다. 나는 그것을 평범한 옛날 방식의 일상적인 최적화라고 생각했습니다.
개발자는 조기 최적화 와 프로세스 초기에 현명한 설계 결정을 내리는 개념을 혼동해서는 안 됩니다. 또한 최종 사용자에게 제품을 제공하는 데 초점을 맞추는 개발의 마지막 단계에서 최적화를 시작할 때까지 기다려야 합니다. 이는 제품 디자인 프로세스가 잘못되었다는 신호입니다.
지난 1년 동안, 그 대화는 저에게 계속 붙어 있었습니다. 그것은 WordPress 개발자 커뮤니티뿐만 아니라 웹 개발 전반에 걸쳐 무서운 추세를 더 잘 인식하는 데 도움이 되었습니다. 너무 자주 개발자는 일반 사용자와 멀리 떨어져 있으며 사용자가 최적화에 의존하는 기술은 나중에 생각하는 것 이상입니다. 대신, 항상 모든 개발자의 마음의 최전선에 있어야 합니다.
이 오용된 인용문에 대한 과도한 의존은 페이지 무게를 킬로바이트 대신 메가바이트로 측정하는 추세를 촉진하는 데 도움이 되었습니다. 프로덕션 단계에서 파일 압축 및 캐싱으로 보완하면서 개발 단계에서 최적화를 수행하지 않는 포괄적인 정당화로 너무 자주 사용됩니다.
품질 코드 작성의 일부는 개발 프로세스의 모든 단계에서 해당 코드를 최적화하는 것입니다. 소프트웨어가 함께 오면 불필요한 것을 줄이기 위해 어려운 결정을 내리는 것입니다. 캐싱은 다른 모든 것이 정리된 후 최후의 수단이어야 합니다.
조기 최적화는 명확한 이득이 없을 때 최적화를 시도하거나 이익이 거의 또는 전혀 없도록 소프트웨어 설계를 변경하는 미세 최적화 작업에 관한 것입니다. 개발 중 명백한 성능 향상을 간과한다는 의미는 아닙니다.
모든 사람이 기가비트 인터넷을 사용하는 것은 아닙니다.
내가 아는 대부분의 개발자는 초고속 인터넷 연결을 사용하며 종종 1Gbps 다운로드 속도와 무제한 데이터를 제공합니다. 그런 상황에서 세계의 많은 부분이 여전히 데이터 캡으로 느린 연결에 있다는 사실을 잊기 쉽습니다.
일부는 수백만 명의 사람들이 2G 휴대 전화 기술을 사용하는 제3세계 국가와 느린 연결을 연관시킬 수도 있습니다. 그러나 미국 및 기타 선진국에는 도시와 교외에서 일반적으로 사용할 수 있는 직접 케이블 또는 DSL 회선이 없는 넓은 범위가 있습니다.

이 연결 끊김은 다른 개발자가 나와 채팅을 시작할 때 직접적으로 나타납니다. 지난 몇 년 동안 비디오 채팅을 요청하는 것이 점점 더 일반적이었습니다. 그러한 일이 가능한지 여부는 의문의 여지가 없습니다(영상 채팅은 저에게 기껏해야 신뢰할 수 없습니다). 언제든지 영상 채팅을 할 수 있는 기능은 당연하게 여겨집니다.
내가 사는 지역에는 위성 또는 전화 접속이라는 두 가지 인터넷 서비스 옵션이 있습니다. 지역 전화 회사조차도 수십 년 된 전화 회선의 인프라 비용 때문에 이 분야에서 DSL 제공을 거부합니다. 일반적으로 데이터 제한과 함께 제공되는 위성 인터넷 액세스의 엄청난 비용 때문에 많은 사람들이 전화 접속을 사용하고 있습니다. 휴대 전화 회사는 서비스가 신뢰할 수 있다고 가정하고 게임을 어느 정도 바꾸고 있지만 데이터 또는 핫스팟 제한을 포함할 수 있는 해당 경로를 사용하는 데 실패가 있습니다.
기술적으로 선진화된 국가에서 많은 사람들이 10년 전의 수준을 간신히 따라잡고 있습니다.
내가 살고 있는 곳을 선택할 만큼 충분히 운이 좋고 이사를 하는 데 방해가 되는 것은 없지만 대부분은 그런 선택권이 없습니다. 그들은 감당할 수 있는 최선을 다하고 있습니다. 시골 지역에서도 인터넷은 일상 생활에서 빠질 수 없는 부분이며 개발자는 이러한 사람들을 쉽게 만들지 않습니다.
이것은 일화이지만, 미국 주머니 속의 시골 생활의 엄연한 현실입니다.
앨라배마의 오지에 사는 것의 장점은 개발자로서의 나의 관점이 바뀌었다는 것입니다. 그것은 내가 구축한 모든 플러그인과 테마에 대한 모든 코드 결정에 의문을 제기해야 한다는 것을 의미했습니다. 데이터 한도를 사용하면 리소스를 너무 많이 사용하지 않는지 확인해야 했습니다.
무엇보다 데이터 한도가 생기면서 인터넷 사용 방식이 달라졌다. 지금은 광고 차단기를 실행하고 있습니다. 자동 로딩에서 비디오를 죽이는 확장 프로그램이 있습니다. 사용해야 하는 무거운 사이트에서는 JavaScript를 비활성화합니다. 일부 사이트는 재미있어 보이지만 리소스 돼지이기 때문에 다시는 방문하지 않습니다.
모든 바이트가 중요한 장소에 살면 낭비를 피하는 경향이 있습니다.
항상 성공적인 것은 아니지만 작은 마을 생활로 전환한 이후로 저는 초고속 인터넷 액세스 권한이 없는 사람들에게 서비스를 제공하는 방식으로 응용 프로그램을 구축하려고 시도했습니다.
이를 지적하는 것은 개발자가 최적화가 중요하다는 것을 인식하도록 하는 것입니다. 개발 프로세스의 모든 단계에서 중요합니다. 연결 속도가 느리고 데이터 한도가 높은 사람들도 제품을 구매하고, 서비스를 사용하고, 콘텐츠를 읽고, 웹에서 하는 다른 모든 작업을 수행해야 하기 때문에 중요합니다.
슬라이더, 모바일용 스와이프 메커니즘 또는 기타 멋진 가제트를 추가하려는 개발자라면 해당 기능이 로드될 때까지 기다려야 하는 개발자를 생각해 보십시오. 종속성이 너무 많은 추가 리소스를 로드하지 않는지 확인합니다. 더 가벼운 구현을 찾을 수 있는지 알아보기 위해 몇 가지 조사를 하십시오. 그러나 먼저 그것이 필요한지 자문해 보십시오.
WordPress 개발자가 구축하는 테마와 플러그인은 웹사이트의 병목 현상이 되어서는 안 됩니다. 우리는 더 잘할 수 있습니다.
