撩課-Web大前端每天5道面試題-Day25

来源:https://www.cnblogs.com/gxq666/archive/2019/01/03/10212240.html
-Advertisement-
Play Games

1.web前端開發,如何提高頁面性能優化? 2.前端開發中,如何優化圖像?圖像格式的區別? 3.Vue的雙向數據綁定原理是什麼? 4.請說下封裝 vue 組件的過程? 5.vue.cli中怎樣使用自定義的組件?有遇到過哪些問題嗎? ...


1.web前端開發,如何提高頁面性能優化?

內容方面:

1.減少 HTTP 請求 (Make Fewer HTTP Requests)

2.減少 DOM 元素數量 (Reduce the Number of DOM Elements)

3.使得 Ajax 可緩存 (Make Ajax Cacheable)

針對CSS:

1.把 CSS 放到代碼頁上端 (Put Stylesheets at the Top)

2.從頁面中剝離 JavaScript 與 CSS (Make JavaScript and CSS External)

3.精簡 JavaScript 與 CSS (Minify JavaScript and CSS)

4.避免 CSS 表達式 (Avoid CSS Expressions)

針對JavaScript :

1. 腳本放到 HTML 代碼頁底部 (Put Scripts at the Bottom)

2. 從頁面中剝離 JavaScript 與 CSS (Make JavaScript and CSS External)

3. 精簡 JavaScript 與 CSS (Minify JavaScript and CSS)

4. 移除重覆腳本 (Remove Duplicate Scripts)

面向圖片(Image):

1.優化圖片

2 不要在 HTML 中使用縮放圖片

3 使用恰當的圖片格式

4 使用 CSS Sprites 技巧對圖片優化

 

2.前端開發中,如何優化圖像?圖像格式的區別?

優化圖像:

1、不用圖片,儘量用css3代替。 比如說要實現修飾效果,如半透明、邊框、圓角、陰影、漸變等,在當前主流瀏覽器中都可以用CSS達成。

2、 使用矢量圖SVG替代點陣圖。對於絕大多數圖案、圖標等,矢量圖更小,且可縮放而無需生成多套圖。現在主流瀏覽器都支持SVG了,所以可放心使用!

3.、使用恰當的圖片格式。我們常見的圖片格式有JPEG、GIF、PNG。

基本上,內容圖片多為照片之類的,適用於JPEG。

而修飾圖片通常更適合用無損壓縮的PNG。

GIF基本上除了GIF動畫外不要使用。且動畫的話,也更建議用video元素和視頻格式,或用SVG動畫取代。

4、按照HTTP協議設置合理的緩存。

5、使用字體圖標webfont、CSS Sprites等。

6、用CSS或JavaScript實現預載入。

7、WebP圖片格式能給前端帶來的優化。
   WebP支持無損、有損壓縮,動態、靜態圖片,壓縮比率優於GIF、JPEG、JPEG2000、PG等格式,非常適合用於網路等圖片傳輸。

圖像格式的區別:

矢量圖:圖標字體,如 font-awesome;svg 點陣圖:gif,jpg(jpeg),png

區別:

  1、gif:是是一種無損,8點陣圖片格式。
      具有支持動畫,索引透明,壓縮等特性。適用於做色彩簡單(色調少)的圖片,如logo,各種小圖標icons等。

  2、JPEG格式是一種大小與質量相平衡的壓縮圖片格式。適用於允許輕微失真的色彩豐富的照片,
      不適  合做色彩簡單(色調少)的圖片,如logo,各種小圖標icons等。

  3、png:PNG可以細分為三種格式:PNG8,PNG24,PNG32。後面的數字代表這種PNG格式最多可以索引和存儲的顏色值。

關於透明:PNG8支持索引透明和alpha透明;PNG24不支持透明;而PNG32在24位的PNG基礎上增加了8位(256階)的alpha通道透明;

優缺點:

  1、能在保證最不失真的情況下儘可能壓縮圖像文件的大小。

  2、對於需要高保真的較複雜的圖像,PNG雖然能無損壓縮,但圖片文件較大,不適合應用在Web頁面上。 

 

3.Vue的雙向數據綁定原理是什麼?

vue.js 是採用數據劫持結合發佈者-訂閱者模式的方式,
通過Object.defineProperty()來劫持各個屬性的setter,
getter,在數據變動時發佈消息給訂閱者,觸發相應的監聽回調。
具體步驟:

