'Internet Explorer'에 해당되는 글 2건

  1. 2010.01.28 Internet Explorer 8 성능 향상 (7)
  2. 2007.08.16 스마트클라이언트와 익스플로러 연동 (4)

외국의 ZDNET 기사에 Internet Explorer 8 의 성능 향상 방법을 소개 하고 있습니다. 많은 분들이 Microsoft 의 Internet Explorer 의 성능 문제로 불만도 많은 분들이 계실텐데요, 아마도 이 방법을 통해 성능이 웹 서핑 성능이 향상 되길^^    

특히 이미 이 기사에서 언급한 내용이지만, Internet Explorer 의 성능 저하의 주요 원인은 각종 Add-on 과 특히 Adobe Flash Player 가 주요 원인이라고 합니다. 실제로 가장 많이 사용되고 있는 브라우저인 만큼 피드백도 많겠죠. 좋은 피드백이든 나쁜 피드백이든…    

Internet Explorer 8 의 성능을 향상하는 단계는 아래와 같이 수행하라고 합니다.    

Step 1. 현재 설치된 Adobe Flash Player 를 제거하라.

프로그램 추가/제거로 제거하지 말고 아래의 링크를 통해 제거하라고 합니다.
How to uninstall the Adobe Flash Player plug-in and ActiveX control.

웹 사이트 방문이 귀찮으신 분은 이 링크(uninstall_flash_player.exe) 를 클릭해서 설치하세요.

   

Step 2. Internet Explorer 기본 설정으로 변경해라.

도구->인터넷 옵션에서 원래대로 버튼을 클릭합니다.

최소한 이 버튼 클릭만으로 상당한 효과가 있을 듯 하군요. 각종 더미 add-on 까지 모두 싸그리 사용하지 않는 상태로 만들어 버릴테니까요.

   

Step 3. Flash Player 를 다시 설치하라.

Adobe Flash Player 를 설치하는 링크 페이지 입니다.
웹 사이트를 방문하기 귀찮으신 분은 이 링크(Install_flash_player.exe) 를 클릭하여 실행하세요. 설치 중에 오류가 발생한다면, 열려있는 Internet Explorer 를 종료하고 "다시 시도"를 클릭하세요. 

아무래도 구형 Flash Player 보다 최신의 것이 보안 취약이나 성능이 개선이 되었을 듯 합니다.

   

Step 4. Internet Explorer Add-on 을 다시 활성화해라.

주로 사용하거나 필요한 Add-on 만 찾아서 활성화 하시면 됩니다.

 


   

원문 기사의 댓글을 보면 Flash Player 와 Adobe 는 이미 상당한 안티 팬을 거느리고 있네요.^^;

그리고 필자가 위의 과정을 수행한 후 테스트해 본 결과, Internet Explorer 성능이 상당히 빨라진 것 같습니다. 크롬 아이콘 버튼을 클릭하고 메인 홈 페이지(네이버) 가 HTML 랜더링이 완전히 끝나는 시간과, Internet Explorer 에서도 이와 같이 아이콘 클릭하는 시간부터 체크를 했는데... 거의 흡사하네요 ^_^; (제가 좀 관대한가...)
(뭐 크롬은 HTML 텍스트부터 뿌려주고 이미지는 비동기식으로 랜더링하는 방식이라 체감상 차이는 있을 수 있습니다)

Posted by 땡초 POWERUMC

댓글을 달아 주세요

  1. 재우니 2010.01.29 09:25 Address Modify/Delete Reply

    좋은 내용 보고 갑니다. ^^

    • 땡초 POWERUMC 2010.01.29 12:55 신고 Address Modify/Delete

      재운님 안녕하세요 ^^;
      요즘 커뮤니티 활동이 부재하다보니
      카페를 자주 못 찾아뵈었네요 ^_^;;
      앞으로 자주 방문해서 뵙겠습니다.

  2. 박중석 2010.01.29 11:06 Address Modify/Delete Reply

    Add-in이 많이 설치된 일반사용자들에게 알려지면 좋을 것 같네요~

    • 땡초 POWERUMC 2010.01.29 12:56 신고 Address Modify/Delete

      예,, 맞아요..
      이런저런 툴바도 엄청나게 무겁게 돌아가더군요.
      (알툴바, 구글툴바 등...)

      Lazy 한 방식으로 가볍게 만들면 좋았을걸..
      괜히 IE 만 욕먹는것 같아서 맘이 아프네요.

  3. 하나둘넷 2010.02.01 15:52 Address Modify/Delete Reply

    IE8 성능 향상 완료 !!

  4. ddd 2010.02.08 22:04 Address Modify/Delete Reply

    도움많이 됬어요 고맙습니다!

  5. 김동영 2010.02.14 10:59 Address Modify/Delete Reply

    안녕하세요^^
    좋은글 잘보고 갑니다
    블로그에 가져 가겠습니다
    출처는 밝히겠습니다



