精华内容
下载资源
问答
  • 白屏

    2020-11-27 13:06:09
    <div><p>加载md文件显示白屏,如果打开调试模式就好了,关掉就是白屏</p><p>该提问来源于开源项目:sbfkcel/towxml</p></div>
  • 白屏问题

    2020-12-25 17:08:39
    <div><p>下滚网页之后再返回视频会变成白屏</p><p>该提问来源于开源项目:esterTion/AcFun-HTML5-Player</p></div>
  • 偶尔白屏

    2020-11-29 21:30:39
    <div><p>好像基于ViewPager的都会偶尔白屏,怎么解决呢</p><p>该提问来源于开源项目:zhpanvip/BannerViewPager</p></div>
  • wkwebview白屏

    2020-09-08 13:43:53
    在viewDidAppear回调进行遍历WKWebView的subviews,查找WKCompositingView是否存在来判断是否白屏;出现白屏可以关闭页面或者重新构造WKWebView页面,经过测试reload,loadRequest没有效果; - (void)...

    解决方案

    在viewDidAppear回调进行遍历WKWebView的subviews,查找WKCompositingView是否存在来判断是否白屏;出现白屏可以关闭页面或者重新构造WKWebView页面,经过测试reload,loadRequest没有效果;

    - (void)viewDidAppear:(BOOL)animated
    
    {
    
        [super viewDidAppear:animated];
    
        BOOL isblank = [self isBlankView:self.webView];
    
        if (isblank)
    
            {
    
                [self performSelector:@selector(dismissViewController) withObject:nil afterDelay:0.1];
    
            }
    
    }
    
    
    
    - (void)dismissViewController
    {
        [self.navigationController popViewControllerAnimated:YES];
    }
    
    /*
     * 判断是否白屏(WKCompositingView不存在)
     * YES:blank
     */
    - (BOOL)isBlankView:(UIView*)view
    {
        //NSLog(@"root:%@", NSStringFromClass(view.class));
        Class wkCompositingView = NSClassFromString(@"WKCompositingView");
        if ([view isKindOfClass:[wkCompositingView class]])
        {
            return NO;
        }
        for (UIView *subView in view.subviews)
        {
            //NSLog(@"child:%@", NSStringFromClass(subView.class));
            if (![self isBlankView:subView])
            {
                return NO;
            }
        }
        return YES;
    }

     

    展开全文
  • 前言自从前端三大框架React、Vue...在JS没有解析加载完成之前页面无法展示,会处于长时间的白屏,带来了一定的用户体验问题,接下来本篇文章会介绍本人最近在白屏优化时遇到的一些问题和思考SSR想到白屏问题,首先想...

    前言

    自从前端三大框架React、Vue、Angular面世以来,前端开发逐渐趋向规范化、统一化,大多数时候新建前端项目,首先想到使用的技术一定是三大框架之一,框架给前端开发带来了极大的便利和规范,但是由于这三大框架都是JS驱动,在JS没有解析加载完成之前页面无法展示,会处于长时间的白屏,带来了一定的用户体验问题,接下来本篇文章会介绍本人最近在白屏优化时遇到的一些问题和思考

    SSR

    想到白屏问题,首先想到的解决方案一般都是服务端渲染,在服务端将渲染逻辑处理好,然后将处理好的HTML直接返回给前端展示,这样就可以解决白屏的问题,也可以解决seo的问题,因为不需要动态获取数据了,但是,这和我早期的写后端时的开发模式很像,前端和后端关联在了一起,不利于维护,同时,对于前端工程师来说,要求变高来,需要了解一定的后端知识,虽然有类似Nuxt.js这类的SSR框架帮我们简化了服务端的部分,但是在要做定制或是解决bug时还是无法避免要对服务端部分进行调试、维护,成本颇高,还有需要考虑的服务端渲染会增加服务器压力,要处理并发、运行速度问题等等

    预渲染

    这个方案是相对简单直接的一个解决办法,尝试成本也比较低,这里介绍如何用prerender-spa-plugin做预渲染,这样就可以在浏览器进行渲染,而不需要将Vue或者React代码部署到服务器上,以vue-cli3的官方demo为例做配置,看具体的配置文件:

    const path = require('path')

    const PrerenderSPAPlugin = require('prerender-spa-plugin')

    const Renderer = PrerenderSPAPlugin.PuppeteerRenderer

    module.exports = {

    configureWebpack: config => {

    let plugins = []

    plugins.push(new PrerenderSPAPlugin({

    staticDir: path.resolve(__dirname, 'dist'),

    routes: ['/', '/about'],

    minify: {

    collapseBooleanAttributes: true,

    collapseWhitespace: true,

    decodeEntities: true,

    keepClosingSlash: true,

    sortAttributes: true

    },

    renderer: new Renderer({

    renderAfterDocumentEvent: 'custom-render-trigger'

    })

    }))

    config.plugins = [

    ...config.plugins,

    ...plugins

    ]

    }

    }

    上面代码是常用prerender-spa-plugin的配置,staticDir预渲染输出的文件地址,routes要做预渲染的路由,minify压缩相关的配置,renderer渲染引擎相关的配置,可以传入自定以的渲染引擎或者直接使用默认的PuppeteerRenderer,renderAfterDocumentEvent是渲染引擎配置中的一个属性,指当某个事件触发时才执行预渲染,这里有关于渲染引擎的完整属性介绍,这很重要,尤其是对一些特定场景的下的需求,当然简单场景下完全可以不配置renderer渲染引擎选项,直接用默认选项。

    接下来执行编译,看看会发生什么?

    dist目录下会生成路由对应的文件夹,打开index.html

    Vue logo

    Welcome to Your Vue.js App

    For a guide and recipes on how to configure / customize this project,
    check out the vue-cli documentation.

    Installed CLI Plugins

    Essential Links

    Ecosystem

    为了方便,这里只贴了app节点里的代码,以往在没有使用预渲染插件时app节点里面是空的没有内容,从加载index.html文件开始到js文件解析完成之前,由于app节点里面是空的,因此页面会处于白屏状态,但是预渲染插件在编译阶段就将对应的路由编译好插入到app节点,这样就能在js文件解析过程中有内容展示,js解析完成后,Vue会将app节点内的内容替换成Vue渲染好的内容,来看看chrome调试下渲染有什么区别:

    常规渲染:

    预渲染:

    利用chrome浏览器的加载截屏功能可以看出常规渲染时会有明显的白屏时间,而预渲染则不会产生白屏,那么预渲染有什么缺点呢?

    动态数据无法展示,不同的用户看到的都是同样的页面

    路由很多时,代码构建时间太长

    用户容易误操作,由于预渲染时js还没有加载,因此展示出来的内容没有js的交互逻辑,比如按钮点击,在js加载完成之前用户点击是没有反应的

    预加载内容很少,当页面有内容是依赖动态数据加载时,在编译时是无法加载出动态数据的,因此会导致这部分内容编译不出来

    骨架屏

    骨架屏的实现原理和预加载类似,都是利用了Puppeteer爬取页面的功能,Puppeteer是chrome出的一个headlessChromenode库,提供了API可以抓取SPA并生成预渲染内容,和预加载不太一样的是骨架屏技术会在Puppeteer生成内容后,利用算法将生成的内容进行替换,生成骨架页面,page-skeleton-webpack-plugin是一个用来生成骨架屏的webpack插件,接下来就来看看怎么使用,还是以vue-cli3生成的官方项目为例:

    const SkeletonPlugin = require('page-skeleton-webpack-plugin').SkeletonPlugin

    const path = require('path')

    module.exports = {

    publicPath: '/',

    outputDir: 'dist',

    configureWebpack: config => {

    let plugins = []

    plugins.push(new SkeletonPlugin({

    pathname: path.resolve(__dirname, './shell'), // pathname为来存储 shell 文件的地址

    staticDir: path.resolve(__dirname, './dist'), // 最好和 `output.path` 相同

    routes: ['/', '/about'], // 将需要生成骨架屏的路由添加到数组中

    port: '7890'

    }))

    config.plugins = [

    ...config.plugins,

    ...plugins

    ]

    },

    chainWebpack: config => {

    if (process.env.NODE_ENV === 'production') {

    config.plugin('html').tap(opts => {

    console.log(opts[0])

    opts[0].minify.removeComments = false

    return opts

    })

    }

    }

    }

    上面例子是对page-skeleton-webpack-plugin的简单配置,想要完整的配置可以自行前往github获取,需要注意的是这段代码:

    chainWebpack: config => {

    if (process.env.NODE_ENV === 'production') {

    config.plugin('html').tap(opts => {

    console.log(opts[0])

    opts[0].minify.removeComments = false

    return opts

    })

    }

    }

    这是修改了vue-cli3中集成的html-webpack-plugin的压缩配置,将移除注释去掉了,因为page-skeleton-webpack-plugin在编译时,注入代码依赖注释,而vue-cli3中集成的html-webpack-plugin会在编译做压缩,将注释去掉,因此要单独配置一下,否则会在编译时导致生成app节点下没有内容。

    还有一个在使用时需要注意的点,如果你是vue-cli3脚手架生成的代码,运行时可能会报这样的错误:

    如果遇到这个错误,怎么解决呢?github上已经有对应的解决办法了,问题都说完了接下来看看怎么使用,运行项目后,在chrome调试器里执行toggleBar

    会在页面里显示一个Preview skeleton page按钮,点击后会生成一个新窗口

    这个窗口显示了当前页面的骨架屏样式和代码,可以修改骨架屏样式,然后点击右上角保存,会将对应路由的骨架屏保存到pathname对应的文件夹下

    然后执行编译,编译后会在staticDir中生成路由对应的html,这些html中的app节点下都被插入了路由对应骨架屏代码,然后在staticDir下启动服务访问,就能看到骨架屏的效果:

    从加载过程中可以看到骨架屏的加载

    总结

    本篇文章简单介绍了个人在白屏优化实践上尝试过的方案,每个方案都个有自己的优劣,需要自己根据实际的业务场景进行取舍,希望对大家在解决此类问题时有所帮助。

    如果有错误或不严谨的地方,欢迎批评指正,如果喜欢,欢迎点赞

    展开全文
  • 前言该篇文章会为您分享在前端性能优化中非常重要的一环-白屏时间,将从白屏时间的概念、重要性以及白屏的过程一一进行阐述,同时提供性能优化的策略与实践。一、概念白屏时间:即用户点击一个链接或打开浏览器输入...

    定场诗

    曲木为直终必弯,养狼当犬看家难;墨染鸬鹚黑不久,粉刷乌鸦白不天。蜜饯黄莲终需苦,强摘瓜果不能甜;好事总得善人做,哪有凡人做神仙。

    前言

    该篇文章会为您分享在前端性能优化中非常重要的一环-白屏时间,将从白屏时间的概念、重要性以及白屏的过程一一进行阐述,同时提供性能优化的策略与实践。

    一、概念

    白屏时间:即用户点击一个链接或打开浏览器输入URL地址后,从屏幕空白到显示第一个画面的时间。

    白屏时间的长短将直接影响用户对该网站的第一印象。

    二、白屏时间的重要性

    当用户点开一个链接或者是直接在浏览器中输入URL开始进行访问时,就开始等待页面的展示。页面渲染的时间越短,用户等待的时间就越短,用户感知到页面的速度就越快。这样可以极大的提升用户的体验,减少用户的跳出,提升页面的留存率。

    打开一个页面就像你的女票召唤你一样,你出现的越迅速,女票肯定会愈加欣喜!反之,你千呼万唤始出来,那么你的女票很可能又要抛弃你了(为什么要对你说又呢? ...)

    三、白屏是一个怎样的过程呢?

    让我们一起来揭秘:从打开一个页面,到页面的画面展示经历了怎样的过程!

    1. DNS Lookup

    DNS Lookup 即浏览器从DNS服务器中进行域名查询。

    浏览器会先对页面进行域名解析,获取到服务器的IP地址后,进而和服务器进行通信。

    Tips: 通常在整个加载页面的过程中,浏览器会多次进行DNS Lookup,包括页面本身的域名查询以及在解析HTML页面时加载的JS、CSS、Image、Video等资源产生的域名查询。

    2. 建立TCP请求连接

    浏览器和服务端TCP请求建立的过程,是基于TCP/IP,该协议由网络层的IP和传输层的TCP组成。IP是每一台互联网设备在互联网中的唯一地址。

    TCP通过三次握手建立连接,并提供可靠的数据传输服务。

    3. 服务端请求处理响应

    在TCP连接建立后,Web服务器接受请求,开始进行处理,同时浏览器端开始等待服务器的处理响应。

    Web服务器根据请求类型的不同,进行相应的处理。静态资源如图片、CSS文件、静态HTML直接进行响应;如其他注册的请求转发给相应的应用服务器,进行如数据处理、缓存中取数据,将数据按照约定好的格式响应给浏览器。

    在大型应用中,通常为分布式服务架构,应用服务器的处理有可能经过很多个系统的中间件,最终获取到需要的数据

    4. 客户端下载、解析、渲染显示页面

    在服务器返回数据后,客户端浏览器接收数据,进行HTML下载、解析、渲染显示。

    • a. 如果是Gzip包,则先解压为HTML
    • b. 解析HTML的头部代码,下载头部代码中的样式资源文件或脚本资源文件
    • c. 解析HTML代码和样式文件代码,构建HTML的DOM树以及与CSS相关的CSSOM树
    • d. 通过遍历DOM树和CSSOM树,浏览器依次计算每个节点的大小、坐标、颜色等样式,构造渲染树
    • e. 根据渲染树完成绘制过程

    浏览器下载HTML后,首先解析头部代码,进行样式表下载,然后继续向下解析HTML代码,构建DOM树,同时进行样式下载。当DOM树构建完成后,立即开始构造CSSOM树。理想情况下,样式表下载速度够快,DOM树和CSSOM树进入一个并行的过程,当两棵树构建完毕,构建渲染树,然后进行绘制。

    Tips:浏览器安全解析策略对解析HTML造成的影响:

    • 当解析HTML时遇到内联JS代码,会阻塞DOM树的构建
    • 特别悲惨的情况: 当CSS样式文件没有下载完成时,浏览器解析HTML遇到了内联JS代码,此时!!!根据浏览器的安全解析策略,浏览器暂停JS脚本执行,暂停HTML解析。直到CSS文件下载完成,完成CSSOM树构建,重新恢复原来的解析。

    一定要合理放置JS代码!!!

    四、白屏-性能优化

    至此,我们已经了解了从浏览器在打开一个链接开始,到屏幕展示的过程-白屏时间的历程,那这对每个环节中发生的事情,我们可以有针对性的进行相关的优化。

    1. DNS解析优化

    针对DNS Lookup环节,我们可以针对性的进行DNS解析优化。

    • DNS缓存优化
    • DNS预加载策略
    • 稳定可靠的DNS服务器

    2. TCP网络链路优化

    针对网络链路的优化,好像除了花钱没有什么更好的方式!

    3. 服务端处理优化

    服务端的处理优化,是一个非常庞大的话题,会涉及到如Redis缓存、数据库存储优化或是系统内的各种中间件以及Gzip压缩等...

    4. 浏览器下载、解析、渲染页面优化

    根据浏览器对页面的下载、解析、渲染过程,可以考虑一下的优化处理:

    • 尽可能的精简HTML的代码和结构
    • 尽可能的优化CSS文件和结构
    • 一定要合理的放置JS代码,尽量不要使用内联的JS代码

    声明

    本文为胡哥拜读周涛明、张荣华、张新兵几位大佬所著《大型网站性能优化实战》一书并结合自身经验所得,愿对诸位小伙伴有所帮助。手动微笑.gif

    后记

    以上就是胡哥今天给大家分享的内容,喜欢的小伙伴记得收藏转发、点击右下角按钮在看,推荐给更多小伙伴呦,欢迎多多留言交流...

    胡哥有话说,一个有技术,有情怀的胡哥!京东开放平台首席前端攻城狮。与你一起聊聊大前端,分享前端系统架构,框架实现原理,最新最高效的技术实践!

    长按扫码关注,更帅更漂亮呦!关注胡哥有话说公众号,可与胡哥继续深入交流呦!

    aeeff87d0dc4bbb4cfd60a1b5bc576fe.png
    展开全文
  • Vue白屏

    2019-12-09 14:09:34
    第一种,打包后文件引用路径不对,导致找不到文件报错白屏 解决办法:修改一下config下面的index.js中bulid模块导出的路径。因为index.html里边的内容都是通过script标签引入的,而你的路径不对,打开肯定是空白的。...

    第一种,打包后文件引用路径不对,导致找不到文件报错白屏
    解决办法:修改一下config下面的index.js中bulid模块导出的路径。因为index.html里边的内容都是通过script标签引入的,而你的路径不对,打开肯定是空白的。先看一下默认的路径。
    第二种,由于把路由模式mode设置影响
    解决方法:路由里边router/index.js路由配置里边默认模式是hash,如果你改成了history模式的话,打开也会是一片空白。所以改为hash或者直接把模式配置删除,让它默认的就行 。如果非要使用history模式的话,需要你在服务端加一个覆盖所有的情况的候选资源:如果URL匹配不到任何静态资源,则应该返回一个index.html,这个页面就是你app依赖页面。
    所以只要删除mode或者把mode改成hash就OK了。
    第三种,项目中使用了es6的语法,一些浏览器不支持es6,造成编译错误不能解析而造成白屏
    解决方法:
    安装 npm install --save-dev babel-preset-es2015
    安装 npm install --save-dev babel-preset-stage-3
    在项目根目录创建一个.babelrc文件 里面内容 最基本配置是:
    在这里插入图片描述
    第四种,如果你的测试说你的项目在 ios 10 出现白屏问题
    一个 bug
    你用Vue做了一个单页面应用,它在一切设备上都工作正常,但是突然有一天,你的测试和你说,这个网站在iOS 10上跑不起来,怎么办?
    项目在Safari中报一个错误:
    在这里插入图片描述
    可是你没有写过这样的代码,你怎么可能把一个名为e的变量定义两次?打开代码,会看到了这样的代码:
    在这里插入图片描述
    虽然这段代码看上去比较奇怪,但是语法上有任何问题吗?我就愿意定义一个名为e的函数,而这个函数的唯一入参名称也为e,并且我的for循环体里还愿意再定义一个名称为e的变量,es6的变量作用域允许我们这样做,此e和彼e互不干扰,不对吗?况且很显然,这段代码不是人写的,而是我们在执行npm run build的时候编译产生的。
    其实我们都没有错,我们也没写错,uglify也没搞错,错的是Safari本身。他们在第十七万一千零四十一号bug中承认了自己的错误

    当你定义一个与参数同名的for循环迭代变量时,我们错误地认为这是一个语法错误。
    看,多么谦逊的态度。所以你也不用太纠结于一个白屏幕,只要找到解决方法就好了。方法其实很简单:
    1.进入build文件夹;
    2.找到webpack.prod.conf.js文件;
    3.在UglifyPlugin的定义里添加关于mangle的选项,使它变成下面这个样子:
    在这里插入图片描述
    另一个 bug
    实际上,除此之外,还有另外一个bug也会影响到vue网页在iOS 10上的展现,特别是当你用到广为流传的Swiper插件的时候。这是因为Swiper插件中用到了ES6的语法a = b ** c,a是b的c次方,而iOS 10的Safari里不认识这样的语法,认为这是一个错误,所以你需要让Swiper经过babel的包装,而缺省状态下babel是不对node_modules里的模块进行编译的。
    解决方法是在项目根目录下新建一个文件vue.config.js,在里面添加如下语句:
    在这里插入图片描述
    至此,通常情况下导致项目出现白屏的问题,总结完毕

    展开全文
  • 前言前阵子弄了灰度环境,H5这边需要给灰度环境的接口加上Cookie,配置的期间遇到一些Cookie问题以及白屏在此记录下1、H5请求接口带不上Cookie解决方法:前端使用了 webpack 对项目进行打包,其中 ...
  • 今天就来给大家说一下,如果你的Macbook苹果 笔记本白屏怎么办 ? Macbook突然白屏,有可能是你的Mac系统开了个小差,也有可能是硬件问题。你可以先用以下三种方式尝试解决,如果解决不了,可以找迅维快修的维修...
  • 前言该篇文章会为您分享在前端性能优化中非常重要的一环-白屏时间,将从白屏时间的概念、重要性以及白屏的过程一一进行阐述,同时提供性能优化的策略与实践。一、概念白屏时间:即用户点击一个链接或打开浏览器输入...
  • 白屏的Bug

    2020-12-26 18:19:51
    <div><p>项目很不错,但就是总会出现三个Fragment白屏的问题。</p><p>该提问来源于开源项目:xiaohaibin/OpenEyes</p></div>
  • app打开白屏

    2021-01-09 02:21:57
    <div><p>我新下载的App2.1.0,打开是闪一下就白屏,换了两个手机荣耀和小米的,同样效果</p><p>该提问来源于开源项目:attentiveness/reading</p></div>
  • 首页刷新白屏

    2020-12-25 20:16:06
    首页打开刷新就会白屏,只显示底部tab栏,切换其他路由也是白屏,再次刷新其他页面,正常显示,切换首页正常显示,一旦在首页刷新就会白屏 <p><strong>复现步骤 [复现问题的...
  • 液晶屏白屏原因

    2018-01-20 22:09:26
    我们遇到的液晶显示屏一般是这样的。出现白屏故障,基本上可以... 一般的液晶显示器的工作方式是,液晶屏加电后工作,及液晶屏如果不加电应该是白屏的(我们是这样实验的,把液晶屏和主板的连线去掉后,发现白屏)。
  • 声明为什么我的 APP 启动会白屏或者黑屏有时候我们会发现,我们在启动我们自己的 APP 的时候,总是有那么点时间是白屏(黑屏),经过了白屏(黑屏)后才会进入我们的 APP。那么这是为什么呢?模拟效果下面我们模拟一下...
  • 声明为什么我的 APP 启动会白屏或者黑屏有时候我们会发现,我们在启动我们自己的 APP 的时候,总是有那么点时间是白屏(黑屏),经过了白屏(黑屏)后才会进入我们的 APP。那么这是为什么呢?模拟效果下面我们模拟一下...
  • 说到白屏,大家可能最先想到的就是dedecms了。Dedecms的白屏问题确实多,但是今天无忧主机小编要给大家介绍的是另一个大家耳熟能详的程序:discuz。说到discuz白屏,不少站长朋友感到非常头疼。为什么呢?Dz白屏的...
  • Demo页白屏

    2021-01-12 07:52:02
    页面白屏 报错如下: <img alt="image" src="https://user-images.githubusercontent.com/6947182/89849110-5aae6500-dbba-11ea-9eea-ffdd439e317b.png" /></p>该提问来源于开源项目:alibaba/hooks</p>...
  • 当系统启动一个App时,zygote进程会首先创建一个...于是系统根据你的Manifest文件设置的主题颜色的不同来展示一个白屏(黑屏)。而这个白屏(黑屏)正式的称呼就是Preview Window,即预览窗口。这篇文章主要剖析App冷启...
  • 主要介绍了详解vue 项目白屏解决方案,详细的介绍了白屏的解决方案,非常具有实用价值,需要的朋友可以参考下
  • Flutter 启动白屏

    千次阅读 2019-05-20 14:45:43
    Flutter 应用在 Android 端上启动时会有一段很明显的白屏现象,白屏的时长由设备的性能决定,设备性能越差,白屏时间越长. 然后这个白屏是可以控制的,在Android代码中的 style.xml中有这样一段代码: <style ...
  • nw js 打包白屏问题解决方案 node-webkit白屏
  • php 白屏

    2016-09-29 21:16:00
    访问php白屏(base on lnmp) vim nginx/conf/fastcgi_param fastcgi_param REDIRECT_STATUS 200; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 转载于:...
  • Firefox 下白屏

    2020-12-01 14:08:00
    <div><p>最近更新数据后,网页打开就是白屏,清空网站数据后可以正常访问,关掉标签页再次打开仍旧是白屏。</p><p>该提问来源于开源项目:arkntools/arknights-toolbox</p></div>
  • 白屏时间白屏时间指的是浏览器开始显示内容的时间。因此我们只需要知道是浏览器开始显示内容的时间点,即页面白屏结束时间点即可获取到页面的白屏时间。计算白屏时间因此,我们通常认为浏览器开始渲染标签或者解析完...
  • 解决swing皮肤白屏问题,打包完成的可视化项目,更换jre即可

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,275
精华内容 2,510
关键字:

白屏