फायरबग और क्रोम डेवलपर टूल का उपयोग करके, मैं कुछ जावास्क्रिप्ट और सीएसएस फाइलों को लोड करने के माध्यम से देख सकता हूं, मेरी विकास मशीन पर अतिरिक्त 500ms ले सकता है। यह अलग-अलग कॉलों पर अलग-अलग फाइलों के साथ होता है और कोई फर्क नहीं पड़ता कि मैंने उन्हें किस क्रम में रखा है। अगर मैं फ़ाइलों को सीधे लिंक करता हूं तो यह 500 एमएमएस देरी कभी नहीं होती है। मैं पृष्ठ को बार-बार रीफ्रेश कर सकता हूं और अलग-अलग मान प्राप्त कर सकता हूं, लेकिन वे हमेशा अनुरोध समय में 500ms जोड़े गए थे। यदि मैं पृष्ठ को रीफ्रेश करना जारी रखता हूं, तो अतिरिक्त 500ms अलग-अलग फ़ाइलों या कभी-कभी दो फाइलों पर दिखाई देता है जहां नीचे दी गई छवि में 1000 मिलीमीटर देरी होती है।रहस्यमय एएसपी.नेट एमवीसी एक्शन उच्च विलंबता मुद्दा?
संपादित
मेरी HttpModule के BeginRequest और Monitor.Exit EndRequest में में Monitor.Enter लाना, की वजह से देरी दूर जाना तो मेरा अनुमान है कि यह एक से अधिक अनुरोध सूत्रण के साथ कुछ किया है।
मैं विधि कैशिंग के लिए इवान नागेल here द्वारा descibed उपयोग करें, लेकिन एक ही बात होता है जब मैं एक कार्रवाई है कि बस के माध्यम से एक कच्चे फ़ाइल गुजरता के साथ मेरे अपने नियंत्रक करने के लिए कॉल के साथ लिंक की जगह:
public FileResult RawFile(string path, string contentType)
{
var server = HttpContext.Server;
string decodedPath = server.UrlDecode(path);
string mappedPath = server.MapPath(decodedPath);
return File(mappedPath, contentType);
}
यहाँ कोड मैं अपने html के शीर्ष अनुभाग में है:
<link rel="stylesheet" href="@Url.Action("RawFile", new { controller = "Content", path = "~/Content/Site.css", contentType = "text/css" })" type="text/css" />
<script src="@Url.Action("RawFile", new { controller = "Content", path = "~/Scripts/debug/FBINFO.js", contentType = "application/x-javascript" })" type="text/javascript"></script>
<script src="@Url.Action("RawFile", new { controller = "Content", path = "~/Scripts/jquery-1.4.1.min.js", contentType = "application/x-javascript" })" type="text/javascript"></script>
यह मेरी उत्पादन सर्वर पर हो, कम से कम के रूप में अक्सर नहीं प्रतीत नहीं होता है, लेकिन यह है कहना मुश्किल है क्योंकि विलंब सामान्य रूप से अधिक होता है। क्या यह कुछ चिंता करने की ज़रूरत नहीं है? इसका कारण क्या होगा? यह कैसिनी और विंडोज 7 होम अल्टीमेट 64 बिट पर मेरे स्थानीय आईआईएस सर्वर के साथ होता है।
मैंने कॉल के समय में कस्टम एट्रिब्यूट जोड़ा है और ऑनएक्शन/ऑनरसेट निष्पादन और निष्पादित के बीच के समय आमतौर पर सब-मिलीसेकंड होते हैं। मैंने एक्शन विधि के चारों ओर एक स्टॉपवॉच का उपयोग किया है (ज़िप कंट्रोलर प्रतिक्रिया स्ट्रीम को लिखता है और परिणाम नहीं देता है) और समय हमेशा छोटे, औसत 1.5ms और हमेशा 10ms से कम होते हैं।
फिडलर हेडर में एकमात्र असली अंतर मैं एक्स-एएसपीनेट एमवीसी-वर्जन हेडर है, इसलिए मैंने इसे जोड़ने के लिए सेट नहीं किया है और एक्स-एएसपीनेट-वर्जन हेडर को भी फायदा नहीं पहुंचाया है। मैंने संपीड़न को सक्षम और अक्षम करने की कोशिश की है और बाकी सब कुछ भी मैं सोच सकता हूं। इसके बाद मैंने अपना खुद का कैश-कंट्रोल और इटाग हेडर जोड़ा जो इसका कोई प्रभाव नहीं पड़ा। दिलचस्प बात यह है कि 5004 देरी 304 के संशोधित प्रतिक्रिया के मामले में भी होती है जहां शरीर नहीं भेजा जाता है। कभी-कभी दो फाइलों में देरी होगी, एक 500 एमएमएस और अन्य 1000 एमएमएस।
प्रत्यक्ष फ़ाइल:
HTTP/1.1 200 OK
Content-Type: application/x-javascript
Last-Modified: Sun, 29 May 2011 22:42:27 GMT
Accept-Ranges: bytes
ETag: "b57a84af511ecc1:0"
Server: Microsoft-IIS/7.5
Date: Mon, 30 May 2011 04:38:20 GMT
Content-Length: 1336
RawFile कार्रवाई:
HTTP/1.1 200 OK
Cache-Control: public
Content-Type: application/x-javascript
ETag: "CD9F383D0537373C6D2DC8F60D6519A6"
Server: Microsoft-IIS/7.5
Date: Mon, 30 May 2011 04:34:37 GMT
Content-Length: 1336
IanT8 की टिप्पणी के बाद, मैं शुरू/अंत अनुरोध, लॉग जोड़ने के साथ ही ट्रैक करने के लिए एक HttpModule जोड़ा मेरी क्रिया विधियों के पहले और अंतिम बयान के रूप में कॉल करता है। लंबी कहानी छोटी दोनों अनुरोध एक ही समय में आती हैं और दूसरी कॉल की क्रिया विधि निष्पादित होने से पहले, पहले EndRequest के बाद 500ms देरी होती है। यह देरी आमतौर पर 49 9 एमएमएस होती है, लेकिन यह एक बार 497 एमएमएस थी, एक बार 498 एमएमएस और 4 9 2 एमएस।
2011-05-31 00:55:19.1874|INFO|20110531 00:55:19.196 BeginRequest: http://localhost:51042/Zip/Style?Path=~/Content/Site.css
2011-05-31 00:55:19.1874|INFO|20110531 00:55:19.197 BeginRequest: http://localhost:51042/Zip/Script?Path=~/Scripts/jquery-1.4.1.min.js|~/Scripts/debug/FBINFO.js
2011-05-31 00:55:19.2034|INFO|20110531 00:55:19.203 Style() Start
2011-05-31 00:55:19.2034|INFO|20110531 00:55:19.208 Style() End
2011-05-31 00:55:19.2034|INFO|20110531 00:55:19.212 EndRequest: http://localhost:51042/Zip/Style?Path=~/Content/Site.css
2011-05-31 00:55:19.7044|INFO|20110531 00:55:19.704 Script() Start
2011-05-31 00:55:19.7044|INFO|20110531 00:55:19.712 Script() End
2011-05-31 00:55:19.7044|INFO|20110531 00:55:19.713 EndRequest: http://localhost:51042/Zip/Script?Path=~/Scripts/jquery-1.4.1.min.js|~/Scripts/debug/FBINFO.js
अब वाकई दिलचस्प भाग के लिए
। मैंने अपने HttpModule पर एक स्थिर ऑब्जेक्ट बनाया और मॉनिटर कहा। BeginRequest और Monitor.Exit में EndRequest में प्रवेश करें। विलंब समाप्त हो गया। क्रोम एक कॉल को लगभग 15-20ms लेता है और दूसरा 30-40ms लेता है क्योंकि इसे पहले कॉल के अंत तक इंतजार करना पड़ता है, लेकिन 500 एमएमएस देरी खत्म हो जाती है। जाहिर है यह समाधान इष्टतम नहीं है।
क्या आपने कार्यों के संकलन का समय माना है? आप बाद की कॉल की जांच करके इसका परीक्षण कर सकते हैं। – Buildstarted
हां, मैं प्रश्न में एक नोट जोड़ूंगा। –
क्या सर्वर फॉल्ट पर उल्लिखित इस सीमा के साथ इसका कोई संबंध नहीं हो सकता है? क्या एमएस वास्तव में हमारी विकास मशीनों को इस तरह के परीक्षण के लिए बेकार बनाना चाहते हैं? प्रत्येक कॉल में जोड़े गए लगभग सटीक 500ms मुझे लगता है कि ऐसा कुछ ऐसा हो सकता है। http://serverfault.com/questions/133772/what-about-windows-7-as-a-web-server –