WXHR: рд╡реЗрдм рд╡рд░реНрдХрд░реНрд╕ рдХреЗ рд╕реНрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫрд╛ рдкреБрд░рд╛рдирд╛ XHR

рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВ рдЬрдм рдХрд┐рд╕реА рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕реЗ рдбрд┐рдХреЛрдб рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдЧрдВрддрд╡реНрдп рдкрд░ рднреЗрдЬрдирд╛ред рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдПрдХ рдСрдирд▓рд╛рдЗрди 3 рдбреА рд╕рдВрдкрд╛рджрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбрд▓ gzip'an json'e рдореЗрдВ рдХрдИ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред



рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЕрдирдкреИрдХ рдХрд░рддреЗ рд╕рдордп рдФрд╕рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗрдХрдВрдб рдпрд╛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП рдЬрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рдХрд░реЗрдВ?

1. рдлреНрд▓реИрд╢ рдкрд░ рдХреБрдЫ рдХреЗ рд╕рд╛рде рдЖрдУ (рдореБрдЭреЗ 100% рдпрдХреАрди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореБрдЦреНрдп рдереНрд░реЗрдб рдореЗрдВ рдкреНрд▓рдЧрдЗрдиреНрд╕ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ)

2. рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░реЗрдВ, рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрдВред

3. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВред



рд╕рднреА 3 рд╡рд┐рдХрд▓реНрдк рдмрд╣реБрдд рд╕рд╣реА рдирд╣реАрдВ рд╣реИрдВ?



рдХрдЯреМрддреА рдХреЗ рддрд╣рдд, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди (рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдРрдк рдХреЛрдб рдХреЗ рдмрд┐рдирд╛)ред



рд╡реЗрдм рдХрд░реНрдордЪрд╛рд░реА рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВ, рдЬреЛ рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЕрдВрджрд░ рдПрдХ xhr рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред



рд╣рдореЗрдВ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ XHR рдХреЛ рдирдордХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ XHR рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдкреВрдлрд┐рдВрдЧ рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВред рдФрд░ рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░, рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рдмрд┐рдирд╛, рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред

рдореИрдВ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░реЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди (7.03 - XHR рдлрд╝реИрдХреНрдЯрд░реА рдЙрджрд╛рд╣рд░рдг) рд╕реЗ xhr рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред

рд╣рдорд╛рд░реЗ xhr рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ 3 рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП xhr, wxhr host, wxhr рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ред



рдХрд╛рд░реНрдп рдХрд╛ рддрд░реНрдХ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧрд╛:

0. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ xhr.request рдЪрд▓рд╛рддрд╛ рд╣реИ

1. рдпрджрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЛ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ

2. рдпрджрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдлрд┐рд░ рднреА, рдЕрдиреБрд░реЛрдз рд╡рд┐рдзрд┐ рдореЗрдВ, рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ (wxhr.js) рдХреЛ рд╕реНрдкреЙрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ,

2.1 рд╣рдо рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдШрдЯрдирд╛рдУрдВ рдХреЛ рд▓рдЯрдХрд╛рддреЗ рд╣реИрдВ, рдкреЛрд╕реНрдЯрдорд╛рд╕реЗрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдкреНрд░реЙрдХреНрд╕реА рдХрд░рддреЗ рд╣реИрдВ

3. wxhr.js рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдордЭрддреА рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИ рдФрд░ рдПрдХ рд╕рдВрджреЗрд╢ рдИрд╡реЗрдВрдЯ рдХреЛ рд▓рдЯрдХрд╛ рджреЗрддреА рд╣реИ

3.1 рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ,

3.2 рдПрдХ рдирд┐рдпрдорд┐рдд xhr рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ,

3.3 рд╕рд╛рдорд╛рдиреНрдп xhr.request рдХрд░рддрд╛ рд╣реИ,

3.4 рдбреЗрдЯрд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдбреЗрдЯрд╛ рдХреЛ рдЙрд╕рдХреЗ рд╣реЛрд╕реНрдЯ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ,

3.5 рд╣реЛрд╕реНрдЯ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХреЙрд▓рдмреИрдХ рдХрд░рддрд╛ рд╣реИред



рдкреИрдЪ xhr рдЙрд░реНрдл тАЛтАЛwxhr:

