Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
覽器加載頁面是按從上到下順序加載的。加載 JS 并執(zhí)行的時(shí)候,會(huì)阻塞其他資源的加載。這是因?yàn)?JS 可能會(huì)有 DOM 、樣式等等操作,所以瀏覽器要先加載這段 JS 并執(zhí)行,再加載放在它后面的 HTML、CSS。
因此,加入一段巨大的 JS 放在最上面,瀏覽器首先要下載并執(zhí)行,這段時(shí)間里面,頁面是空白的。相比于加載了部分 HTML 和 樣式 但是沒有 JS 交互功能,顯然是后者對于瀏覽者體驗(yàn)要好。
然而,是否所有 JS 都要放在最下面呢?并不是。
舉實(shí)際的例子:
html5shiv是一段 JS 腳本,用來是早期 IE 兼容 HTML5 新增標(biāo)簽的支持。
這個(gè) JS 腳本,必須要放在上面 head 部分,為什么呢?因?yàn)樵诶?IE 瀏覽器下面,不支持 <section> 這樣的標(biāo)簽,所以用 JS 來兼容。如果放在底部,等 IE 瀏覽器先報(bào)錯(cuò)了,才會(huì)執(zhí)行這塊 JS 沒多大用。
jQuery 這類的庫,也是建議放在最上面的。首先最大的疑問可能是 jQuery 這么大,放在上面豈不是阻塞的很厲害?
不過 jQuery 通常引用的是 CDN 地址,而且經(jīng)過 gzip 壓縮之后并不是很大,而且引用公共 CDN 上面的 jQuery 話,很大幾率早已被用戶緩存下來了。所以可以不需要考慮阻塞產(chǎn)生的性能問題。
而我們都知道,JS 是按順序執(zhí)行下來的。也就是你沒運(yùn)行 jQuery 之前,先運(yùn)行了調(diào)用 jQuery 函數(shù)的代碼,就會(huì)報(bào)錯(cuò)。你可以控制你自己寫的 JS 放在頁面最下面,放在 jQuery 下面,但是你無法保證頁面上其他地方會(huì)不會(huì)有人圖省事直接在 HTML 代碼里面輸出 JS。如果有,那么就會(huì)報(bào)錯(cuò)。
所以我建議,類庫放在上面加載,其余代碼盡可能放在最底下加載。
然而,前端性能優(yōu)化只是薄薄一層
可能前端優(yōu)化半天,還不如上個(gè) CDN 或者加個(gè)寬帶或者優(yōu)化一個(gè)后端算法來的效果好。
者: 芋頭yt
轉(zhuǎn)發(fā)鏈接:https://mp.weixin.qq.com/s/A03YiPsvlREkB20ATW9Wcw
vue:3.0
vue-cli:4.5.11
使用element-ui繪制ui界面
(1)安裝element-ui
npm i element-ui -S
(2)導(dǎo)入element-ui
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);
Uncaught TypeError: Cannot read property 'prototype' of undefined
目前element-ui只支持2.6以下的版本,Vue3.0要使用element-ui就要使用element-plus
官網(wǎng)說法就是為vue-cli@4.5以上提供element-plus
參考element-ui官網(wǎng)
https://element-plus.gitee.io/#/zh-CN/component/quickstart
(1)安裝element-plus
npm i element-plus
(2)導(dǎo)入element-plus
import ElementPlus from 'element-plus';
import 'element-plus/lib/theme-chalk/index.css';
const Vue = createApp(App)
Vue.use(ElementPlus)
這樣就解決了!
vue的生命周期
vue每個(gè)組件都是獨(dú)立的,每個(gè)組件都有一個(gè)屬于它的生命周期,從一個(gè)組件創(chuàng)建、數(shù)據(jù)初始化、掛載、更新、銷毀,這就是一個(gè)組件所謂的生命周期。
組件中的具體方法:beforeCreate created beforeMount mounted beforeUpdate updated
beforeDestroy destroyed
總共分為8個(gè)階段創(chuàng)建前/后,載入前/后,更新前/后,銷毀前/后。
創(chuàng)建前/后:
在beforeCreated階段,vue實(shí)例的掛載元素$el和數(shù)據(jù)對象data都為undefined,還未初始化。
在created階段,vue實(shí)例的數(shù)據(jù)對象data有了,$el還沒有。
載入前/后:
在beforeMount階段,vue實(shí)例的$el和data都初始化了,但還是掛載之前為虛擬的dom節(jié)點(diǎn),data還未替換。
在mounted階段,vue實(shí)例掛載完成,data成功渲染。
更新前/后:
當(dāng)data變化時(shí),會(huì)觸發(fā)beforeUpdate和updated方法。
銷毀前/后:
beforeDestory是在vue實(shí)例銷毀前觸發(fā),一般在這里要通過removeEventListener解除手動(dòng)綁定的事件。實(shí)例銷毀后,觸發(fā)的destroyed。
耶,又學(xué)習(xí)到了一個(gè)新知識(shí)點(diǎn)。
又是一個(gè)向陽而生的一天。
じゃね
*請認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。