可变API与自定义表 -- 7 领域 和 performance 领域 drupal 相关 的问题

variable api vs custom table


简体版||繁體版
2
vote

问题

中文

我有一个模块块没有结果,当块具有时显示没有结果数据没结果。 变量api 如果我将使用变量API,那么我需要单个块的4个变量来保留NO结果数据并显示结果。 自定义表 如果我将使用自定义表,那么我将保留表中的6个字段。

id - 主键

模块 - varchar(64)

delta - varchar(32)

状态 - tinyint(4)

content - longblob

extent_criteria - varchar

唯一键 md module delta

list status module

概述 在每个街区视图中,我需要检查该块是否没有启用结果标准的块。如果它是我需要检查什么是空标准,并且在我需要执行动作的基础上。

问题 变量api :如果我将使用变量api然后在每个块视图上,我需要单独加载变量,即5个变量加载(〜5数据库获取查询)(如果块没有启用结果,则不会启用结果)和1可变负载(〜1查询)(如果块为该块禁用任何结果)。 随着变量API与缓存API集成,如此开发站点通常会从缓存中获取结果。如果一个站点有100块块,那么我似乎在我的情况下不是很好的方法。

自定义表 使用模块&amp加载整行;三角洲并在需要时采取适当的行动。

目前我已经使用变量API实现了这一点。 我应该使用哪种方法?那有还有其他更好的方法吗? 如果你建议一种方法,我如何使它更好?

英文原文

I have a module Block No Results which displays the no results data when block has no results. Variable Api if I will use the variable api then I need the 4 variables for a single block to keep the no results data and displays the results. Custom Table If I'll go with custom table then I'll keep the 6 fields in the table.

id - primary key

module - varchar(64)

delta - varchar(32)

status - tinyint(4)

content - longblob

empty_criteria - varchar

UNIQUE KEY md (module,delta)

KEY list (status,module)

Overview On every block view I need to check that whether the block no results criteria is enabled for this block.If it is then I need to check what is the empty criteria and on the basis of that I need to perform action.

Problem Variable api : If I'll use the variable api then on each block view I need to load the variables separately i.e. 5 variables load( ~5 database fetch queries)(if block no results is enabled) and 1 variable load(~1 query)(if block no results is disabled for that block). As the variable api is integrated with the cache api so on the development sites usually get the results from cache.This seems to me not good approach in the case if a site has 100's of blocks.

Custom table Load the whole row using the module & delta and take the appropriate action if needed.

Currently I have implemented this using the variable api. Which approach should I use ? Is there any other better approach then these ? how I can make it more better if you are going to suggest an approach ?

     

回答列表

3
 
vote

每说答案;更多对您的一些假设的批评与变量。

如果我将使用变量api,则在每个块视图上,我需要加载 变量单独等于5变量负载(〜5数据库获取 查询)(如果块没有启用结果)和1个可变负载(〜1 查询)(如果块没有禁用该块的结果)

在实际上,所有变量都加载了每个Pageload的每个Pageload,包括Cache_Page命中(思考匿名用户),除非您的特殊( 99887660 ,清漆或升压)。 变量_initialize() Get的呼叫很早;虽然 drupal_bootstrap()一点点看。所以一个变量的GET不会花费你一个数据库查询,但是滥用变量DB表是不是一个好主意,因为那里的数据越多(kb),较慢的drupal gets。

实际答案:
我的个人偏好是使用 cache_get_multiple()如果你看过100多个物品来获得;不幸的是它看起来像 _block_render_blocks()使这难以理解;调用 hook_block_view_alter()。所以在这种情况下,一个 cache_get 是最简单的方法。另一个选项是缓存加载程序;所有在一个cid(更难管理写入)或获取所有CID的启用块 block_page_build()或 $blocks = drupal_static('block_list'); drupal_static()。什么是理想取决于许多因素,最大的因素是大大(kb)是缓存的数据;如果它的小型装载机和amp; drupal_static()可能是最快的选项。如果您有大量数据,则执行单个Cache_get()调用可能由于较低的内存使用而不是加载未使用的数据而更好。查看 https://www.lullabot.com/blog/文章/初学者 - 指南-CACHING-DATA-DRUPAL-7 有关缓存的更多详细信息。

还意识到块缓存内置的核心。如果可能,请使用它。查看 https://www.drupal.org/project/blockcache_alter 为想法和用法。

 

Not an answer per say; more of a critique of some of your assumptions with variables.

If I'll use the variable api then on each block view I need to load the variables separately i.e. 5 variables load( ~5 database fetch queries)(if block no results is enabled) and 1 variable load(~1 query)(if block no results is disabled for that block)

In actuality all variables get loaded on EVERY pageload with a single query, including cache_page hits (think anonymous users) unless your doing something special ($conf['page_cache_without_database'] = TRUE;, varnish, or boost). variable_initialize() get's called very early; dig though drupal_bootstrap() a little bit to see. So a variable get doesn't cost you a db query, but it's not a good idea to abuse the variables db table because the more data that's in there (KB), the slower Drupal gets.

Actual answer:
My personal preference is to use cache_get_multiple() if your looking at 100s of items to get; unfortunately it looks like _block_render_blocks() makes this hard to do; the function that calls hook_block_view_alter(). So in this case a cache_get would be the easiest way to go. Another option is a cache loader; all in one cid (harder to manage writes) or get all cid's for the enabled blocks block_page_build() or $blocks = drupal_static('block_list'); with drupal_static(). What's ideal depends on many factors, biggest one being how large (KB) is the cached data; if its small a loader & drupal_static() might be the fastest option. If you have a large amount of data then doing individual cache_get() call might be better due to the lower memory usage and not loading unused data. See https://www.lullabot.com/blog/article/beginners-guide-caching-data-drupal-7 for more details on caching.

Also be aware of cores built in block caching. Use it if at all possible. See https://www.drupal.org/project/blockcache_alter for ideas and usage.

 
 
0
 
vote

我会建议使用自定义表与 ctools 模块。这具有使配置与功能模块的额外好处。

在线有一些非常好的文档,如果安装高级帮助模块以及<一个href ="http://drupal.org/project/ctools" rel ="nofollow" > ctools 模块,你也会得到一些非常好的文档。

编辑: ctools 还为您缓存了您的配置对象,这意味着写自己的代码较少。

 

I would suggest using a custom table in combination with the CTools module. This has the additional benefit of making your configuration exportable with the Features module.

There is some pretty good documentation online, and if you install the Advanced Help module along with the CTools module, you'll get some pretty good documentation as well.

EDIT: CTools also caches your configuration objects for you, which means less code to write yourself.

 
 

相关问题

10  file_scan_directory()需要大约10秒才能执行  ( File scan directory takes about 10 seconds to execute ) 
使用xhprof我注意到 file_scan_directory() 在前页加载时需要超过10秒才能执行。为什么要花这么长时间? 这是XhProfile的输出: ...

1  如何实现可搜索的地址数据库(对于表单)?  ( How to implement a searchable addresses database for a form ) 
我不确定我是否应该在这个网站上询问此类问题,但我已经尝试在Drupal Forum 此处,到目前为止没有回复。 我正试图找出在现有的Drupal 7站点中实现解决方案的最佳方法,该解决方案必须满足以下要求: 从CSV / XLS文件将地址导入数据库的选项,其中: 字段:ID,城市,地区,街道,街道号码,邮政编码...

