Javaee 필드를 오랫동안 지배해온 스캐 폴딩은 Spring Struts2 Mybatis/Hibernate와 함께 이끌었습니다.
봄:
봄은 Java 서비스를위한 것이 아닙니다. CGI 표준으로서의 스프링 구현으로서, Java 필드의 프레임 워크 일뿐 만 아니라 C# 플랫폼은 여전히 혜택을받을 수 있습니다. Spring은 추상화 또는 BootDE 통합 솔루션과 같은 다양한 편리한 주석 구성 방법을 제공하며, 이는 Javaee의 프로젝트 기반을 크게 단순화합니다.
스프링을 사용하는 동안, 양면은 차별화되고, 일부는 가벼운 주석이며, 일부는 완전 주석이 될 것입니다.
우선, 주석의 전제는 프록시, 동적, 정적 및 cglib 프록시를 거쳐야한다는 것입니다. 가벼운 주석의 경우 각도는 정적 또는 일회성 주석입니다.
예를 들어, 컨트롤러 주석, 이러한 일회성 주석 또는 컴파일 타임 주석은 프로젝트 컨텍스트에서 암시 적 일회성 스캔 및 서비스와 같은 관련 주석으로 싱글 톤 경량 객체 인스턴스를 제공합니다. 첫 번째 선택으로 간주됩니다. 이는 런타임 기간 동안 프록시 및 반사 비용을 줄이고 런타임 스택에 대한 더 나은 리소스를 절약합니다.
ResponseBody와 같은 다른 유형은 동적 주석 또는 런타임 주석입니다. 요청할 때마다 주석 반사가 실행됩니다. 달리기 기간의 주석은 물론 자원을 점유하는 것입니다.
일반적으로 필요한 주석은 완전히 무시할 수 있습니다. 서블릿 기본 사항을 기반으로 요청 및 응답 방법을 기반으로, MVC는 해결, 매개 변수를 복용, 매개 변수 전달, 반환 등을 해결할 수 없으며 런타임 중에 주석이 필요하지 않습니다. 런타임 중 주석은 코드의 양을 줄이는 것 같습니다. 이 과정에서 다양한 단점을 보충하기 위해 원형의 동적 주석이 실행되어 메소드 내에서 사용하는 주석을 실행합니다. 메소드에 작성된 매개 변수 주석의 경우 요청을받는 것과 비교하여 어떤 코드가 누락 되었습니까? 원래의 1 단계 프로세스가 추가되어 코드 차단 계층을 추가했습니다.
주석이 런타임 또는 컴파일 타임 기간의 주석인지 여부를 아는 방법은 매우 간단합니다. Ctrl+마우스를 클릭하면 다음을 볼 수 있습니다.
@TARGET ({ElementType.Type, elementType.Method})
@retention (retentionpolicy.runtime)
@documented
보존이 열거 유형은 사용하는 주석의 기간을 완전히 명확하고 명확하게 보여줍니다.
누구나 봄과 함께 싱글 톤을 사용하는 것을 좋아합니다. 이것은 훌륭한 방법입니다. 싱글 톤은 자원 식별을 위해 경쟁해야한다는 점을 제외하고는 동시성 자체와 관련이 없습니다.
프로젝트에 많은 프로토 타입 객체가 있어야한다면 잘못된 객체를 남용하거나 사용했음을 의미합니다. MVC에는 기본적으로 들어오는 매개 변수와 반환이 있습니다. 각 요청은 스레드입니다. 별도의 요청 응답에는 입력 및 종료 된 내용이 있습니다. 이것으로부터, Mybatis와 관련하여 많은 사람들이 Mybatis 구성에 다양한 resmapper를 사용하고 매번 다양한 콩이 앞뒤로 갈 때마다. 요청 후 콩은 매개 변수와 결과로 한 번이어야합니다. Mybatis의 표면은 SQL 유지 보수에 명확하며, 이는 JDBC의 효율을 크게 줄이는 데 드는 비용입니다. 그런 다음 아무도 그것에 대해 걱정하지 않습니다. 그들에게 콩에는 아무것도 없으며 GC에 대해 이해하거나 신경 쓰지 않습니다. 문제가 발생하면 메모리를 추가하고 메모리를 상단에 추가하십시오. 그들이 해결하는 것은 시간의 문제이며, 공간을 사용하여 시간을 교환합니다. 동일한 매개 변수와 결과 매핑을 사용하면 JDK의 맵을 사용하는 경우 더 나은 맵을 사용하면 자연스럽게 JDK의 자체 맵입니다.
나는 항상 New JDK 자신의 대상의 소비가 스스로 콩을 정의하는 것보다 훨씬 작다고 완고하게 믿었습니다. 왜, 죄송합니다, 나도 모릅니다. 그래서 나는 항상지도와지도로옵니다. mybatis를 사용할 때, 당신은 당신의 물건이 당신의 수업에 프록시하고 있는지를 면밀히 감지해야합니까? 이 방법은 매우 간단합니다. 프로젝트 로그에서 디버그를 열면 로그가 매번 새 SQLSESSION이 생성되는지 확인하십시오. 이 경우 Mybatis 세션이 풀링되지 않았으며 사물에 의해 근접하지 않음을 주목해야합니다. 메소드에 경쟁력있는 SQL이있는 경우 죄송합니다. 죄송합니다. 데이터베이스가 SQL을 실행하지 않는 것으로 나타났습니다. 곧 연결 풀이 매우 빠르게 사용되며 자주 새로운 연결을 생성 할 것입니다. 물론, 당신이 mybatis를 사용할 수 없다면, 망설이지 말고, 그것을 사용하지 않는 것이 옳습니다.
정적 주석을 사용하려고하는 이유는 무엇입니까? 매우 간단합니다. 스프링 클래스는 기본적으로 싱글 톤입니다. 프로젝트는 충분히 크고 Bean 인스턴스로 충분합니다. 이 싱글 톤은 무엇을 차지합니까? 객체 인스턴스는 힙 공간에 있으며 스택에 참조됩니다. 그렇다면 GC는 언제이 싱글 톤에서 물체를 재활용합니까? 당신은 어떻게 생각합니까? 따라서 주석을 기준으로 동적 프록시 사용을 최소화하십시오. 필요한 경우 더 많은 리소스를 사용하십시오.
과거에는 힙이 없다고 말할 것입니다. 그러나 이제 JDK1.7의 끈 상수 풀이 이미 힙에 들어갔습니다.
편집 유형 또는 해석 가능성이 어느 쪽이 더 좋습니까? 물론, 그것은 분석적이며, 컴파일 유형은 중재 모델과 유사합니다. 따라서 해석 된 언어보다 우수한 편집 언어를 구축하는 것이 훨씬 어렵습니다.
웹 구조는 매우 명확합니다. 첫째, 그것은 여전히 맥락에 있으며 일련의 구성 요소가 순서대로 있습니다. 우리가 가장 중요한 것은 Servlet 구성 요소이며, 이는 Javaee 표준이며 나머지 웹 구성 요소는 모든 사람이 가지고 있어야하는 프로토콜 표준입니다. 그러면 많은 프로젝트에서 서블릿 매핑이 /이는 이는 나쁜 방법이라는 것을 알 수 있습니다. 매우 간단하기 때문에 JS 또는 CSS는 서블릿을 통해 처리 할 필요가 없습니다. 따라서 매핑은 주로 웹 컨테이너의 서버 구성 요소와의 상호 작용을 고려하며 일반적으로 .DO 및 .Action .DO와 같은 두 가지 유형의 식별을 제공합니다. JS 등. 서틀에 들어가고 URL에 따라 웹 컨텍스트에서 직접 돌아올 필요가 없으며 MVC를 MVC로 가로 채고 해제하는 방법이 없습니다. 이것은 문제를 일으키고 문제를 해결하기위한 시간 낭비입니다. 좋은 방법은 아닙니다. 이런 식으로, nginx가 관련되어 있는지 여부에 관계없이 정적 자원은 웹 컨테이너의 정적이며 서블릿과 관계가 없습니다. 서블릿은 다루는 데 필요한 것과 관련이 있습니다.
JS를 작성하기에 가장 좋은 곳은 어디입니까?
많은 사람들이 JSP 또는 HTML로 JS를 작성하는 데 익숙합니다.
프로젝트를 구축 할 때는 JS와 CSS가 브라우저에 의해 캐시되기를 바랍니다.
그런 다음 페이지의 스크립트 태그로 작성된 JS는 단지 태그 일뿐입니다.이 태그는 div 또는 입력과 다르지 않으며 캐시되지 않습니다. 많은 정보를 확인했으며 캐시 장치가 파일이라고 분명히 말한 캐시. 레이블이 아닙니다. 따라서 CSS JS를 파일에 작성하고 파일을 소개하여 파일이 캐시되도록 파일을 소개하는 것이 확실하지 않습니다. 직접적인 긍정 답변이 없기 때문에 내 추측입니다.
JSP는 실제로 서블릿이므로 역동적 인 페이지입니다. 동적으로 번역하기 위해 클래스를로드해야 할 때마다 클래스의 쓰기 메소드는 페이지를 HTTP에 브라우저에 씁니다. 브라우저를 렌더링합니다. HTML이라면 정적입니다. 역동적이고 유연하며, 서물기이기 때문에 Java 객체이며 다양한 Java 태그와 방법을 가능성이라고한다는 것은 의심의 여지가 없습니다. 정적 페이지는 직접 처리해야합니다. 정적 페이지와 유사한 매크로 언어를 사용하는 경우 JSP를 직접 사용하는 것이 좋습니다.
페이지에서 한 번에 얼마나 많은 데이터가로드됩니까?
페이지에 표시된 콘텐츠가 카테고리 및 목록을 기반으로하는 경우 수백 가지 항목이있는 데이터의 양이 매우 작습니다. 유형은 이제 테이크 아웃 주문 앱에 표시되며 모든 카테고리와 데이터는 한 번에 제공됩니다. 따라서 처리는 클라이언트 측에서 처리되며 전체 프로세스의 카테고리 전환 및 미리보기는 검색을 포함하여 페이지에서 처리됩니다. 고객에게 실행 된 JS는 A의 휴대 전화 또는 컴퓨터가 B의 휴대 전화 나 컴퓨터와 경쟁하지 않습니다. 유형으로 전환 할 때마다 유형을 전환하면 Ajax를 브러시하고 동일한 웹 컨테이너 그룹이므로 경쟁이 가능합니다. 운영이 자주 많을수록 경쟁이 커집니다. 이것은 실제 시나리오와 밀접한 관련이 있습니다.
쿼리로 반환 된 데이터의 양은 성능과 관련이 없습니다. 수천 개의 데이터는 수십 수준의 KB에만 있습니다.
쿼리 수, 즉 서버와의 상호 작용 수는 전체 성능에 영향을 미치는 직접적인 이유입니다.
쿼리의 데이터 양은 쿼리되는 테이블의 크기에 비례합니다. 한 번에 10 개의 쿼리를 반환하고 한 번에 10 개의 쿼리를 반환하여 쿼리 속도를 높이고 쿼리 속도를 늦추지 않습니다. 데이터베이스 작업은 본질적으로 수집 응용 프로그램이며 아무것도 생성되지 않습니다.
튜닝의 전제는 주어진 금액이 가장 적절하다는 것입니다. JDK 또는 Tomcat이 다른 숫자의 OS에서 소비 할 수있는 메모리.
nginx를 사용하십시오.
필요한 경우 캐시를 사용하십시오.
필요한지 여부에 따라 메시지 미들웨어 또는 기타 미들웨어를 선택하십시오.
데이터베이스 또는 마스터 슬레이브 등의 분리는 현재 데이터베이스가 트래픽 볼륨을 지원할 수 없어야합니다.
싱글 톤은 좋은 방법입니다.
멀티 스레딩은 날카로운 칼날이며 특정 언어를 구별하지 않습니다.
Maven Management는 좋은 방법이지만 프로젝트 본문은 WebMVC이어야하며 웹 프로젝트를 구축하고 Maven 프로젝트를 작성하는 대신 Maven을 구성 요소로 포함시킨 다음 유휴 상태가 아닌 한 웹 프로젝트로 변환해야합니다.
스프링을 사용하는 것은 현재 최고의 비계입니다.
가능한 경우 JDBC를 가능한 한 많이 사용하십시오.
클라이언트에서 작업을 수행 할 수있을 때 서버와 상호 작용하지 마십시오. 클라이언트의 리소스는 방대하고 서버의 리소스가 제한되어 있습니다.
더 적은 요청을 보내십시오. 더 적은 요청을 보내는 코드는 즉각적인 응용 프로그램이 아닌 한 좋은 코드입니다.
각 코드의 도구는 도구이며 API는 가장 많이 이해하는 데 필요한 것입니다. 어느 것이 더 나은지, 어느 것이 좋지 않은지에 대한 정확한 답이 없습니다.
모든 것이 대상이며 자바에게는 순수합니다. 프록시는 객체이고, 반사는 객체이고, 객체는 객체이며, 기본 데이터 유형은 객체가 아닙니다.
기본 유형 이외의 것들은 객체를 통해 완료됩니다. 프로세스가 아무리 복잡하더라도 메소드 매개 변수와 결합 된 해당 객체 방법을 통해 완료됩니다. 클래스를 일련의 클래스를 연속화하고이를 사로화하는 방법을 사용하여 파일의 IO 및 전송이며 JVM에로드하여 객체로 구성하십시오.
RPC가 스레드에서 호출되지 않은 이유. 불리는 것은 근접합니다. 프록시는 귀하의 요구를 매개 변수로 변환하여 데이터 스트림으로 보냅니다. 서버는 요청 스트림을 객체로 변환 한 다음 다시 스트리밍합니다. 그런 다음 객체를 구성하고 객체를 통해 처리합니다.
Nio는 좋은 방법입니다. Netty는 좋은 선택입니다. Netty를 능가하는 멀티 스레드 소켓이 있습니까?
Zookeeper는 좋은 분산 등록과 같은 일련의 솔루션을위한 훌륭한 도구입니다.
이러한 것들은 모두 원칙과 대상이므로 열심히 읽으려면 그것들을 사용해야합니다.
위의 것은 개인적인 이해이며, 수정을 환영합니다.