生命在于折腾。做成一件事情时,不要特别放大自己;事情没做好,也不用气馁。 一定要相信我是牛逼的,这件事情不行没有关系,我接着做下一个,我死之前一直干,早晚能成。
1. 进行SEO优化需要注意什么?
参考答案
- 合理的title、description、 keywords:搜索对着三项的权重逐个减小,title强调重点,description把页面内容高度概括(不可过分堆砌关键词)、keywords列出重要关键词。
- 重要内容不用js输出,爬虫不会执行js获取内容
- 非装饰性图片必须加alt
- 提高网站速度(网站速度是搜索引擎排序的一个重要指标)
- 谨慎使用display属性
- 减少使用iframe框架
- 服务端渲染 ……
2. React的有哪些限制以及JSX是什么 【React】
参考答案
React的限制如下:
- React 只是一个库,而不是一个完整的框架
- 它的库非常庞大,需要时间来理解
- 新手程序员可能很难理解
- 编码变得复杂,因为它使用内联模板和 JSX
JSX
- JSX 是J avaScript XML 的简写。是 React 使用的一种文件,它利用 JavaScript 的表现力和类似 HTML 的模板语法。这使得 HTML 文件非常容易理解。此文件能使应用非常可靠,并能够提高其性能
3.babel插件与预设的理解 【babel】
参考答案
- babel的核心是插件,babel的所有工作都是由插件完成的。
- babel预设是指:将一系列的常用插件集中在一个篮子里
babel/preset-env
,这样就不用单独的去一个一个安装babel提高的必要插件了 。
{
"plugins": [],
"presets": [
"@babel/preset-env"
]
}
4. Webpack中loader与plugin的区别,以及如何自定义 【Webpack】
参考答案
区别
- loader本身就只是一个函数,在该函数中对接收到的内容进行转换。它是个翻译官,它在modules的rules中配置,内部包含test、loader和options属性。
- Plugin就是插件,基于事件流。Webpack在运行当中会去广播一些事件,plugin去监听这些事件,然后干活。plugin单独配置,通过构造函数传入参数生效。
自定义loader
- loader本质上是一个函数
- 因为函数中的this作为上下文会被webpack填充,因此不能将loader设为一个箭头函数
- 该函数接受一个参数,这个参数是webpack传递给loader的文件源内容
自定义Plugin
- webpack编译会创建两个核心对象:compiler和compilation
- compiler:包含了webpack环境的所有配置消息,包括options、loader和plugin,以及webpack整个生命周期相关的钩子
- compilation:作为Plugin内置事件回调函数的参数,包含了当前的模块资源、编译生成资源、变化的文件以及被跟踪依赖的状态信息。当检测到一个文件变化,一次新的compilation将被创建
// 导出一个函数,其中source为webpack传递给loader的输入参数--文件源内容
module.exports = function(source){
const content = doSomething2JsString(source);
// 如果loader配置了options对象,那么this.query将指向options
const options = this.query
this.fallback(null,content) //异步
return content; //同步
}
自定义Plugin,需要遵循的规范是:插件必须是一个函数或是包含apply方法的对象,这样才能访问compiler实例
class MyPlugin{
//Webpack会调用MyPlugin实例的apply方法给插件实例传入compiler对象
apply(compiler){
// 找到合适的事件钩子,实现自己的插件
compiler.hooks.emit.tap('MyPlugin',compilation=>{
//do something
})
}
}
5. CSS如何声明变量 【CSS】