9  如何配置带4G内存的服务器运行Drupal 7  ( How to configure a server with 4g of memory to run drupal 7 ) 
我在带有4 GB内存的新服务器上安装Drupal 7。我想在如何正确配置它的情况下,给出一些提示,给mysql提供多少内存,以及给PHP多少内存。我发现的一件事是,在Zend服务器上运行Drupal 7比在正常的Apache服务器上运行它的速度快三倍。 (我认为它与Opcode缓存有关。我注意到Devel模块它使用的...

90  是否会影响未启用的模块会影响性能?  ( Do non enabled modules affect performance ) 
具有垂直模块,但未使能对Drupal站点的性能有任何影响? 要换句话说,将删除Drupal站点上的禁用模块对性能有正影响? ...

22  优化认证用户性能的最佳方法?  ( Best way to optimize for authenticated user performance ) 
关键字在这里认证! 目前(据我所知)通过静态页面缓存(清漆/鱿鱼/升压)来优化匿名访问的De-Facto方法。 但是,据我所知,在大多数用户都经过身份验证的情况下,这似乎似乎似乎不太好。 除了明显的apc,memcache和硬件上的钱,性能如何调整高流量站点的最佳方式,主要是经过身份验证的用户? 例如:Drupal....

3  如何在云中使用Drupal与需求实例  ( How to use drupal in the cloud with on demand instances ) 
lightscale 做很多东西,以帮助致命难以预测的流量,并在交通尖峰时在线在线带来更多服务器。 是可以使用诸如此类服务的Drupal? 虽然可以为多个配置设置ropal,但是否有可能将其设置为才能使配置灵活。 您需要做些什么来确保它有效? 假设您可以在线带来需求实例,您需要做些什么来确保Drup...

52  缩放和调整性能的真实世界经验  ( Real world experience in scaling and tuning performance ) 
我正在工作的网站据称,在发布后,我很快就会有一个大规模的命中率。客户谈论每天大约2500次点击左右的可能性。 忽略了一个事实,这个命中率可能是野生的客户端乐观,除了获得最大的服务器可能的,什么是Drupal的应配置,支持大量的命中率的最佳方法。 我读过缩放 drupal.org基础设施, Drupal的性能博客,最...

10  拆卸Drupal的聚合JavaScript(自动)的最佳方法是什么?  ( What is the best way to minify drupals aggregated javascript automatically ) 
刚刚运行 google pagespeed 在我新创建的drupal 6站点上,它报告: Minifying the following JavaScript resources could reduce their size by 15.6KiB (12% reduction). Minifying...

0  Drupal 7网站中的性能和JavaScript问题  ( Performance and javascript issue in a drupal 7 website ) 
我有一个drupal 7网站。目前其性能不好,需要花费大量时间来渲染网页。对于性能,我在yslow中签出,提出了一些结果,如将所有JS文件移动到底,压缩它们和图像等。 据我所知,它的Drupal结构首先在头部渲染JS,然后加载身体内容。因此,有没有办法在Drupal在网页底部移动所有JS文件??? 我试图将Java...

7  从nid获取节点标题的最快方法是什么?  ( What is the fastest way to get node title from nid ) 
说我有一个nid(或很多人)。加载节点要访问的标题是否会更快,或者执行获取节点标题所需的非常简单的DB_Query? ...

13  Drupal 7和Pagespeed  ( Drupal 7 and pagespeed ) 
apache模块 pagespeed 为html,javascript等提供各种优化,这很好。< / p> 但是,它的一些功能与Drupal自己的聚合和优化方法是多余的。因此,有人测试哪些过滤器对典型的Drupal 7网站有用,由于Drupal已经为其提供支持而无用? ...

1  关于yslow反馈的思考  ( Thoughts on yslow feedback ) 
我已经阅读了许多关于改进Drupal的页面负载的文章,并使用尽可能多的步骤来增强站点的速度。 我安装了Firefox Pluggin yslow以在我的网站上获得反馈。由于在论坛推荐的改变,我得分了91个,这是一个评分。 yslow在配置实体标签(Etags)和级别使用饼干域时给我一个等级f。 是etags和无...

22  如果使用清漆,则使用“升压”模块是冗余的?  ( Is it redundant to use the boost module if varnish is used ) 
我们运行我们在ramnish服务器后面的drupal实例,但我们正在寻找替代/额外的方式来加快网站。 boost 是一个经常为此目的命名的模块;它似乎生成了页面的静态版本,并提供了那些避免再生时间的页面,但是 - 如果我们已经用清漆缓存了 - 这使我们有任何好处? ...

1  启用优化JS文件的问题  ( Problem with enabling the optimizing js files ) 
我已安装事件和注册模块。事件显示在日历中。一切都在工作。但是,当我在性能页面上启用优化JS文件时,现在不会为匿名和身份验证用户显示事件。现在它们仅适用于管理员。 我再次禁用"性能" 页面上的优化JS文件,但仍未显示事件。 有人可以告诉我有什么问题吗? 我正在使用drupal 6。 ...

12  监测基础设施的策略  ( Monitoring strategies for infrastructure ) 
最近,我一直在一些我部署的Drupal网站上的一些停机时间。我想通过重新启动服务或服务器本身来激发主动接近问题,而不是对这些停机时间作出反应。我已经阅读了关于Nagios,Munin,Cacti等的监控工具,以监控服务器/基础架构的健康,但我还没有真正尝试过生产。我处理Drupal oqul oquity oquit...

10  使用module_invoke_all(),或module_invoke()和module_implements()是更好的吗?  ( Is it better to use module invoke all or module invoke and module implemen ) 
使用 module_invoke_all('some_hook') 很容易,但对性能更好? foreach (module_implements('some_hook') as $module) { $data = module_invoke($module, 'some_hook'); } ...

6  drupal_add_js和drupal_flush_all_caches  ( Drupal add js and drupal flush all caches ) 
我试图在按钮的回调中调用 drupal_add_js 。似乎甚至与yould_build一样,这只能成功完成,只有在没有缓存数据的情况下工作。 所以,在启动页面之前,我运行 99887663 ,javascript成功添加到页面。 问题是我想从表单中获取一些用户输入数据,传递给JavaScript并介绍结果。我正在...

3  在用户对象中设置变量推荐练习  ( Set variable in user object recommended practice ) 
我在用户帐户中使用字段来存储一些用户变量。用户无法访问这些变量。 我担心在每个页面中使用user_load的高效才能访问变量。 也许最好使用变量_set()?在Drupal中设置/访问变量的建议过程是什么? ...

0  仅为其他页面启用高速缓存的前页提升?  ( Boost only for front page with cache enabled for other pages ) 
我知道 boost 模块只在禁用耳机缓存时才工作。 但是有没有办法打开 boost 模块仅限前页,启用缓存对于其他页面。 ...

1  Drupal性能问题 - 建立连接的时间太多了!  ( Drupal performance issue too much time to establish a connection ) 
我的drupal网站正在正常工作。然后我禁用对公众的一些会议的东西,经过一周或某事,它需要超过12秒才能建立连接,然后加载是真正的快速。 79 requests ❘ 35.47KB transferred ❘ 14.87s (onload: 14.87s, DOMContentLoaded: 13.06...

3  通过放置图像尺寸更好的性能  ( Better performance by putting image dimensions ) 
yslow建议,即使它们呈现为1:1级别,所有图像也应该具有维度属性,以便浏览器在加载图像之前知道尺寸,以便更快地开始呈现页面。 我有20个分类标题及其图像字段。如何使Drupal在每个图像HTML标记上放置其尺寸属性? 我有drupal 7。 ...

3  drupal的极限是多少? [关闭]  ( Whats the limit of drupal ) 
正如目前所在的那样,这个问题并不适合我们的Q&amp;一种格式。我们预计事实,参考资料或专业知识的支持,但该问题可能会征求辩论,论点,投票或扩展讨论。如果您觉得可以改进此问题并可能重新开放,请访问帮助中心进行指导。 ...

4  localhost加载非常缓慢(通过。统一服务器)  ( Very slow loading on localhost via uniform server ) 
我已经设置了drupal以在我的本地机器上成功运行,以在我的本地机器上安装统一服务器安装,但它真的慢的。在大多数其他页面上允许/禁用/禁用模块,超过30秒钟。这正在变得越来越久违。 我观察到/测试的东西: phpmyadmin(在同一服务器堆栈下运行)似乎没有任何不必要的时间加载任何操作。 按禁用我的防火墙(禁用...

3  在Drupal站点分发节点  ( Distributing nodes across drupal sites ) 
我正在调查如何创建一个可扩展的Drupal系统,其中可以在不同的站点上共享节点。为了支持未来的增长,我们可能需要将更多服务器/站点插入网络。 我在认为这将是最好的,中央网站可以存储主记录,用户和权限,然后从站点将包含相关的副本。并非所有站点都需要所有节点,只有链接的节点。 或者,中央站点可以存储哪个站点具有主记录。这...

17  Ajax回调的最快方法/实现是什么?  ( Whats the fastest method implementation for an ajax callback ) 
我有一个地图,它通过在各种/众多地图事件上通过Ajax加载标记。目前,我为我的 hook_menu()的项目定义了一个自定义页面回调,它打印我的JSON / JS。 由于我的页面回调不返回任何内容和只打印内容,drupal没有渲染完整的模板,菜单等,因此允许我返回一个页面与只我的javascript。 虽然这确实有效...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有