스마트클라이언트 프로그래밍을 하다보면, 웹페이지와의 연동이 필요한 부분이 생기기 마련이다.
가령, 스마트클라이언트 UI 의 특정 버튼 클릭에 의해 브라우져의 URL 이 변경된다던가, 특정 팝업창을 띄어야 한다는 등의 경우에 브라우져는 스마트클라이언트의 특정 이벤트를 감지할 필요가 있다.
 
테스트 환경은 Internet Explorer 5.5 이상 버전이면 충분하다.
 
소스를 작성하기 앞서 Delegate 와 Event 에 대한 선수 지식이 필요하므로, 필요하다면 MSDN 에서 Delegate 와 Event 에 대해서 잠시 살펴 보는것도 좋을 것 같다.


2009-06-20 아래의 샘플은 접속할 수 없습니다.
소스의 샘플은 다음의 URL 을 통해서 테스트 해 볼 수 있습니다. ( 단, CAS 권한을 설정해야 합니다 )

 
그럼 이제 구현에 들어가 보도록 하자.
 
 
Interface 를 통한 이벤트 메서드 선언
 
일반적으로 ComVisible(true) 로 설정되어 있다면, 우리는 자바스크립트로 public 으로 된 프로퍼티나 메서드 등에 바로 접근 할 수 있다.
하지만, 이벤트는 그렇지 않다. 이벤트는 Interface 를 통해 COM 에 노출 시킬 방법을 결정해야 합니다.
 
///<summary>
/// COM 에 노출할 이벤트 메서드
///</summary>
[Guid("F9F21A39-FC35-4503-95E1-FBB13E749C3E")]
[InterfaceType( ComInterfaceType.InterfaceIsIDispatch )]
public interface IUmcClick
{
         [DispId(0x60020000)]
         void UmcClick();
 
         [DispId(0x60030000)]
         void UmcParamClick( string param );
}
[코드1] COM 에 노출시킬 Interface 정의
 
[InterfaceType( ComInterfaceType.InterfaceIsIDispatch )] 구문을 통해 COM 에 노출시키는 방법을 결정합니다.
 
[DispId(0x60020000)] 구문을 통해 디스패치 식별자를 각각의 이벤트마다 서로 다르게 지정합니다.
 
아직 저 또한, COM 에 대해 구구절절 설명해 줄만큼 잘 알지 못하고, 위에서 사용된 Attribute 은 공식처럼 사용된다는 것 정도만 알아 두면 될 것 같다.
 
 
UI 에서의 이벤트 발생
 
다음 UserControl 코드는 두개의 버튼을 올려 놓았으며,
각각 버튼은 인자가 없는 버튼과, 인자를 전달하는 이벤트에 대한 소스입니다.
 
[ClassInterface( ClassInterfaceType.AutoDual)]
[ComSourceInterfaces(typeof(IUmcClick))]
public partial class UserControl1 : UserControl
{
         // 인자없는 이벤트
         public delegate void UmcClickHandler();
         public event UmcClickHandler UmcClick;
 
         // 문자열 인자를 넘길 이벤트
         public delegate void UmcParamClickHandler( string param );
         public event UmcParamClickHandler UmcParamClick;
 
         public UserControl1()
         {
                  InitializeComponent();
         }
 
         ///<summary>
         /// Raise Event
         ///</summary>
         private void OnUmcClick()
         {
                  if( UmcClick != null )
                      Invoke( UmcClick, null );
         }
 
         ///<summary>
         /// Raise Event
         ///</summary>
         private void OnParamUmcClick()
         {
                  // 인자값을 넘긴다.
                  if( UmcParamClick != null )
                      Invoke( UmcParamClick, "스마트클라이언트가 전달한 메세지");
         }
 
         private void button1_Click(object sender, EventArgs e)
         {
                  OnUmcClick();
         }
 
         private void button2_Click(object sender, EventArgs e)
         {
                  OnParamUmcClick();
         }
}
[코드2] UserControl 의 두개 버튼에 대한 이벤트 발생
 
public delegate void UmcClickHandler();
public event UmcClickHandler UmcClick;
 
이벤트를 발생시키기 위해 델리게이트와 이벤트를 선언하였다.
 
if( UmcClick != null )
    Invoke( UmcClick, null );
 
이 구문을 통해 이벤트를 발생을 시킵니다.
 
위 두 부분이 잘 이해가 되지 않는다면, 이벤트에 대해 좀 더 학습 해야 할 것 같다.
 
한가지 주의할 것은, Interface 를 통해 선언한 이벤트메서드와 UI부분의 event 의 네이밍을 맞춰주도록 하자. 그렇지 않으면 이벤트를 자바스크립트에서 제대로 받기가 힘들다.
 
