VS2012 - 웹 양식 - 번들링 혼란
새 ASP를 만들었습니다.Visual Studio 2012를 통한 NET Web Forms Project.안타깝게도 기본 사이트입니다.마스터 파일은 매우 혼란스럽습니다.(이 질문들은 관련성이 매우 높고 코드도 꽤 많이 참고하고 있어서 함께 올립니다.)
우선 번들링과 미니싱의 목적은 이미 이해하고 있으니, 그 부분은 논의할 필요가 없습니다.그러나 스크립트가 기본 마스터 페이지에 포함되는 방식에 대해 이해할 수 없습니다.
1:
BundleConfig.cs 파일에 "~/bundles/WebFormsJs"라는 번들이 생성되는데 마스터 페이지에서는 Script Manager에서 이와 같은 개별 .js 파일이 하나씩 나열되는 이유는 무엇입니까?
BundleConfig.cs 내부:
bundles.Add(new ScriptBundle("~/bundles/WebFormsJs").Include(
"~/Scripts/WebForms/WebForms.js",
"~/Scripts/WebForms/WebUIValidation.js",
"~/Scripts/WebForms/MenuStandards.js",
"~/Scripts/WebForms/Focus.js",
"~/Scripts/WebForms/GridView.js",
"~/Scripts/WebForms/DetailsView.js",
"~/Scripts/WebForms/TreeView.js",
"~/Scripts/WebForms/WebParts.js"));
내부 사이트.마스터:
<body>
<form runat="server">
<asp:ScriptManager runat="server">
<Scripts>
<%--Framework Scripts--%>
<asp:ScriptReference Name="MsAjaxBundle" />
<asp:ScriptReference Name="jquery" />
<asp:ScriptReference Name="jquery.ui.combined" />
<asp:ScriptReference Name="WebForms.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebForms.js" />
<asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebUIValidation.js" />
<asp:ScriptReference Name="MenuStandards.js" Assembly="System.Web" Path="~/Scripts/WebForms/MenuStandards.js" />
<asp:ScriptReference Name="GridView.js" Assembly="System.Web" Path="~/Scripts/WebForms/GridView.js" />
<asp:ScriptReference Name="DetailsView.js" Assembly="System.Web" Path="~/Scripts/WebForms/DetailsView.js" />
<asp:ScriptReference Name="TreeView.js" Assembly="System.Web" Path="~/Scripts/WebForms/TreeView.js" />
<asp:ScriptReference Name="WebParts.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebParts.js" />
<asp:ScriptReference Name="Focus.js" Assembly="System.Web" Path="~/Scripts/WebForms/Focus.js" />
<asp:ScriptReference Name="WebFormsBundle" />
<%--Site Scripts--%>
</Scripts>
</asp:ScriptManager>
보다시피..각각의 동일한 .js 파일은 Script Manager에 개별적으로 나열됩니다.BundleConfig.cs 밖에 있는 "WebFormsJs" 번들에 대한 참조조차 볼 수 없습니다.이 자바스크립트 파일들 각각이 Script Manager에서 개별적으로 참조될 예정이라면 왜 그 번들이 만들어졌을까요?
2:
Script Manager가 이런 방식으로 사용되는 이유는 무엇입니까?Microsoft 의 Ajax 버전(UpdatePanels) Script Manager 가 필요하다는 인상을 받았습니다 에.여기서 스크립트 매니저 를 사용하는 목적이 무엇입니까? 하기 위해서단순히 자바스크립트 파일을 등록하기 위해서?
3:
Script Manager를 통해 자바스크립트 파일을 등록하는 것과 사이트 상단에 있는 것의 차이점은 무엇입니까?그 대신 다음 방법을 사용하는 마스터?
<%: Scripts.Render("~/bundles/modernizr") %>
4:
Script Manager 내부에서도 다음과 같은 내용이 눈에 띄었습니다.
<asp:ScriptReference Name="MsAjaxBundle" />
<asp:ScriptReference Name="jquery" />
<asp:ScriptReference Name="jquery.ui.combined" />
... 적어도 BundleConfig.cs 에서 "MsAjaxBundle"을 알아볼 수 있습니다만 jquery와 jquery.ui.combined는 어디에서 정의됩니까?검색을 해보니 packages.config에서 그들에 대한 참조가 있었습니다.
<package id="jQuery" version="1.7.1.1" targetFramework="net45" />
<package id="jQuery.UI.Combined" version="1.8.20.1" targetFramework="net45" />
하지만 여기서 무슨 일이 일어나고 있는지 저도 잘 모르겠습니다.NuGet에 packages.config가 사용된 줄 알았습니다.게다가...이 jQuery.js 파일의 위치에 대한 경로가 여기에 나와 있지도 않습니다.여기에 나열되어 있으며 의 특정 버전과 이상하게 연관되어 있습니다.NET Framework (제 경우에는 4.5).javascript 리소스가 의 버전과 연결되는 이유.NET Framework는 제 능력 밖입니다.
어쨌든, 질문 4는 이것입니다.Script Manager의 리소스 "jquery"는 어떻게 추가/사용되고 있습니까?다른 번들처럼 jQuery.js 파일이 BundleConfig.cs 에서 함께 번들로 제공되는 것을 볼 수 없는 이유는 무엇입니까?
5:
사이트에서 다음 스크립트 참조를 제거할 수 있습니까?UpdatePanel과 그런 종류의 Microsoft Ajax 컨트롤을 사용할 계획이 없다면 마스터?나는 이것이 왜 기본적으로 여기에 포함되는지 조금 혼란스럽습니다.
<asp:ScriptReference Name="MsAjaxBundle" />
업데이트: ASP에 대한 자세한 내용도 포함된 새로운 블로그 게시물입니다.NET 기사
기본적으로 webforms + bundling은 스크립트 매니저에서 변경할 수 없었던 수많은 레거시 동작 때문에 이렇게 보입니다.
구체적인 질문과 관련하여:
기본적으로 중복 제거가 올바르게 수행되므로 스크립트 관리자는 원래 스크립트 리소스에 대한 제한이 있으므로 스크립트를 매핑할 수 없으므로 디스크에 매핑한 후 해당 파일이 번들에 이미 포함되어 있으므로 적절하게 중복 제거해야 합니다.WebformsBundleJs는 ScriptManager nupkgs 내부의 PreAppStart 코드 내부에서 생성되는 스크립트 매핑입니다.(이것은 발견하기가 거의 불가능하다는 것에 동의합니다.)
눈에 띄지 않는 검증과 같은 새로운 4.5 기능은 jquery(스크립트 관리자를 통해)를 필요로 하기 때문에 jquery가 두 번 렌더링되지 않도록 스크립트 관리자를 사용했습니다.
이것은 잘 작동하지만 Script Manager를 사용하면 중복제거가 절대 되지 않습니다.그래서 현대화는 문제가 되지 않을 것입니다.
jquery 패키지는 스크립트 폴더의 디스크에 jquery 파일을 드롭합니다.
해당 참조는 axis 스크립트가 모두 포함된 msajax 번들을 가져오는데, 필요하지 않거나 원한다면 제거해도 무방할 것 같습니다.
같은 질문이 좀 있었는데요...
하지만 4번 질문에 대해서는 다른 의견을 가지고 있습니다.
WebFormsBundle 및 MsAjaxBundle은 모두 PreAppStatCode에 정의된 스크립트 참조입니다(당신처럼 이 파일이 어디에 있는지 찾을 수 없습니다).
그래서 같은 장소(Script Manager)에 있다는 느낌이 듭니다.WebForms PreAppStartCode)에는 기본적으로 jquery 및 jQueryUI 스크립트 참조에 대한 다른 정의가 있습니다.이러한 참조는 스크립트 관리자에서 사용됩니다.
이 프로세스는 CDN 등과 같은 중요한 기능을 활용하기 때문에 매우 중요합니다.이 특정 참조에 대한 PreAppStartCode의 jquery 정의에는 Enable을 활성화할 경우 사용할 정의된 CDN 경로가 있습니다.마스터 페이지의 스크립트 관리자에 있는 CDN(EnableCdn="true")
질문 1에 대한 답변 수락 설명에서 무엇인가를 명확히 설명합니다.
개별 웹 양식 js 파일에 대한 스크립트 참조의 이유는 로컬 파일(예: "~/Scripts/WebForms/WebForms.js")이 시스템에 존재하는 동일한 파일을 재정의하도록 허용하기 위해서입니다.Web.dll(시스템을 반영하는 경우).Web.dll 및 참조 폴더에서 동일한 .js 파일을 찾을 수 있습니다.
언급URL : https://stackoverflow.com/questions/12290537/vs2012-web-forms-bundling-confusion
'programing' 카테고리의 다른 글
ASP에서 Visual Studios Profiler를 사용하려고 할 때 메타베이스 오류가 발생했습니다.넷사이트 (0) | 2023.10.11 |
---|---|
mariaDB 쿼리에 대한 sql 코드 성능 향상 (0) | 2023.10.11 |
제한된 URI에 대한 액세스 거부 코드: 1012 (0) | 2023.10.11 |
Angularjs를 사용하여 선택 드롭다운에서 기본값 설정 (0) | 2023.10.11 |
varchar 대신 varchar가 아닌 varvinary인 이유 (0) | 2023.10.11 |