之前的文章《手把手教你使用JS給通用模組寫法(程式碼詳解)》中,給大家介紹了怎麼使用JS給通用模組寫法。以下這篇文章給大家了解vue中web前端專案優化,有需要的朋友可以參考一下,希望對你們有幫助。
今天終於得空了,我要把kui說明文件這個專案優化下。打開太慢了,就是這個http://k-ui.cn
10幾秒才能展示完全,真受不了。來張圖就明白了
看到這個就沒啥好意外了,為什麼會這麼慢。
因為說明文件的webpack
設定沒用vue-cli
鷹架,自己手動設定的,所以問題估計會多一點吧
1 )webpack配置出錯,導致庫重複被編譯到一個文件裡
逐步檢查了編譯後比較大的文件,發現index.js 也就是入口文件,其內容有vue 庫被重複打包了。如下圖
一句排查webpack
配置,沒有發現問題,那麼到底問題出在哪裡呢,搜尋了下vue
的引入,發現有3
個檔案有引入vue
,但是這並不影響編譯重複啊,不應該的,最後終於發現了問題,由於是mac
環境大小寫敏感所致,手一抖「import Vue from 'vue'
」寫成了「import Vue from 'Vue'
」。
看似沒有任何問題debug
調試也不會出錯。但問題就出現在這裡,把from
後面的「Vue
」改位 首字母 小寫的「vue
」問題解決了。重新編譯後檔案小了 130 多 kb。從 945kb 到 800 多 kb,繼續優化吧。
2)第三方褲檔過大造成的
由於說明文件有部分要程式碼高亮展示,文中用到了highlight.js
程式碼高亮函式庫。自行寫了個元件,程式碼如下:
<!-- code.vue --> <template> <div v-high class="k-code"> <pre: style="styles" ref="rel"> <code: class="lang"> <slot> </slot> </code>
//code.js import Hljs from "highlight.js"; import "highlight.js/styles/atom-one-light.css"; const vueHljs = {}; vueHljs.install = (Vue) => { Vue.directive("high", function (el, binding) { let blocks = el.querySelectorAll("pre code"); Array.prototype.forEach.call(blocks, Hljs.highlightBlock); }); }; export default vueHljs;
<!-- 调用 --> <code lang="xml html"> {{ code }} </code>
事實上程式碼這麼寫也不會有什麼問題,但是編譯後檔案為什麼會這麼大呢,800
多kb,於是乎我把關鍵的程式碼高亮程式碼註釋,也就是引入highlight.js
那裡幹掉。再編譯:
編譯後的檔案才130kb
,找到問題的根源了。
之前用Google的程式碼高亮,這次不用它了,markdown
也不想折騰。
去node_modules
仔細的探究下,因為程式碼高亮包含了太多的語言和語法,我每次編譯過後都是全量包,python
,sql
,c
等50
幾種高亮語言全在裡面,但我只要js
和html
#文法高亮,所以就從庫裡提出了我想要的:
var Hljs = require("./highlight"); //只要这2个高亮语言库,其他干掉 Hljs.registerLanguage("xml", require("./lang/xml")); Hljs.registerLanguage("javascript", require("./lang/javascript"));
再次編譯,編譯後180kb
,尚在接受範圍。
3)js模組沒有做按需載入
因為vue
是單頁web
,靠router
來驅動view
,隨著專案越來越龐大,所以按需載入這個是必須的,不然所有的頁面必然會打包在同一個js 檔案中。造成加載緩慢。
按需載入(也就是懶載入)有3
種實作方式
1)vue自帶的非同步方式
在 router push
的時候做修改即可
{ path: '/test', name: 'test', component: resolve => require(['../components/test'], resolve) }
2)es提案的import()
官方文件
##注意注視內的內容,名字一樣的會被打包進一個檔案3)webpack提供的require.ensure()const test = () => import( /* webpackChunkName: "test" */ '../components/test') { path: '/test', name: 'test', component: test },
注意ensure傳參,最後一個chunkname,不傳output配置chunkFilename:將會是[id].build.js{ path: '/test', name: 'test', component: resolve => require.ensure([], () => resolve(require('../components/test')), 'test') },
#註:require.ensure()是webpack 特有的,已經被import() 取代。以上
3種方式都能實現按需加載,最後在
webpack config裡面配置
chunkFilename
output: { path: path.resolve(__dirname, '../dist'), filename: 'js/[name].js', //.[hash].js', publicPath: '/', chunkFilename: 'js/[name].[chunkhash:3].js', },當然,我在專案裡是做了按需載入的,但是最終打包的檔案還是合併了。那麼看看問題出現在哪裡我的路由是這麼幹的:
import Vue from "vue"; import Router from "vue-router"; Vue.use(Router); let routes = []; let r = [ "", "install", "start", "log", "input", "button", "select", "switch", "form", "colorpicker", "loading", "icon", "timeline", "theme", "react-kui", "angular-kui", "alert", "message", "notice", "upload", "poptip", "menu", "tabs", "badge", "checkbox", "radio", "datepicker", "table", "layout", "page", "modal", "kyui-loader", "sponsor", "about", ]; r.forEach((x) => { routes.push({ path: `/${x}`, component: (resolve) => require([x == "" ? "./ui/index" : `./ui/${x}`], resolve), // component: r => require.ensure([], () => r(require(x==''?'/ui/index': `./ui/${x}` )), x) }); }); let routers = new Router({ routes: routes, mode: "history", }); export default routers;按需載入看似沒有問題吧,但是最後打包出來的
chunkFilename有
300kb,而且頁面全部都打進了一個
js檔。
探究了一番,因为是异步加载,所以不能动态传值的,map
遍历的时候路径组合x
值是动态传入,导致打包后无法识别。最后修改为静态的,问题解决了。重新编译后多个页面路由分割成单个js
文件,每个约10kb
左右,路由改变时,动态加载对应的js
文件
import xx from '/dev/test‘ //这里的abc 是静态的值 如 ‘/ui/abc.vue’ { path: 'xx', component: xx }
至此,问题解决了,页面加载正常情况下延时1-2秒,时间缩短了将近10陪。
【完】
推荐学习:vue.js高级教程
以上是淺析vue中web前端專案最佳化(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Vue.js是由尤雨溪在2014年發布的漸進式JavaScript框架,用於構建用戶界面。它的核心優勢包括:1.響應式數據綁定,數據變化自動更新視圖;2.組件化開發,UI可拆分為獨立、可複用的組件。

Netflix使用React作為其前端框架。 1)React的組件化開發模式和強大生態系統是Netflix選擇它的主要原因。 2)通過組件化,Netflix將復雜界面拆分成可管理的小塊,如視頻播放器、推薦列表和用戶評論。 3)React的虛擬DOM和組件生命週期優化了渲染效率和用戶交互管理。

Netflix在前端技術上的選擇主要集中在性能優化、可擴展性和用戶體驗三個方面。 1.性能優化:Netflix選擇React作為主要框架,並開發了SpeedCurve和Boomerang等工具來監控和優化用戶體驗。 2.可擴展性:他們採用微前端架構,將應用拆分為獨立模塊,提高開發效率和系統擴展性。 3.用戶體驗:Netflix使用Material-UI組件庫,通過A/B測試和用戶反饋不斷優化界面,確保一致性和美觀性。

NetflixusesAcustomFrameworkcalled“ Gibbon” BuiltonReact,notReactorVuedIrectly.1)TeamSperience:selectBasedonFamiliarity.2)ProjectComplexity:vueforsimplerprojects:reactforforforproproject,reactforforforcompleplexones.3)cocatizationneedneeds:reactoffipicatizationneedneedneedneedneedneeds:reactoffersizationneedneedneedneedneeds:reactoffersizatization needefersmoreflexibleise.4)

