首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wordpress使用wp_is_mobile()缓慢加载一页网站

Wordpress使用wp_is_mobile()缓慢加载一页网站
EN

Stack Overflow用户
提问于 2019-09-14 02:04:50
回答 1查看 351关注 0票数 0

我正在更新一个使用wordpress的网站的外观。对于前端,我使用的是bootstrap 4,我正在尝试优化网站的加载时间。我注意到,当用户尝试滚动页面,并且在用户滚动页面后的一段时间内渲染显示一些空白部分时,速度会非常慢。它是一个单页面的站点,所以我没有一个页面分区,所有的内容都是加载到index.php文件中的帖子。我对我用来检测用户是否在桌面或移动设备上浏览网站的wp_is_mobile()功能有疑问,我有一个仅在移动设备上加载的滑动条和另一个布局结构,其中包含仅在桌面上加载的相同图像。这发生在网站的所有部分,我认为这是元素渲染缓慢的原因。我想尝试使用bootstrap 4的可见性实用程序来隐藏我只想在移动设备上显示的元素,例如:

代码语言:javascript
复制
<?php if( wp_is_mobile() ): ?>
<div class="jumbotron jumbotron-fluid" id="carousel-wrapper">
  <div id="progetti-carousel" class="swiper-container">
    <div class="swiper-wrapper">
      <?php $slider = get_posts(array('post_type' => 'slider_progetti', 'posts_per_page' => 12)); ?>
        <?php foreach($slider as $slide): ?>
          <img src="<?php echo wp_get_attachment_url( get_post_thumbnail_id($slide->ID)) ?>" class="swiper-slide img-fluid"/>
      <?php endforeach; ?>
    </div>
    <div class="swiper-pagination"></div>
    <div class="swiper-button-prev"></div>
    <div class="swiper-button-next"></div>
  </div>
</div>
<?php endif; ?>

// or for desktop on the same template part:

<?php if( !wp_is_mobile() ): ?>
    <div class="col-lg-6">
      <div class="card-columns">
<?php $slider = get_posts(array('post_type' => 'slider_progetti', 'posts_per_page' => 12)); ?>
<?php foreach($slider as $slide): ?>
        <div class="card">
          <a class="open-modal" data-toggle="modal" href="#zoom-image"><img class="card-img-top" src="<?php echo wp_get_attachment_url( get_post_thumbnail_id($slide->ID)) ?>" /></a>
        </div>
<?php endforeach; ?>
      </div>
    </div>
    <div class="modal" tabindex="-1" role="dialog" id="zoom-image">
      <div class="modal-dialog" role="document">
        <div class="modal-content">
          <div class="modal-body">
            <img class="img-fluid w-100 img-zoomed" />
          </div>
        </div>
      </div>
    </div>
<?php endif; ?>

我不知道这是否可以加快加载速度,我也很担心,因为我不知道双重查询是否会成为问题,对于双重查询,我的意思是为了显示移动wordpress功能下的图像或内容,我正在使用与桌面相同的代码来显示我想要的元素,这些元素在移动设备上显示在布局中,在桌面上显示在另一个布局中。这会打破DRY原则,我知道这是一个糟糕的做法。任何关于如何改善加载的建议都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-14 02:11:25

我建议您使用wp_is_mobile()函数并将结果存储在一个变量中,并在使用wp_is_mobile()的任何地方重复使用该变量。

代码语言:javascript
复制
$is_mobile = wp_is_mobile();

此外,您应该使用Bootstrap提供的CSS类来显示/隐藏布局上的元素:

https://getbootstrap.com/docs/4.0/utilities/display/

作为参考,wp_is_mobile()的工作原理如下:

代码语言:javascript
复制
/**
 * Test if the current browser runs on a mobile device (smart phone, tablet, etc.)
 *
 * @since 3.4.0
 *
 * @return bool
 */
function wp_is_mobile() {
    if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) {
        $is_mobile = false;
    } elseif ( strpos( $_SERVER['HTTP_USER_AGENT'], 'Mobile' ) !== false // many mobile devices (all iPhone, iPad, etc.)
        || strpos( $_SERVER['HTTP_USER_AGENT'], 'Android' ) !== false
        || strpos( $_SERVER['HTTP_USER_AGENT'], 'Silk/' ) !== false
        || strpos( $_SERVER['HTTP_USER_AGENT'], 'Kindle' ) !== false
        || strpos( $_SERVER['HTTP_USER_AGENT'], 'BlackBerry' ) !== false
        || strpos( $_SERVER['HTTP_USER_AGENT'], 'Opera Mini' ) !== false
        || strpos( $_SERVER['HTTP_USER_AGENT'], 'Opera Mobi' ) !== false ) {
            $is_mobile = true;
    } else {
        $is_mobile = false;
    }

    /**
     * Filters whether the request should be treated as coming from a mobile device or not.
     *
     * @since 4.9.0
     *
     * @param bool $is_mobile Whether the request is from a mobile device or not.
     */
    return apply_filters( 'wp_is_mobile', $is_mobile );
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57928422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档