[주의] 위 처럼 이벤트와 Interface 메서드의 네이밍을 맞추어주자.
 
 
HTML 에서 이벤트 받기
 
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>SmartClient 와익스플로러의연동</title>
    `<script event="UmcClick" for="control1">
                  alert('인자없는이벤트전달받음');
    </script>
         <script event="UmcParamClick(a)" for="control1">
                  alert(a);
         </script>
</head>
<body>
    <form id="form1">
    <div>
                  <object id="control1" classid="SmartClient1.DLL#SmartClient1.UserControl1"></object>
    </div>
    </form>
</body>
</html>
[코드3] test.html
 
<object id="control1" classid="SmartClient1.DLL#SmartClient1.UserControl1"></object>
 
Object 태그를 통해 웹에 우리가 만든 UserControl 이 엠베디드 될 것이다.
 
<script event="UmcClick" for="control1">
<script event="UmcParamClick(a)" for="control1">
 
위의 script 태그를 통해 엠베디드 된 스마트클라이언트의 이벤트를 받게 된다.
주목할 것은 두번째 태그이다. 인자가 없는 이벤트는 단지 이벤트 네이밍만 명시하면 되지만, 인자가 있을 경우는 인자로 받을 임의의 변수를 지정해 주도록 하자.
 
그럼 인자를 받는 이벤트의 결과만 보도록 하자.
 
[그림2] 스마트클라이언트가 전달한 이벤트
 
 
UserControl 에서 우리는 다음과 같은 메시지를 전달하였다.
 
Invoke( UmcParamClick, "스마트클라이언트가 전달한 메세지");
 
 
CAS 설정하기
 
브라우져에서 UI 의 이벤트를 전달받기 위해선 CAS 권한 제약을 받는다.
간단한 검색만으로 권한을 추가할 수 있을 거라고 생각한다.
 
 
 
 
재미있는 문제
 
UserControl 의 생성자에 다음과 같은 구문을 추가해 보자.
 
public UserControl1()
{
         InitializeComponent();
 
         button1.Click += new EventHandler(delegate(object sender, EventArgs e) {
                           MessageBox.Show("UI 에서 연결한 이벤트");
                  } );
}
 
신기한 구문이다. 위 구문은 익명 메서드라는 것으로, 메서드 구현하지 않고, 대리자를 통해 메서드의 구현을 위임하는 코드이다.
 
그럼 문제를 내도록 하겠다.
UI 에 브라우져에 엠베디드 될 것이고, HTML 에서 자바스크립트로 이벤트를 구현하는 부분이 있다.
하지만, UI 에 이미 버튼에 대한 이벤트를 연결하였다.
 
그럼 두 이벤트중 누가 먼저 실행될까???
 
처음 나는, 오직 자바스크립트 이벤트만 실행될 거라고 생각했다. 자바스크립트는 C# 코드의 이벤트 등록 연산자(+=) 를 못 알아 먹을거라고 생각했기 때문이다.
 
하지만… 결과는 ㄷ ㅐ 반전이다.
자바스크립트의 이벤트가 먼저 발생되고, C# 코드의 이벤트가 발생한다.
 
결과를 보면 분명, 이벤트라는 것이 마지막에 등록된 이벤트의 꽁무니에 등록이 되어야 당연하다고 생각했는데, 자바스크립트의 script event 구문은 무척이나 당황한 결과를 만들어 내었다.
 
 
마치며
 
점점 스마트클라이언트 프로젝트가 활성화 되고, 언젠가는 스마트클라이언트를 접할 기회가 올 거라고 확신하다. Internet Explorer 에 종속적인 기술이긴 하지만, 점점 사양되는 ActiveX 보다 월등히 닷넷스런(?) 기술이다.
아직까지 이해할 수 없는 배포 관련 이슈들이 남아 있지만, 언젠가는 트러블 슈팅할 날이 올 거라고 생각한다.
Posted by 땡초 POWERUMC

댓글을 달아 주세요

  1. 야구개폐인 2010.02.04 11:20 Address Modify/Delete Reply

    정말 감사합니다 ㅠㅠ 흑흑흑

  2. ash84 2010.08.31 14:42 Address Modify/Delete Reply

    안녕하세요 ^^

    위의 스마트 클라이언트 소스를 가지고 배포를 해봣는데요,

    왜 익스플로러 상에서 인트라넷이 꺼져 있다고 하면서 계속 복원만 하다가

    아무것도 나오지 않는지 궁금합니다.

  3. 시험모드 2012.05.22 10:01 Address Modify/Delete Reply

    시작부분에..
    일반적으로 ComVisible(true) 로 설정되어 있다면, 우리는 자바스크립트로 public 으로 된 프로퍼티나 메서드 등에 바로 접근 할 수 있다.

    라고 하셨는데... 혹시 프로퍼티나 메서드 에 접근하는 방법 포스팅 해놓으신 부분 있으신가요...?

    그 부분이 필요한데 ㅠㅠ 휙 지나가서 아쉽네요..

  4. 김영대 2012.11.15 19:28 Address Modify/Delete Reply

    정말 감사드립니다 엄준일님 항상 잘 배우고 있습니다.