首頁 >微信小程式 >小程式開發 >微信小程式 限制1M的瘦身技巧與方法詳解

微信小程式 限制1M的瘦身技巧與方法詳解

高洛峰
高洛峰原創
2017-01-10 10:04:273106瀏覽

微信小程式瘦身方法:

眾所周知,微信小程式在發布的時候,對提交的程式碼有1M大小的限制!所以,如果你正在寫一個功能稍微複雜一點的小程序,就必須得時時刻刻小心注意你的程式碼是不是快觸及這個底線了。

在設計一個小程式之初,我們就需要重點考慮這一點,採取一些方法,來避免太早的遭遇這個問題。

避免使用本地大圖片、大資源文件

請避免在小程序的UI上使用大圖片,應該盡可能的通過顏色樣式來裝點你的小程序

或者,使用小而精緻的小圖標來點綴

如果實在想用大圖片,那請不要將圖片放進小程式的本地程式碼中,應該採用從一個遠端URL位址載入圖片的方式

這樣就可以避免把大圖片、大資源檔案等打包進小程式的發布包中去了。

不要讓你的程式碼太囉嗦

在JavaScript程式碼層面,請審慎的考慮你的程式碼邏輯,不要把一個很簡單的邏輯洋洋灑灑的寫了一大堆,請優化和精簡你的程式碼。

在視圖層面,盡量避免不必要的組件嵌套,能用一個view做到的,就不要再多套一層view。這對減少程式碼尺寸和程式碼效能都是有好處的:)

使用工具壓縮優化程式碼

在當今HTML5等We​​b前端專案的開發和發布中,我們通常會透過使用一些前端工程化工具來處理我們的程式碼,例如使用Gulp,結合一些功能插件,如:uglify, cssnano, htmlmin等。使用這些工具,可以讓我們的程式碼尺寸小上那麼一大截(約20%~30%)。

而幸運的是,這些工具對小程式開發來說,也完全有效!透過簡單的使用這些工具,就能讓我們的程式碼減少那麼多,何樂而不為呢? !

在小程式中,我們大致有這麼幾類可以使用工具進行優化的文件:

JSON文件

我們可以使用jsonminify來壓縮JSON文件,去處JSON文件中多餘的空格

Java文件

使用文件

使用uglify,對JS程式碼進行語法最佳化和文字壓縮

WXML檔

使用htmlmin,可以對WXML檔案中多餘的空格,註解等進行清理

WX​​SS檔案

可以使用LESS提供的特性,對小程式中的全域WXSS進行合併;使用cssnano對WXSS檔案進行清理和壓縮;使用autoprefixer對WXSS添加不同環境下的前綴,達到良好的兼容性

Image檔案

透過使用imagemin,可以用來優化圖片檔案的大小

以下是一個我自己用的Gulp腳本,可以供大家參考一下:

package.json

{
 "name": "myproject",
 "version": "1.0.0",
 "description": "my project",
 "author": "Kevin Zhang <zarknight@gmail.com>",
 "scripts": {
  "build:prod": "gulp build:prod",
  "build:clean": "gulp build:clean",
  "watch:clean": "gulp watch:clean",
  "start": "npm run watch:clean"
 },
 "devDependencies": {
  "autoprefixer": "^6.6.0",
  "babel-eslint": "^7.1.1",
  "babel-preset-latest": "^6.16.0",
  "del": "^2.2.2",
  "gulp": "^3.9.1",
  "gulp-babel": "^6.1.2",
  "gulp-cssnano": "^2.1.2",
  "gulp-eslint": "^3.0.1",
  "gulp-htmlmin": "^3.0.0",
  "gulp-if": "^2.0.2",
  "gulp-jsonlint": "^1.2.0",
  "gulp-jsonminify": "^1.0.0",
  "gulp-less": "^3.3.0",
  "gulp-load-plugins": "^1.4.0",
  "gulp-postcss": "^6.2.0",
  "gulp-rename": "^1.2.2",
  "gulp-sourcemaps": "^2.2.1",
  "gulp-uglify": "^2.0.0",
  "run-sequence": "^1.2.2"
 }
}

gulpfile.js

