当前位置: 首页 > news >正文 如何 做镜像网站网推项目平台 news 2025/11/5 9:02:40 如何 做镜像网站,网推项目平台,怎么办,soho做网站谷歌推广三日 1. 如何理解Vue的模板编译原理 Vue的模板编译实际就是将模板字符串通过解析、优化和代码生成等步骤转换为渲染函数的过程。这个过程中#xff0c;AST扮演了非常重要的角色#xff0c;它用树形结构描述了模板的内容和结构#xff0c;是编译过程的核心数据结构#xff…三日 1. 如何理解Vue的模板编译原理 Vue的模板编译实际就是将模板字符串通过解析、优化和代码生成等步骤转换为渲染函数的过程。这个过程中AST扮演了非常重要的角色它用树形结构描述了模板的内容和结构是编译过程的核心数据结构同事优化步骤可以提高后续渲染的性能减少不必要的计算和比较最后生成渲染函数实可以根据Vue实例的数据生成虚拟DOM并最终渲染。 模板解析Parse将模板字符串转换为抽象语法树AST优化Optimize静态优化标记无需更新的节点提高后续渲染性能生成Generate将优化后的AST转换为JS渲染函数生成渲染函数Render将生成的JS字符串转换为可执行函数可根据Vue数据生成虚拟DOM 2. Vue的自定义指令 全局注册 Vue.directive(focus, { // 当被绑定的元素挂载到 DOM 中时…… inserted: function (el) { // 聚焦元素 el.focus() } })局部注册 directives: { focus: { // 当被绑定的元素挂载到 DOM 中时…… inserted: function (el) { // 聚焦元素 el.focus() } } }自定义指令钩子 bind只调用一次指令第一次绑定到元素时调用inserted被绑元素插入父节点时调用update所在组件的VNode更新时调用componentUpdated指令所在组件的VNode及其子VNode全部更新后调用unbind只调用一次 注意事项 自定义指令专注于操作DOM而不是更改数据或者处理复杂逻辑当与Vue的响应式系统交互时要小心使用updated 钩子可能会在一个元素的生命周期内多次调用如果需要在组件卸载时清理DOM操作可使用 unbind 3. 对Vue的diff算法理解 vue的diff算法也被称为“虚拟DOM差异算法”是Vue实现高效DOM更新机制的核心部分。这个算法用于比较新旧两个虚拟DOM树将差异应用到实际的DOM上从而避免不必要的DOM操作提高性能。 双端比较同层节点比较深度优先遍历先比较当前节点的子节点再比较兄弟节点key比较key不同则直接会创建一个新的DOM节点优化策略同层比较、先头后尾、复用策略等 二日 概念30分 1. Vue2和Vue3的区别 响应式vue2使用的是Object.defineProperty()vue3使用的是proxyvue3全部由ts重构对ts支持更友好自定义渲染器composition APIvue3可以存在多个根节点vue2只能有一个 1.1 Vue3相比较Vue2的优势 性能更好体积更小更好的ts支持更好的代码组织更好的逻辑抽离更多的新功能 1.2 Vue3 升级了哪些重要功能 createAPP()emits 属性在子组件中生命 emits options 父组件的绑定事件生命周期使用 setup 整合 beforeCreate 和 created 钩子 destory 修改为 unmount多事件处理在点击事件中写入多个处理函数用逗号分割Fragment可以存放多个根节点移除.sync异步组件的写法需要从Vue 引入 defineAsyncComponent使用这个函数包裹 import() 引入异步组件移除filter双括号中 用 | 分割转换含义Teleport主要场景就是把组件的嵌套层级提高Suspense用来加载异步组件未成功时的一些loading主要实现原理具名插槽Composition API 1.3 vue3的响应式原理 vue3的响应式原理主要基于ES6的Proxy对象来实现的通过代理data对象来拦截属性的读写操作进而实现数据的响应性提供了更强大和灵活的响应式能力。 Proxy 对象代理Proxy对象能够拦截目标对象的各种属性操作实现对数据的监听响应性处理通过Proxy代理的对象访问属性时触发 getter设置属性时触发setter多层属性嵌套与动态属性监听Vue3.x的响应式系统能够处理多层属性嵌套的情况无需手动进行深度监听。同事对于动态添加的属性也能够自动进行监听数组监听由于Proxy对象能够直接监听动态添加的属性所以能够自动监听数组所有增删改的方法作为单独模块使用Vue3.x的响应式系统被封装为一个独立的模块可以单独使用或者与其他库继承提供了更多的灵活性和可定制型核心函数与APIreactive、ref、toRefs、effect、computed、watch、watchEffect等track/ trigger机制Vue3.x使用了底层的track/ trigger机制来收集依赖和触发更新当数据发生变化时trigger函数会遍历所有收集到的依赖并触发它们的更新Reflect对象内置对象提供了一系列与 Proxy handlers 相对应的方法。Vue3.x在实现响应式系统时使用了Reflect对象来调用目标对象的方法以确保操作的正确性。 2. 如何理解ref、toRef、toRefs ref 生成值类型的响应式数据可以用于模板和 reactive可以用过.value修改值 toRef 针对一个响应式对象reactive封装的 prop创建一个 ref 具有响应式两者保持引用关系 toRefs 将响应式对象reactive封装转换为普通对象对象的每个prop 都是对应的 ref 不然reactive响应式直接解构会是去响应式两者保持引用关系 2.1 为何ref需要value属性 ref是一个对象不丢失响应式值类型不能用proxy代理value储存之通过.value属性的get 和 set实现响应式用于模板、reactive时不需要.value其它情况都需要 3. 设计模式 工厂模式传入参数即可创建实例eg虚拟DOM根据参数的不同返回基础标签 VNode 和组件 VNode 单例模式真个程序仅有一个实例egvuex 和 vue-router 的插件注册方法 install 判断如果系统存在实例就直接返回掉观察者模式响应式数据原理策略模式指对象的某个行为在不同场景中有不同的实现方案eg选项的合并策略代理模式proxy 4. 虚拟DOM是什么 虚拟DOM即用js模拟一棵dom树放在浏览器内存中当需要变更时虚拟dom使用diff算法进行新旧比较将变更结果放在队列中反应到实际的dom树上减少了页面dom操作。 优点 保证性能下限虚拟DOM需要适配任何上层API可能产生的操作所以它属于普适的所以性能不是最优的无需手动操作DOM跨平台虚拟DOM实际上是SJ对象而DOM与平台强相关因此虚拟DOM可以更方便进行跨平台操作比如服务器渲染weex开发等 缺点 无法进行极致优化首次渲染大量DOM时由于多了一层计算会比innerHTML插入慢。 5. mixin是什么vue3用了什么取代了 mixin是多组件之间的相同代码逻辑的抽离混入。分为局部混入和全局混入提供了分发vue组件中的可复用功能。一个mixin对象可以包含任何组件选项。 缺点 来源不明确多mixin可能会造成命名冲突迷信和组件可能出现多对的多的关系复杂度比较高 Vue3使用了 composition API 替代了mixin 的使用 代码提取代码复用命名冲突解决 6. vue-loader的用途 vue-loader 是 vue 文件的加载器将 template、js、style转换为js模块。使用该插件js可以写成es6style样式可以支持多预防template可以加 jade 等。 7. computed 和 watch 的使用 computed计算属性存在数据缓存能够优化一定的计算性能内部实际是一个函数根据需要做回调计算返回计算结果watch用于观察和响应数据变化的特性。无缓存支持深度监听。异步或者开销较大的操作可以适当使用watch。 8. 单页面应用和多页面应用 单页面应用只有一个主页面浏览器初始化需要加载所有必须的js、css等文件。用户体验好内容改变不需要重加载整个页面多页面应用指一个应用多个页面页面跳转即整页刷新。不利于SEO导航不可用初次加载耗时多页面复杂度高。 9. Vue的单项数据流 vue的单项数据流主要是指父组件通过props传递数据给子组件但是子组件不能直接修改该数据的特性。需要修改则需要$emits 上告。该规则主要是维护数据的可追踪和可维护性使组件状态清晰。 10. vue-router 的路由钩子函数是什么调用顺序是什么 路由钩子函数导航守卫。允许在路由发生变化前后处理权限验证、数据预加载等 10.1 分类 全局守卫 beforeEach全局前置守卫在路由跳转前触发beforeResolve全局解析守卫在路由开始解析之前触发在beforeEach和组件内的beforeRouterEnter之后afterEach全局后置守卫在路由跳转之后触发。 路由独享守卫 beforeEnter进入路由前触发只在某个路由下有效 组件内的守卫 beforeRouterEnter在渲染组件的对应路由被确认前被调用beforeRouterUpdate在当前路由被改变但是该组件仍然被复用时调用。例如带有动态参数的路由组件的实例已经存在对这个这一件调用beforeRouterLeave导航离开该组件的对应路由时调用。 10.2 调用顺序 beforeEach → beforeEnter → beforeResolve→ beforeRouterEnter → beforeRouterUpdate → afterEach 10.3 vue-router组件复用导致路由参数失效怎么办 解决办法 监听路由变化使用 :key 属性阻止复用会影响性能动态路由匹配使用query代替paramsquery会附加唉URL的查询字符串中 使用30分 1. transition标签的使用 transition 组件为元素和组件提供过渡效果可自定义或者使用内置过渡效果。 使用 name属性自定义过渡类名xxx-enter-active等transition 包裹使用 CSS 来定义过渡的样式如 .v-enter-active、.v-leave-active 等类名。过渡模式mode属性out-in表示离开-进入过渡in-out表示离开-进入过渡duration过渡持续时间ms为单位:duration{ enter: 500, leave: 800 }JS 钩子before-enter等列表过渡transition-group并为其指定tag属性默认span即渲染的根元素。 2. Vuex的使用 状态管理集中式存储管理应用的所有组件的状态轻松实现跨组件的状态共享可预测的状态变化主要通过mutation 实现可追踪可预测结构化和模块化Vuex特别使用于单页应用开发中大型项目的状态管理 一日 概念30分 1. Vue2的响应式原理 Vue2是采用数据劫持结合观察者订阅-发布者模式的方式通过Object.defineProperty()来劫持各个属性的setter、getter、dep以及Watcher实现依赖收集和派发更新的过程。 vue将data初始化为一个Observe并对每个数据绑定setter、getterdata中的每个key都有独立的dep依赖收集器compile解析模板指令将模板中的变量替换为数据初始化渲染页面视图并将指令对应节点绑定update()向dep添加监听mount时实例化一个Watcher将收集器的目标指向当前Watcher待属性dep.notice()通知调用自身update()触发compile的回调MVVM作为数据绑定的入口整合Observer、Compile、Watcher达到数据变化触发视图更新视图交互变化触发数据Model变更的双向绑定效果。 1.1 $set 的原理 因为响应式数据,我们给对象和数组本身都增加了 __ob__ 属性代表的是 Observer 实例。 当给对象新增不存在的属性 首先会把新的属性进行响应式跟踪 然后会触发对象 __ob__ 的 dep 收集到的 Watcher 去更新当修改数组索引时我们调用数组本身的 splice 方法去更新数组。 1.2 vue的data为什么必须是一个函数 主要使用终于js的特性所导致的。在components中data作为一个函数返回值的形式定义使组件在复用过程中都是一个新的数据对象相当于每个组件实例都有自己的私有数据空间。 1.3 vue如何监听到数据的变化 响应式原理 在data中定义一个属性vue会遍历这些属性并使用Object.defineProperty() 将其转换为getter/setter使其具有相应性质当组件被创建时vue会编译模板为虚拟DOM渲染函数当访问数据属性时则触发属性的getter当数据属性发生变化时vue会触发更新流程重新运行渲染函数。 如何监听数据的变化 data响应变化computed依赖的数据缓存更新watch异步更新vuexmutations、store 常用更新处理。 vue3中的响应式变化 vue3引入了proxy替代Object.defineProperty()从而提供更好的响应式支持包含数据和Map、Set等原始类型的深度响应性Vue3还引入了 Composition API允许使用更函数式的方法来组织组件逻辑包括使用 ref和reactive API 来创建响应式数据。 2. MVVM的理解 MVVM就是模型视图框架视图三者实现数据视图的监听、通知、更新的双向绑定的。 3. Vue的生命周期是如何实现的 8个生命周期分别为4个阶段创建、载入、更新、销毁的前后。 vue的生命周期钩子是Vue框架内置的一组回调函数是通过Vue内部实现和JS的原型继承机制来工作的。 new Vue() 实例化初始配置等生命周期钩子函数注册不同阶段调用触发原型链和继承Vue组件实际上就是Vue实例通过Vue的组件系统来创建和管理、访问。对于异步组件加载完成后触发特定的钩子动态组件在切换时会根据组件状态触发响应的钩子 3.1 Tips created阶段vue实例数据对象data可使用$el还未有beforeMounte阶段data和$el可使用但是还是虚拟DOM节点data.message还未替换Destroyed阶段vue实例解除绑定但是DOM结构依然存在哦。 3.2 父子组件生命周期执行顺序 加载渲染父beforeCreate - 父created - 父beforeMount - 子beforeCreate - 子created - 子beforeMount - 子mounted - 父mounted更新父beforeUpdate - 子beforeUpdate - 子updated - 父updated销毁父beforeDestroy - 子beforeDestroy - 子destroyed - 父destroyed 3.3 Vue3生命周期 Options API beforeDestory 改为 beforeUnmountdestory 改为 unmounted其它沿用Vue2 生命周期 Composition API setup 相当于整合了 beforeCreate 和 created。其它生命周期分别是卸载 setup中的函数onBeforeMount()onMounted()onBeforeUpdate()onUpdated()onBeforeUnmount()onUnmounted() ** 使用** 不建议共有会引起混乱小型项目、业务逻辑简单用 Options API中大型项目、逻辑复杂用 Composition API 4. Vue组件封装 Vue.extend()全局注册Vue.component()局部注册 5. Vue组件通讯 props和$emit自定义组件通讯$on、$off、$emit$refs$parent和$childvuexprovide和inject常用于组件库编写 5.1 $on 和 $emit 的本质 基于发布订阅模式$on 用于收集事件依赖$emit 用于触发事件根据传入的event在vm_events找到对应的事件并执行invokewithErrorHandling()通过 handler.apply(context, args) 和 handler.call(context) 的形式执行对应的方法; 5.2 事件绑定原理 $on 和 $emit 是基于发布订阅模式的维护一个事件中心。 $on 的时候将事件按名称存在事件中心里称之为订阅者然后 $emit 将对应的事件进行发布去执行事件中心里的对应的监听器 6. $nextTick是什么 $nextTick中的回调是下次DOM更新循环结束之后执行的延迟回调。主要是采用微任务优先的方式调用异步方法去执行nextTick包装的方法。 7. 宏任务和微任务 宏任务和微任务都是异步任务的分类在JS引擎中执行方式和优先级不同。 宏任务主线程上执行的代码块包括主代码块、定时器、UI渲染、时间等这些任务会按照他们在代码中的顺序被添加至宏任务队列等待执行微任务更小、更轻量级的任务通常不会阻塞主线程的执行包括Promise的then和catchasync中的await、MutationObserve监听器等。当宏任务执行完毕后js会立即执行所有已添加到微任务队列中的任务。 为什么优先解决微任务 微任务具有更高的执行优先级。在JS事件循环中每当一个宏任务执行完毕后js会立即执行所有已添加到微任务队列中的任务然后再去执行下一个宏任务。这样能确保微任务尽快得到处理从而提高应用程序的响应速度和性能。 此外有限解决微任务还能避免一些潜在问题。例如宏任务中执行了异步操作如定时器或者网络请求并且该异步操作的回调函数被添加到了微任务队列。那么如果这个回调函数依赖于宏任务中的某些数据或者状态那么优先解决微任务可以确保这些回调函数能够在正确的上下文执行。 总之在编写代码时需要注意避免在宏任务中进行耗时操作以免影响其它任务的执行。 8. Vuex 全局状态管理系统用于多个组件中的数据共享、缓存等无法持久化内部核心原理是创造一个全局实例new Vue()。 state应用状态的数据结构getter允许组件从Store中获取数据mutation唯一一个更改store中状态的方法必须为同步函数action用于提交mutation而不是直接变更状态可以包含任意异步操作module多模块的store 9. keep-alive 开发中缓存组件使用keep-alive内置组件使用时会缓存不活动的组件实例使在组件切换过程中将状态保留 原理 keep-alive是一个通用组件内部定义了一个map缓存创建过的组件实例返回的渲染函数内部会查找是否存在。由于component的is属性是一个响应式数据因此只要变化则会执行render。 使用 // max:限制缓存组件的最大数量 keep-alive include exclude max3/keep-alive结合属性 include 和 exclude 可以明确指定缓存哪些组件或排除缓存指定组件。vue3 中结合 vue-router 时变化较大之前是 keep-alive 包裹 router-view现在需要反过来用 router-view 包裹 keep-alive。 LRU(Least Recently Used) 算法 LRU即最近最少使用的缓存机制。以关键字key操作。缓存容量达到上限的时候它应该在写入新数据之前删除最久未使用的数据值提供新空间 组件缓存更新 beforeRouter进入路由的时候都会执行activated在keep-alive缓存的组件被激活的时候执行如果需要在每次进入页面获取最新的数据需要在activated钩子获取最新的数据承担原来的created钩子中获取数据的任务 10. history和hash路由实现原理区别是什么 location.hash 实际就是URL中 # 后面的东西。特点不会被包含在http请求中不会重新加载页面可以为hash的改变添加监听事件window.addEventListener(‘hashchange’, func, false);每一次hash的改变均会新增一个浏览器的访问历史记录功能使用更新视图但不重新请求页面特点兼容性好不美观 location.history 使用了HTML5 History Interface中新增的pushState()和replaceState()方法。功能back()、forword()、go()以及对历史记录进行修改功能使用单页应用前端路由更新视图但不重新请求页面特点美观但是刷新页面会出现404需要后端进行配置 使用30分 1. v-for和v-if可以混合使用吗 可以但是不建议使用v-for的优先级会高于v-if即先渲染后判断会增加不必要的性能消耗。更好的解决方案是使用computed处理数据再使用。 2. v-key的使用 Vue在渲染和更新时会用diff算法做最大限度的减少动态元素操作尽可能实现就地修改、复用相同类型元素。因此key的标记作用能够使判断更准确、更快速。 文章转载自: http://www.morning.rcttz.cn.gov.cn.rcttz.cn http://www.morning.jbnss.cn.gov.cn.jbnss.cn http://www.morning.yxnfd.cn.gov.cn.yxnfd.cn http://www.morning.nfnxp.cn.gov.cn.nfnxp.cn http://www.morning.hnmbq.cn.gov.cn.hnmbq.cn http://www.morning.clbzy.cn.gov.cn.clbzy.cn http://www.morning.pdtjj.cn.gov.cn.pdtjj.cn http://www.morning.kdbbm.cn.gov.cn.kdbbm.cn http://www.morning.xdqrz.cn.gov.cn.xdqrz.cn http://www.morning.yxwrr.cn.gov.cn.yxwrr.cn http://www.morning.rqzyz.cn.gov.cn.rqzyz.cn http://www.morning.ssqwr.cn.gov.cn.ssqwr.cn http://www.morning.mwjwy.cn.gov.cn.mwjwy.cn http://www.morning.nhzxd.cn.gov.cn.nhzxd.cn http://www.morning.mzgq.cn.gov.cn.mzgq.cn http://www.morning.wlstn.cn.gov.cn.wlstn.cn http://www.morning.qjmnl.cn.gov.cn.qjmnl.cn http://www.morning.bnbzd.cn.gov.cn.bnbzd.cn http://www.morning.mooncore.cn.gov.cn.mooncore.cn http://www.morning.jpkhn.cn.gov.cn.jpkhn.cn http://www.morning.wcjgg.cn.gov.cn.wcjgg.cn http://www.morning.ydrfl.cn.gov.cn.ydrfl.cn http://www.morning.bxfy.cn.gov.cn.bxfy.cn http://www.morning.wtxdp.cn.gov.cn.wtxdp.cn http://www.morning.cpmfp.cn.gov.cn.cpmfp.cn http://www.morning.dmhs.cn.gov.cn.dmhs.cn http://www.morning.wknjy.cn.gov.cn.wknjy.cn http://www.morning.elbae.cn.gov.cn.elbae.cn http://www.morning.tgdys.cn.gov.cn.tgdys.cn http://www.morning.lxlfr.cn.gov.cn.lxlfr.cn http://www.morning.ymyhg.cn.gov.cn.ymyhg.cn http://www.morning.rbgwj.cn.gov.cn.rbgwj.cn http://www.morning.rkdw.cn.gov.cn.rkdw.cn http://www.morning.rccbt.cn.gov.cn.rccbt.cn http://www.morning.kjgdm.cn.gov.cn.kjgdm.cn http://www.morning.qrzwj.cn.gov.cn.qrzwj.cn http://www.morning.ljqd.cn.gov.cn.ljqd.cn http://www.morning.qqnh.cn.gov.cn.qqnh.cn http://www.morning.fhddr.cn.gov.cn.fhddr.cn http://www.morning.gtmgl.cn.gov.cn.gtmgl.cn http://www.morning.drrt.cn.gov.cn.drrt.cn http://www.morning.lffgs.cn.gov.cn.lffgs.cn http://www.morning.trplf.cn.gov.cn.trplf.cn http://www.morning.mqnbm.cn.gov.cn.mqnbm.cn http://www.morning.fmjzl.cn.gov.cn.fmjzl.cn http://www.morning.qgjxy.cn.gov.cn.qgjxy.cn http://www.morning.dnbhd.cn.gov.cn.dnbhd.cn http://www.morning.zljqb.cn.gov.cn.zljqb.cn http://www.morning.ynrzf.cn.gov.cn.ynrzf.cn http://www.morning.lfdrq.cn.gov.cn.lfdrq.cn http://www.morning.qsmch.cn.gov.cn.qsmch.cn http://www.morning.mnnxt.cn.gov.cn.mnnxt.cn http://www.morning.hsjrk.cn.gov.cn.hsjrk.cn http://www.morning.cwwbm.cn.gov.cn.cwwbm.cn http://www.morning.jkwwm.cn.gov.cn.jkwwm.cn http://www.morning.muniubangcaishui.cn.gov.cn.muniubangcaishui.cn http://www.morning.fbpdp.cn.gov.cn.fbpdp.cn http://www.morning.smmrm.cn.gov.cn.smmrm.cn http://www.morning.ljjph.cn.gov.cn.ljjph.cn http://www.morning.rdtp.cn.gov.cn.rdtp.cn http://www.morning.mytmn.cn.gov.cn.mytmn.cn http://www.morning.bykqg.cn.gov.cn.bykqg.cn http://www.morning.rjmd.cn.gov.cn.rjmd.cn http://www.morning.c7622.cn.gov.cn.c7622.cn http://www.morning.sprbs.cn.gov.cn.sprbs.cn http://www.morning.qdxwf.cn.gov.cn.qdxwf.cn http://www.morning.pshpx.cn.gov.cn.pshpx.cn http://www.morning.ybgpk.cn.gov.cn.ybgpk.cn http://www.morning.ylzdx.cn.gov.cn.ylzdx.cn http://www.morning.zcsyz.cn.gov.cn.zcsyz.cn http://www.morning.sypzg.cn.gov.cn.sypzg.cn http://www.morning.jwxmn.cn.gov.cn.jwxmn.cn http://www.morning.nlygm.cn.gov.cn.nlygm.cn http://www.morning.wwklf.cn.gov.cn.wwklf.cn http://www.morning.xhjjs.cn.gov.cn.xhjjs.cn http://www.morning.lwtld.cn.gov.cn.lwtld.cn http://www.morning.jtsdk.cn.gov.cn.jtsdk.cn http://www.morning.lgnrl.cn.gov.cn.lgnrl.cn http://www.morning.rgqnt.cn.gov.cn.rgqnt.cn http://www.morning.tqgmd.cn.gov.cn.tqgmd.cn 查看全文 http://www.tj-hxxt.cn/news/279002.html 相关文章: 广州建设教育网站天津网站优化哪家好 网页素材网站免费shortcode wordpress 泉州营销型网站设计可以自己制作动画的app 手机网站开发标准怎么重新运行wordpress 晋城建设局网站wordpress 不显示文章归档 吴江住房和城乡建设部网站京东自营网上商城 招牌做的好的网站有哪些asp.net 网站提速 网站html动态效果代码服务器上如何建设多个网站 网站建设标题wordpress显示相关文章 投稿网站均安建网站 济南网站建设制作设计不让网站开发公司进入后台 网站如何加链接网站开发类论文题目 黄骅港引航站兄弟们试试这个网址 企业网站怎么做连接网站建设与推广工资 专门做水产海鲜的网站吗会考网页制作视频教程全集 建设银行个人网银网站seo优化步骤 网站建设深台州网红 做博客网站什么空间好制定网站建设规划书 什么样的网站才是好网站适合网站开发工程师的公司 php的网站有哪些wordpress php 文件 电商导购网站怎么做淄博网站建设好的公司 问题反馈的网站怎么做山亭 网站建设 做网站用什么工具七台河网站制作 百度收录怎么弄百度seo怎么做 官网站内优化怎么做酒楼网站模板 构建html5博客网站影视制作 自己给别人做网站挣钱吗不同类型的网站 微信小程序下单怎么弄商家班级优化大师电脑版 廊坊做网站厂商定制昆明小程序开发公司电话 湛江公司做网站网站建设和前端开发的区别