Netflix在框架選擇上主要考慮性能、可擴展性、開發效率、生態系統、技術債務和維護成本。 1.性能與可擴展性:選擇Java和SpringBoot以高效處理海量數據和高並發請求。 2.開發效率與生態系統:使用React提升前端開發效率,利用其豐富的生態系統。 3.技術債務與維護成本:選擇Node.js構建微服務,降低維護成本和技術債務。

Netflix主要使用React作為前端框架,輔以Vue用於特定功能。 1)React的組件化和虛擬DOM提升了Netflix應用的性能和開發效率。 2)Vue在Netflix的內部工具和小型項目中應用,其靈活性和易用性是關鍵。

Vue.js是一種漸進式JavaScript框架,適用於構建複雜的用戶界面。 1)其核心概念包括響應式數據、組件化和虛擬DOM。 2)實際應用中,可以通過構建Todo應用和集成VueRouter來展示其功能。 3)調試時,建議使用VueDevtools和console.log。 4)性能優化可通過v-if/v-show、列表渲染優化和異步加載組件等實現。

Vue.js適合小型到中型項目,而React更適用於大型、複雜應用。 1.Vue.js的響應式系統通過依賴追踪自動更新DOM,易於管理數據變化。 2.React採用單向數據流,數據從父組件流向子組件,提供明確的數據流向和易於調試的結構。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver CS6
視覺化網頁開發工具