const gulp = require(&#39;gulp&#39;)
const del = require(&#39;del&#39;)
const runSequence = require(&#39;run-sequence&#39;)
const autoprefixer = require(&#39;autoprefixer&#39;)
const $ = require(&#39;gulp-load-plugins&#39;)()
 
let prod = false
 
// -------------------- Clean --------------------------
 
gulp.task(&#39;clean&#39;, () => {
 return del([&#39;./dist/**&#39;])
})
 
// -------------------- Lint ---------------------------
 
gulp.task(&#39;eslint&#39;, () => {
 return gulp.src([&#39;./src/**/*.js&#39;])
  .pipe($.eslint())
  .pipe($.eslint.format())
  .pipe($.eslint.failAfterError())
})
 
gulp.task(&#39;jsonlint&#39;, () => {
 return gulp.src([&#39;./src/**/*.json&#39;])
  .pipe($.jsonlint())
  .pipe($.jsonlint.reporter())
  .pipe($.jsonlint.failAfterError())
})
 
// -------------------- JSON ---------------------------
 
gulp.task(&#39;json&#39;, [&#39;jsonlint&#39;], () => {
 return gulp.src(&#39;./src/**/*.json&#39;)
  .pipe($.if(prod, $.jsonminify()))
  .pipe(gulp.dest(&#39;./dist&#39;))
})
 
gulp.task(&#39;json:watch&#39;, () => {
 gulp.watch(&#39;./src/**/*.json&#39;, [&#39;json&#39;])
})
 
// -------------------- Assets --------------------------
 
gulp.task(&#39;assets&#39;, () => {
 return gulp.src(&#39;./src/assets/**&#39;)
  .pipe(gulp.dest(&#39;./dist/assets&#39;))
})
 
gulp.task(&#39;assets:watch&#39;, () => {
 gulp.watch(&#39;./src/assets/**&#39;, [&#39;assets&#39;])
})
 
// -------------------- WXML -----------------------------
 
gulp.task(&#39;templates&#39;, () => {
 return gulp.src(&#39;./src/**/*.wxml&#39;)
  .pipe($.if(prod, $.htmlmin({
   collapseWhitespace: true,
   removeComments: true,
   keepClosingSlash: true
  })))
  .pipe(gulp.dest(&#39;./dist&#39;))
})
 
gulp.task(&#39;templates:watch&#39;, () => {
 gulp.watch(&#39;./src/**/*.wxml&#39;, [&#39;templates&#39;])
})
 
// -------------------- WXSS ------------------------------
 
gulp.task(&#39;styles&#39;, () => {
 return gulp.src([&#39;./src/**/*.wxss&#39;, &#39;!./src/styles/**&#39;])
  .pipe($.less())
  .pipe($.postcss([
   autoprefixer([
    &#39;iOS >= 8&#39;,
    &#39;Android >= 4.1&#39;
   ])
  ]))
  .pipe($.if(prod, $.cssnano()))
  .pipe($.rename((path) => path.extname = &#39;.wxss&#39;))
  .pipe(gulp.dest(&#39;./dist&#39;))
})
 
gulp.task(&#39;styles:watch&#39;, () => {
 gulp.watch(&#39;./src/**/*.wxss&#39;, [&#39;styles&#39;])
})
 
// -------------------- JS --------------------------------
 
gulp.task(&#39;scripts&#39;, [&#39;eslint&#39;], () => {
 return gulp.src(&#39;./src/**/*.js&#39;)
  .pipe($.babel())
  .pipe($.if(prod, $.uglify()))
  .pipe(gulp.dest(&#39;./dist&#39;))
})
 
gulp.task(&#39;scripts:watch&#39;, () => {
 gulp.watch(&#39;./src/**/*.js&#39;, [&#39;scripts&#39;])
})
 
// ---------------------------------------------------------
 
gulp.task(&#39;build&#39;, [
 &#39;json&#39;,
 &#39;assets&#39;,
 &#39;templates&#39;,
 &#39;styles&#39;,
 &#39;scripts&#39;
])
 
gulp.task(&#39;watch&#39;, [
 &#39;json:watch&#39;,
 &#39;assets:watch&#39;,
 &#39;templates:watch&#39;,
 &#39;styles:watch&#39;,
 &#39;scripts:watch&#39;
])
 
gulp.task(&#39;build:clean&#39;, (callback) => {
 runSequence(&#39;clean&#39;, &#39;build&#39;, callback)
})
 
gulp.task(&#39;watch:clean&#39;, (callback) => {
 runSequence(&#39;build:clean&#39;, &#39;watch&#39;, callback)
})
 
gulp.task(&#39;build:prod&#39;, (callback) => {
 prod = true
 runSequence(&#39;build:clean&#39;, callback)
})
 
gulp.task(&#39;default&#39;, [&#39;watch:clean&#39;])

希望對你有幫助。如遇到什麼問題,可以留言給我,我會盡力幫你解答的。

更多微信小程式 限制1M的瘦身技巧與方法詳解相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn