本人从2010年开始使用Drupal,比此前使用的MediaWiki更符合通用的建站要求,Drupal对多语言、多站点的支持也是我选择它的重要因素。从最开始的6.x到7.x再到8.x,我一直都在使用,在这过程中需要修改模板、自建模块,也学会了PHP以及其它一些技术。在本博客中我也记录了很多日常使用Drupal中遇到的问题、解决的办法,希望对其他使用Drupal的朋友有所帮助。

这是 Drupal 分类的页面,点击下面标题查看详细文章内容:
本人从2010年开始使用Drupal,比此前使用的MediaWiki更符合通用的建站要求,Drupal对多语言、多站点的支持也是我选择它的重要因素。从最开始的6.x到7.x再到8.x,我一直都在使用,在这过程中需要修改模板、自建模块,也学会了PHP以及其它一些技术。在本博客中我也记录了很多日常使用Drupal中遇到的问题、解决的办法,希望对其他使用Drupal的朋友有所帮助。

Drupal网站的Views功能相对强大,特别是对于SQL不太熟悉的朋友来说Views的Web界面非常方便,而且数据库查询功能一点不弱,用Drupal这么多年了不能用Views实现的查询功能极少极少,但也还是存在用Views不好实现的场景,例如我遇到的:
我们一直很重视网站地图对搜索引擎的提交,以前的MediaWiki自带生成sitemap的程序,Drupal也有专门的第三方扩展XML Sitemap程序。
但Drupal的这个扩展只能对node, user, taxonomy term, menu等生成网站地图,也可以手工添加custom网址加入地图中,但却无法把Views批量做成的页面都加进去。这个问题以前不算很突出、很重要,因为主要页面都是node页面或者分类页面,但采取“在Drupal中直接导入、使用数据库”的办法以后,一个网站的主要页面基本上都是Views生成的,这时Drupa
以前在翻看Drupal的Performance & Scalability插件的时候留意过有一个Fast 404模块,知道是专门处理404报错页面,如果网站有很多404,这个模块可以降低负载,但没有详细了解。
最近还在不断尝试降低MySQL服务器的负载,今天干脆把这个模块安装试了试,英文的说明看起来比较复杂,我就把README.txt中的内容把一些要点对照翻译如下吧:
Fast_404 is Super Fast and Super Amazing. It is also very aggressive
Drupal中两种可以进行页面分类的工具是Taxonomy系统和Views方式,前者是专门的分类系统,用得比较多,而Views更加灵活,另外很早前也发现Views中有个叫着Taxonomy term的View,默认没有开启,如果开启的话,可以替代相同路径的分类页。
很早前为了降低数据库负载也曾在部分国外系列网站中启用过Taxonomy term View,现在发现RDS的慢查询语句中还有不少是默认分类页面的翻页计数SQL语句,现在全面使用Views Litepager,于是在把Taxonomy term这个View启用,还有几个措施:
Drupal系统的Views是个功能强大的工具,但也可能引起MySQL数据库性能问题,为了排查可以打开一些Views的开关设置。
我一般常用的是:
用Drupal很多年一直都是用的自带搜索,但存在数据量大时速度很慢、搜索结果不准确等问题,中途尝试过Apache Solr,但感觉太复杂、麻烦了。也知道Views可以用作内部搜索,但一直没有实施。
最近在设法降低MySQL服务器负载时,查看RDS后台的慢查询日志,发现有相当多的慢查询都是Drupal自带的搜索造成的,特别是数据量大的中文站、搜索汉字词特别长的时候。还有些数据量大的站,生成搜索索引都需要非常长的时间(生成的搜索表可能比内容类型的字段表大得多),自己去试着搜索也是非常慢(有些需要几十秒以上,几乎无法正常使用)。于是就尝试用Views来替代,现在记录
多语言支持是Drupal的重要特点,也是我们选择Drupal的重要原因,我们开发的Drupal网站很多都是带有多语言的,这其中就需要放置多个语言之间的互相链接,我们开始是使用的Language Icons第三方模块,后来又在手机版和响应式设计中使用了Language Switcher Dropdown,一直到现在。
最近在转UTF8MB4支持的过程中,把一些老旧的MyISAM引擎表转为了InnoDB引擎,应该更强大,但我们应用的场景是读取远远大于写入,不能很好发挥InnoDB的优势,反而在数据统计方面表现比MyISAM更慢,引起阿里云RDS负载(特别是IOPS
最近还在设法降低Drupal网站的MySQL负载,前些天尝试了安装entity cache,一般情况下可以把一个页面的70-120个mysql查询减少10个左右,然后把memcache使用的内存从1G增加到2G,应该会有一些帮助。
今天再次打开devel查询,发现多语言网站的页面中drupal_lookup_path特别多,50种语言就需要有50个这种查询,而且每个查询的语言代码不同,不能很好利用MySQL的查询缓存机制。
其实这个查询语句:
SELECT alias FROM url_alias WHERE
Drupal的Views是个非常强大、灵活的工具,但用得不合适也可能导致数据库负载的飙升。最近把Drupal站启用UTF8MB4支持,转换程序自动把以前的MyISAM引擎转为InnoDB了,也因此引起阿里云RDS的IOPS升高。
又试了一些调整RDS参数等,无效。再看了一些资料、观察了RDS的进程,还是一些Views的消耗大,特别是数据量大的站。以前在Drupal 6时就在个别网站中启用过views_litepager这个插件,来替换Views本身的翻页,牺牲了查看一共有多少页的功能,不再运行select count(*) ... 这个在InnoDB引擎消耗很
百度MIP我们也使用有一段时间了,现在开始有一点收录和流量,以前遗留的一些技术问题也需要去解决,包括表单Post方式提交后跳转网址不对的问题。
前面记录了一篇《AMP表单Post方式提交后不能跳转的问题及解决办法》,Drupal中的搜索功能以前用AMP一样的办法:改表单为Get提交方式来实现Drupal中的正确跳转,对于联系我们、页面留言都还没有太关注,刚才看是可以跳转的,只是没有跳转到对应的mip页面,而是跳转到对应的web页面。
AMP解决后,我去查了百度MIP官方网站中关于mip-form的文档,写得非常简单,没有说到需要改Hea
2002-2023 v11.7 a-j-e-0