/** * @fileOverview WXHR Request - Web Worker XHR * * @example * <pre> * var myHandler = new global.xhr(true), // enable workers * myHandler2 = new global.xhr(), // worker mode is disabled by default * data = { * method: 'GET', * url: 'test.txt', * success: function (data, isWorker) { * alert(data + (isWorker ? ' XHR called from Worker' : ' XHR called from Window')); * }, * error: function (status) { * alert(status); * } * }; * * myHandler.request(data); * myHandler2.request(data); * </pre> * * @author azproduction */ /**#nocode+*/ (function (global) { /**#nocode-*/ // Upgrade 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - var xhr = function (canUseWorkers) { this.canUseWorkers = (typeof canUseWorkers === 'undefined') ? false : !!canUseWorkers; }, // detect workers support workersSupported = typeof global.Worker !== 'undefined', // detect mode itIsWindow = typeof global.document !== 'undefined'; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xhr.prototype = { request: function(params) { params.method = params.method.toUpperCase() || 'GET'; params.url = params.url || ''; params.postVars = params.method !== 'POST' ? (params.postVars || null) : null; params.success = params.success || function () {}; params.error = params.error || function () {}; // Upgrade 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - if (this.canUseWorkers && workersSupported && itIsWindow) { // use advanced wxhr var worker; // this is bad part mb createObjectURL will save in future worker = new global.Worker('wxhr.js'); // <<< bad worker.onmessage = function(e) { var data = e.data; // proxy response // @todo delete true parameter in Production! params[data.callback](data.data, true); }; // if worker throws error query fails worker.error = function(e) { params.error(0); }; // worker proxy request worker.postMessage({ method: params.method, url: params.url, postVars: params.postVars }); return; } // browser do not support workers or script is already works as Worker // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - var xhr = (this.createXhrObject())(), self = this; xhr.onreadystatechange = function() { try { if (xhr.readyState !== 4) { return; } self.processResponse(params, { status: xhr.status, responseText: xhr.responseText, contentType: xhr.getResponseHeader('Content-type') }); } catch (e) { params.error(xhr.status); } }; xhr.open(params.method, params.url, true); xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhr.send(params.postVars); }, createXhrObject: function() { // Factory method. var methods = [ function() { return new XMLHttpRequest(); }, function() { return new ActiveXObject('Msxml2.XMLHTTP'); }, function() { return new ActiveXObject('Microsoft.XMLHTTP'); } ]; for (var i = 0, len = methods.length; i < len; i++) { try { methods[i](); } catch(e) { continue; } // If we reach this point, method[i] worked. this.createXhrObject = methods[i]; // Memoize the method. return methods[i]; } // If we reach this point, none of the methods worked. throw new Error('SimpleHandler: Could not create an XHR object.'); }, processResponse: function (params, xhr) { if (xhr.status === 200) { if (xhr.contentType.match(/^application\/json/)) { params.success(JSON.parse(xhr.responseText)); } else { params.success(xhr.responseText); } } else { params.error(xhr.status); } } }; // Upgrade 3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - if (!itIsWindow) { // worker mode: listen for requests global.addEventListener('message', function(e) { var data = e.data; // proxy success data.success = function (data) { global.postMessage({ callback: 'success', data: data }); }; // proxy error data.error = function (status) { global.postMessage({ callback: 'error', data: status }); }; var xhrRequest = new xhr(); xhrRequest.request(data); }, false); } else { // script mode: export xhr global.xhr = xhr; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // global.xhr = xhr; /**#nocode+*/ }(this)); /**#nocode-*/
      
      





рдХрд╛рдо рдХрд╛ рдЙрджрд╛рд╣рд░рдг: azproduction.ru/wxhr



рдореИрдВ wxhr рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рдЬрд╣рд╛рдБ рдХрд╣реАрдВ рднреА рд╣реЛ, рдпрд╣ рдХреЗрд╡рд▓ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрд╣рд╛рдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рд╣рдореЗрд╢рд╛ рдореБрдЦреНрдп рдзрд╛рд░рд╛ (рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд╕реНрдкреЙрди, рдбрдмрд▓ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░) рд╕реЗ xhr рд╕реЗ рдиреАрдЪ рд╣реЛрдЧрд╛ред рдХреБрдЫ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдлрд╛рд░реА рдореЗрдВ, рдкреЛрд╕реНрдЯрдореИрд╕реЗрдЬ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рдЬреЛрдВрд╕ рдореЗрдВ рдПрдирдХреЛрдб рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдбрд┐рдХреЛрдб рдХрд░рддрд╛ рд╣реИред рддрд╛рдХрд┐ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ xhr рд╕реЗ рднреА рдмрджрддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред



рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЖрдпреЛрдЬрди рдХрд┐рдпрд╛: 2 рд╕рдорд╛рди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛, рдХреИрд╢ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рдкрд╣рд▓реЗ wxhr рджреВрд╕рд░рд╛ xhr рднреЗрдЬрд╛ред рдХреНрд░реЛрдо рдореЗрдВ ff рдФрд░ рд╕рдлрд╛рд░реА 100% рдорд╛рдорд▓реЛрдВ рдореЗрдВ wxhr рджреВрд╕рд░реЗ рдореЗрдВ, рдУрдкреЗрд░рд╛ рдореЗрдВ 75% wxhr рджреВрд╕рд░реЗ рдирдВрдмрд░ рдкрд░ рдЖрдпрд╛ред рдбреЗрдЯрд╛ 6 рдмрд╛рдЗрдЯреНрд╕ + рд╣реЗрдбрд░ред



All Articles