摘要:技術細節對以上問題解決方案,我采用端對端懶加載不同平臺的,分享邏輯統一由后端控制即頁面里只需要引入一個腳本。總體引用方法放置獲取分享信息的入參排除不需要那種分享。。。。。。
改造起點
github L6zt
項目前端與后端緊耦合,分享信息 放在jsp里,例如:
前端還要獲取全局變量里的值,初始化分享
2.分享功能沒有進行統一的合并,所以每個頁面都需要重寫分享邏輯,很low低效的很,而且不利于維護。
3.每次都需要 引入 釘釘 和 微信 分享的 sdk js 感覺浪費流量,而且 影響頁面加載速度, 這個兩個js都需要同時引入。
對以上問題解決方案,我采用: 端對端懶加載 不同平臺的 sdk, 分享邏輯 統一由后端控制 即 頁面里 只需要引入一個js腳本。
總體引用方法
// data-ajax 放置獲取分享信息 ajax的入參 //data-exclud 排除 不需要 那種分享
。。。。。。部分代碼
公共函數
var noop = function() {}; var hasOwnP = function(obj, prop) { return Object.hasOwnProperty.call(obj, prop); }; var toString = function(obj) { return Object.prototype.toString.call(obj); }; var isHardVar = function(obj) { var result = toString(obj); return result === "[object Object]" || result === "[object Array]"; } var merge = function() { var lg = arguments.length; var result = {}; if (lg < 2) { return arguments[0] }; for (var i = 0; i < lg; i++) { for (var key in arguments[i]) { console.log(hasOwnP(arguments[i], key), key); if (hasOwnP(arguments[i], key)) { var value = arguments[i][key]; result[key] = value; } } } return result; };
對異步處理 自己模擬的promise實現
var JcPromise = (function() { function JcPromise(fn) { fn = fn || noop; var statusList = ["start", "pending", "succeed", "err"]; var cbStatus = [0, 1]; var status = statusList[0]; var data = null; var err = null; var that = this; var successFn = []; var errFn = []; function resolve(d) { data = d; that._changeStatus(2); }; function reject(e) { err = e; that._changeStatus(3); }; this.getData = function() { return data; }; this.getErr = function() { return err }; this.getStatus = function() { return status }; this._changeStatus = function(idx) { switch (status) { case statusList[2]: case statusList[3]: { return false } }; status = statusList[idx]; if (status === statusList[3]) { setTimeout(function() { that._triggerCatch(); }, 0) } if (status === statusList[2]) { setTimeout(function() { that._triggerThen(); }, 0) } }; this._pushThenCb = function(cb) { successFn.push({ status: cbStatus[0], cb: cb }); if (status === statusList[2]) { this._triggerThen(); } }; this._pushCatchCb = function(cb) { errFn.push({ status: cbStatus[0], cb: cb }); if (status === statusList[3]) { this._triggerCatch(); } }; this._triggerThen = function() { successFn.map(function(item) { if (item.status === cbStatus[0]) { item.cb(data); item.status = cbStatus[1]; } }) }; this._triggerCatch = function() { errFn.map(function(item) { if (item.status === cbStatus[0]) { item.cb(err); item.status = cbStatus[1]; } }) }; this._changeStatus(1); this.uuid = uuid++; try { fn(resolve, reject); } catch (e) { reject(e) } return this }; JcPromise.fn = JcPromise.prototype; // 返回一個promise JcPromise.fn.then = function(cb) { var promiseR = null; var promiseJ = null; var result = null; var that = this; var fn = function() { setTimeout(function() { try { var data = that.getData(); result = cb(data); if (typeof result === "object" && result !== null && result.constructor === JcPromise) { result.then(function(data) { promiseR(data) }).catch(function(e) { promiseJ(e) }) } else { promiseR(result) } } catch (e) { promiseJ(e) } }, 0); }; this._pushThenCb(fn); // 觸發promise return new JcPromise(function(r, j) { promiseR = r; promiseJ = j; }); }; // 返回一個promise JcPromise.fn.catch = function(cb) { var promiseR = null; var promiseJ = null; var result = null; var that = this; var fn = function() { setTimeout(function() { try { var data = that.getErr(); result = cb(data); if (typeof result === "object" && result !== null && result.constructor === JcPromise) { result.then(function(data) { promiseR(data) }).catch(function(e) { promiseJ(e) }) } else { promiseR(result) } } catch (e) { promiseJ(e) } }, 0) }; this._pushCatchCb(fn); // 觸發promise return new JcPromise(function(r, j) { promiseR = r; promiseJ = j; }); }; return JcPromise })();
懶加載加載js方法
function loadScript(src) { return new JcPromise(function(r, j) { var el = document.createElement("script"); el.onload = function() { r(el); }; el.onerror = function() { j(); }; el.src = src; document.body.appendChild(el); }); };
判斷 是釘
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/108880.html
摘要:深度學習理論在機器翻譯和字幕生成上取得了巨大的成功。在語音識別和視頻,特別是如果我們使用深度學習理論來捕捉多樣的時標時,會很有用。深度學習理論可用于解決長期的依存問題,讓一些狀態持續任意長時間。 Yoshua Bengio,電腦科學家,畢業于麥吉爾大學,在MIT和AT&T貝爾實驗室做過博士后研究員,自1993年之后就在蒙特利爾大學任教,與 Yann LeCun、 Geoffrey Hinto...
摘要:今日,在第屆神經信息處理系統大會中,百度首席科學家吳恩達教授發表演講利用深度學習開發人工智能應用的基本要點。為了方便讀者學習和收藏,雷鋒網特地把吳恩達教授的做為中文版。吳恩達先講述了常見的深度學習模型,然后再著分析端到端學習的具體應用。 今日,在第 30 屆神經信息處理系統大會(NIPS 2016)中,百度首席科學家吳恩達教授發表演講:《利用深度學習開發人工智能應用的基本要點(Nuts an...
摘要:企業在選擇云系統時,尤其如此。云系統中的每個因素都與公司成長模式有關。成本蠕變成本蠕變或許是最普遍也是最容易被負責人忽略的,對云系統的產生的影響也是更為負面的。如果你選擇的云服務組合是正確的,云系統的擴張就應該是順其自然的。 一、在選擇過程中忽略重要的云屬性企業在購買整合系統時要面對一系列的挑戰性,除了要理解公司行為方式和原因以外,還需要有考慮到其他因素。如果忽略了某個流程或要求,那么在這個...
閱讀 2941·2023-04-26 01:52
閱讀 3468·2021-09-04 16:40
閱讀 3629·2021-08-31 09:41
閱讀 1764·2021-08-09 13:41
閱讀 556·2019-08-30 15:54
閱讀 2960·2019-08-30 11:22
閱讀 1612·2019-08-30 10:52
閱讀 948·2019-08-29 13:24