第一步:需要observe的數據對象進行遞歸遍歷,
包括子屬性對象的屬性,都加上 setter和getter
這樣的話,給這個對象的某個值賦值,
就會觸發setter,那麼就能監聽到了數據變化

第二步:compile解析模板指令,將模板中的變數替換成數據,
然後初始化渲染頁面視圖,並將每個指令對應的節點綁定更新函數,
添加監聽數據的訂閱者,一旦數據有變動,收到通知,更新視圖

第三步:Watcher訂閱者是Observer和Compile之間通信的橋梁,主要做的事情是:
1、在自身實例化時往屬性訂閱器(dep)裡面添加自己
2、自身必須有一個update()方法
3、待屬性變動dep.notice()通知時,能調用自身的update()方法,
   並觸發Compile中綁定的回調,則功成身退。

第四步:MVVM作為數據綁定的入口,整合Observer、Compile和Watcher三者,
通過Observer來監聽自己的model數據變化,通過Compile來解析編譯模板指令,
最終利用Watcher搭起Observer和Compile之間的通信橋梁,
達到數據變化 -> 視圖更新;視圖交互變化(input) -> 數據model變更的雙向綁定效果。

 

4.請說下封裝 vue 組件的過程?

首先,組件可以提升整個項目的開發效率。
能夠把頁面抽象成多個相對獨立的模塊,
解決了我們傳統項目開發:效率低、難維護、復用性等問題。
然後,使用Vue.extend方法創建一個組件,然後使用Vue.component方法註冊組件。
子組件需要數據,可以在props中接受定義。
而子組件修改好數據後,想把數據傳遞給父組件。可以採用emit方法。

 

5.vue.cli中怎樣使用自定義的組件?有遇到過哪些問題嗎?

第一步:在components目錄新建你的組件文件(smithButton.vue),script一定要export default {
第二步:在需要用的頁面(組件)中導入:import smithButton from ‘../components/smithButton.vue’
第三步:註入到vue的子組件的components屬性上面,components:{smithButton}
第四步:在template視圖view中使用,<smith-button> </smith-button>
問題有:smithButton命名,使用的時候則smith-button。

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 【作者】 劉博:攜程技術保障中心資料庫高級經理,主要關註Sql server和Mysql的運維和故障處理。 【環境】 版本號:5.6.21 隔離級別:REPEATABLE READ 【問題描述】 接到監控報警,有一個線上的應用DeadLock報錯,每15分鐘會準時出現,報錯統計如下圖: 登錄Mysq ...
  • 什麼是Redis的併發競爭問題 Redis的併發競爭問題,主要是發生在併發寫競爭。考慮到redis沒有像db中的sql語句,update val = val + 10 where ...,無法使用這種方式進行對數據的更新。 假如有某個key(mileage), value(10),現在想把value ...
  • 自從成為架構師()之後,李大胖的學習動力似乎少了一些,尤其是今年(當然也有一些客觀因素)。 臨近歲末,內心著實有些慚愧,決定學習一把大數據。跟隨一下業界前沿(其實已經不是前沿了),夢想著有一天能夠擁有擁有夢想的權力。 操練起來 啟動裝有CentOS的虛擬機(IP是172.18.232.181),按照 ...
  • 在上一篇 學習安卓開發[3] 使用RecyclerView顯示列表 中瞭解了在進行列表展示時RecyclerView的使用,本次記錄的是在應用中如何通過隱式Intent調用其它應用的功能,比如發簡訊、打電話、拍照等 隱式Intent 簡訊 判斷是否存在相關APP 相機 FileProvider Bi ...
  • 配置:Android Studio3.2.0,gradle-4.6 ,windows10 在http://www.android-studio.org/完成下載工作,我下載的版本是3.2.0。之後一路安裝,最後沒有SDK的需要安裝一系列東西,準備開始創建第一個項目: application name ...
  • 問題: 執行cordova build android 出現輸出如下,編譯不成功。 ANDROID_HOME=/Users/huangenai/Library/Android/sdkJAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jd ...
  • 在小米8等一系列圓角的手機上測試項目時,發現我的自定義dialog無法全屏了,這時我的dialog全屏的解決方案還是和網上大部分人是一樣的 但是當手機使用了圓角設計時,可能就會為了顯示效果而強制使dialog能夠完整顯示。 常規做法可能是在其周圍加上padding。但是通過我的代碼可以看到,我已經使 ...
  • 在實際開發中,我們禁止縮放的實現方式: 1.meta設置: <meta name="viewport" content="width=device-width,height=device-height, initial-scale=1.0, maximum-scale=1.0, minimum-sc ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...