예, theme_mod 함수는 느리지 만 크게 향상되지는 않으며 그 이점은 차이보다 중요합니다.
테마 모드는 옵션으로 저장됩니다. 본질적으로 theme_mod 함수는 옵션 함수를 감싸는 래퍼입니다.
먼저 theme_mod 설정은 특정 테마 이름을 기준으로 단일 옵션에 배열로 저장됩니다. 그래서 내가 이것을하면 :
set_theme_mod('aaa',123);
set_theme_mod('bbb',456);
그런 다음 실제로 데이터베이스에 얻는 것은 theme_mods_themename이라는 이름의 단일 옵션 행이며 여기에는 ( 'aaa'=> 123, 'bbb'=> 456)이있는 직렬 배열이 포함됩니다.
이제, get_theme_mod
실제로이 만들고 있기 때문에 속도가 느려집니다 get_option
전화를. 먼저 테마의 이름을 얻습니다. 그런 다음 theme_mods_themename
옵션을 얻습니다 . 바로 50 %의 속도 손실입니다. 나머지 작업은 추가 필터 호출이 있다는 점에서 대부분 필터에 있습니다. 그러나 해당 필터에 무언가가 없으면 그다지 중요하지 않습니다.
옵션 시스템은 검색된 데이터를 객체 캐시에 저장하므로 여기에서 여러 데이터베이스 호출을 수행하지 않습니다. 처음 사용하는 경우에만 데이터베이스 적중이 발생합니다.
는 set_theme_mod
그 다음 또 다른하게, 그 같은 두 GET 옵션 호출을하기 때문에 다소 느려집니다 get_option
다시 테마 이름을 얻기 위해 전화를 한 다음이하는 update_option
지금 변경 옵션의 전체 세트. 이로 인해 데이터베이스가 업데이트되고 더 많은 데이터를 전송한다는 사실은 실제로 눈에 띄게 느려지는 원인이 될 수 있습니다. 더 큰 행을 업데이트하는 것보다 몇 바이트를 업데이트하는 것이 더 빠릅니다. 그러나 보통 눈치 채지 못할 정도입니다. 많은 설정을 완전히하지 않는 한 ...
테마 모드 함수는 아마도 전체적으로 최적화해야 할 것입니다. 그럼에도 불구하고 자식 테마 때문에 get_option 대신에 사용해야합니다.
옵션 행을 직접 사용하는 문제는 옵션 행을 직접 사용하고 설정에 특정 키 이름을 사용한다는 것입니다.
"AAA"라는 테마가 있고 다른 사이트에서 사용하기 위해 "BBB"라는 하위 테마를 만드는 경우 "AAA"테마는 "example"이라는 옵션을 사용할 수 있습니다. 한 사이트를 업데이트하고 내 옵션을 업데이트하면 동일한 옵션이 이제 내 하위 테마에 적용됩니다. 내가 원하지 않으면 어떻게해야합니까? 하위 테마에서 다른 옵션 설정을 사용하도록하려면 어떻게해야합니까?
키의 일부로 실제 테마 이름 (하드 코딩 된 값이 아님)을 포함하여 테마 모드는 사이트의 각 "테마"가 고유 한 설정 세트를 사용하도록합니다. 앞뒤로 전환 할 수 있으며 설정이 전송되지 않고 설정 방식을 유지합니다. 더 단순하고 명확하며 직관적입니다.
그리고 미래의 핵심 변경 또는 플러그인이 theme_mods의 작동 방식을 수정하면 변경없이 자동으로 이점을 얻을 수 있습니다. 래퍼는 항상 느려질 것입니다. 그것은 피할 수 없으며 래퍼의 특성입니다. 그럼에도 불구하고 여전히 기계어가 아닌 PHP 코드를 작성하고 있습니다. 우리는 이와 같은 래퍼를 사용하여 사물을 단순화하고 기능을 분리합니다. 테마는 옵션이 데이터베이스에 저장되는 방식 또는 이름 지정 방식을 알거나 신경 쓸 필요가 없습니다. theme_mod 함수는보다 간단한 솔루션을 제공합니다.
/wp-includes
에option.php
어디에get_option()
정의, 그리고에서theme.php
어디get_theme_mod()
후자는 실제로 호출하는 정의, 당신은 볼 수 있습니다get_option()
또한 필요한 필터를 적용 그것의 확장 역할 자체를. 왜 더 느린 지 설명 할 수 있습니다.